diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/treecms/cassandra/CassandraRandomNodeID.java	Tue May 31 15:55:28 2011 +0900
@@ -0,0 +1,76 @@
+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);
+		}
+	}
+}