Mercurial > hg > Members > shoshi > TreeCMSv2
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); + } + } +}