view src/treecms/cassandra/CassandraRandomNodeID.java @ 19:019ca5abb1f0

commit
author shoshi
date Tue, 31 May 2011 15:55:28 +0900
parents
children
line wrap: on
line source

package treecms.cassandra;

import java.util.Random;
import java.util.StringTokenizer;
import java.util.UUID;

import treecms.api.NodeID;
import treecms.tree.id.AbstractRandomNodeID;

public class CassandraRandomNodeID extends AbstractRandomNodeID
{
	private final long m_version;
	private final String m_uuid;
	
	
	private CassandraRandomNodeID(String _uuid,String _version)
	{
		this(_uuid,Long.parseLong(_version,16));
	}
	
	private CassandraRandomNodeID(String _uuid,long _version)
	{
		m_uuid = _uuid;
		m_version = _version;
	}
	
	@Override
	public NodeID create()
	{
		return newInstance();
	}

	@Override
	public String getUUID()
	{
		return m_uuid;
	}

	@Override
	public String getVersion()
	{
		return Long.toString(m_version);
	}

	@Override
	public NodeID update()
	{
		Random rnd = new Random();
		CassandraRandomNodeID id = new CassandraRandomNodeID(m_uuid,rnd.nextLong());
		return id;
	}
	
	public static CassandraRandomNodeID newInstance()
	{
		Random rnd = new Random();
		CassandraRandomNodeID id = new CassandraRandomNodeID(UUID.randomUUID().toString(),rnd.nextLong());
		return id;
	}

	public static CassandraRandomNodeID decode(String _id)
	{
		// UUID@Version
		StringTokenizer tokens = new StringTokenizer(_id,"@");
		
		try{
			String uuid = tokens.nextToken();
			String version = tokens.nextToken();
			
			CassandraRandomNodeID id = new CassandraRandomNodeID(uuid,version);
			
			return id;
		}catch(Exception _e){
			throw new IllegalArgumentException(_e);
		}
	}
}