Mercurial > hg > Members > shoshi > TreeCMS > TreeCMSPrototype1
view src/treecms/proto/simple/SimpleTreeBuilder.java @ 24:f0c35d444982
commit
author | ShoshiTAMAKI |
---|---|
date | Sun, 24 Oct 2010 15:45:13 +0900 |
parents | a3f8f5da4947 |
children | 99346c04a3cf |
line wrap: on
line source
package treecms.proto.simple; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import treecms.proto.api.Node; import treecms.proto.api.TreeBuilder; public class SimpleTreeBuilder implements TreeBuilder { private Node m_root; private AtomicLong m_ids; private ConcurrentHashMap<Thread,NodeUUID> m_idMap; public SimpleTreeBuilder() { m_idMap = new ConcurrentHashMap<Thread,NodeUUID>(); m_ids = new AtomicLong(); m_root = new SimpleNode(generateUUID()); } public Node getContents() { return m_root; } public Node createNode() { return new SimpleNode(generateUUID()); } public String generateUUID() { return generateUUID_AtomicLong(); //return generateUUID_ThreadLocal(); } public String generateUUID_AtomicLong() { //blocking? return Long.toString(m_ids.getAndIncrement()); } public String generateUUID_ThreadLocal() { NodeUUID uuid; uuid = m_idMap.get(Thread.currentThread()); if(uuid == null){ uuid = new NodeUUID(); m_idMap.put(Thread.currentThread(),uuid); } return uuid.getAndIncrement(); } private class NodeUUID { private UUID m_uuid; private long m_counter; public NodeUUID() { m_uuid = UUID.randomUUID(); m_counter = 0; } public String getAndIncrement() { String ret = m_uuid.toString() + "-" + m_counter; m_counter++; return ret; } } }