# HG changeset patch # User Shoshi TAMAKI # Date 1310988173 -32400 # Node ID 9cb971a68cc5cbc110c53e296eb781b34cfc21ef # Parent c1e7ec6b3d444207ced2f5ae00473f9421c04d3f added CachedForest.java diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/api/NodeTable.java --- a/src/treecms/api/NodeTable.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -package treecms.api; - -public interface NodeTable -{ - public void register(Node _newNode); - public Node get(NodeID _id); - public Node tip(String _fid); -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cached/CachedForest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/cached/CachedForest.java Mon Jul 18 20:22:53 2011 +0900 @@ -0,0 +1,23 @@ +package treecms.cached; + +import treecms.api.Forest; +import treecms.api.MonotonicTree; +import treecms.memory.OnMemoryForest; +import treecms.tree.id.NodeIDProvider; + +public class CachedForest implements Forest +{ + private final OnMemoryForest m_cache; + + public CachedForest(NodeIDProvider _provider) + { + m_cache = new OnMemoryForest(_provider); + } + + @Override + public MonotonicTree getMainTree() + { + MonotonicTree main = m_cache.getMainTree(); + return main; + } +} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cached/CachedForestEvent.java --- a/src/treecms/cached/CachedForestEvent.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -package treecms.cached; - -public enum CachedForestEvent -{ - ON_CACHE_CHANGED, - ON_CACHE_NOT_FOUND, - ON_SCHEDULED_UPDATE -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cached/CachedForestEventListener.java --- a/src/treecms/cached/CachedForestEventListener.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -package treecms.cached; - -public interface CachedForestEventListener -{ - public void onForestEvent(CachedForestEventListener _event); -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cached/CachedMemoryForest.java --- a/src/treecms/cached/CachedMemoryForest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -package treecms.cached; - -import java.util.Map; - -import treecms.api.Forest; -import treecms.api.MonotonicTree; -import treecms.api.NodeID; -import treecms.api.SingleNode; -import treecms.api.Tree; -import treecms.tree.util.NodeData; - -public class CachedMemoryForest implements Forest -{ - private Map m_nodeCache; - private Map m_tipCache; - - public CachedMemoryForest() - { - - } - - @Override - public SingleNode get(NodeID _id) - { - return null; - } - - @Override - public SingleNode getTip(String _uuid) - { - return null; - } - - @Override - public SingleNode create() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Tree getTree(SingleNode _root) { - // TODO Auto-generated method stub - return null; - } - - @Override - public MonotonicTree getMonotonicTree(Tree _tree) { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode create(NodeData _data) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Tree getMainTree() { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode create(NodeID _id, NodeData _data) { - // TODO Auto-generated method stub - return null; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraForest.java --- a/src/treecms/cassandra/CassandraForest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -package treecms.cassandra; - -import treecms.api.Forest; -import treecms.api.MonotonicTree; -import treecms.api.NodeID; -import treecms.api.SingleNode; -import treecms.api.Tree; -import treecms.tree.util.NodeData; - -public class CassandraForest implements Forest -{ - - @Override - public SingleNode get(NodeID _id) - { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode getTip(String _uuid) { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode create() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Tree getTree(SingleNode _root) { - // TODO Auto-generated method stub - return null; - } - - @Override - public MonotonicTree getMonotonicTree(Tree _tree) { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode create(NodeData _data) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Tree getMainTree() { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode create(NodeID _id, NodeData _data) { - // TODO Auto-generated method stub - return null; - } - - public static NodeID decodeStringID(String _strID) - { - CassandraRandomNodeID id = CassandraRandomNodeID.decode(_strID); - return id; - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraMonotonicTree.java --- a/src/treecms/cassandra/CassandraMonotonicTree.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -package treecms.cassandra; - -import treecms.api.MonotonicTree; -import treecms.api.MonotonicTreeNode; -import treecms.api.Tree; - -public class CassandraMonotonicTree implements MonotonicTree -{ - @Override - public boolean commit(boolean _force) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean pull() { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean check() { - // TODO Auto-generated method stub - return false; - } - - @Override - public void merge() { - // TODO Auto-generated method stub - - } - - @Override - public MonotonicTreeNode getRoot() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Tree getTree() { - // TODO Auto-generated method stub - return null; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraMonotonicTreeNode.java --- a/src/treecms/cassandra/CassandraMonotonicTreeNode.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -package treecms.cassandra; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import treecms.api.Forest; -import treecms.api.MonotonicTreeNode; -import treecms.api.NodeAttributes; -import treecms.api.NodeChildren; -import treecms.api.NodeID; -import treecms.api.SingleNode; - -public class CassandraMonotonicTreeNode implements MonotonicTreeNode -{ - - @Override - public NodeID getID() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Forest getForest() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Map asMap() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Set getKeySet() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void put(ByteBuffer _name, ByteBuffer _value) { - // TODO Auto-generated method stub - - } - - @Override - public void putAll(NodeAttributes _attrs) { - // TODO Auto-generated method stub - - } - - @Override - public ByteBuffer get(ByteBuffer _name) { - // TODO Auto-generated method stub - return null; - } - - @Override - public NodeAttributes getAll() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void remove(ByteBuffer _name) { - // TODO Auto-generated method stub - - } - - @Override - public void removeAll(Set _keySet) { - // TODO Auto-generated method stub - - } - - @Override - public void clearAttributes() { - // TODO Auto-generated method stub - - } - - @Override - public List getList() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Set getUUIDSet() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean add(MonotonicTreeNode _child) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean addAll(NodeChildren _children) { - // TODO Auto-generated method stub - return false; - } - - @Override - public MonotonicTreeNode get(String _uuid) { - // TODO Auto-generated method stub - return null; - } - - @Override - public MonotonicTreeNode get(int _index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public MonotonicTreeNode remove(String _uuid) { - // TODO Auto-generated method stub - return null; - } - - @Override - public MonotonicTreeNode remove(int _index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public MonotonicTreeNode replace(MonotonicTreeNode _newChild) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean contains(String _id) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean swap(String _uuid1, String _uuid2) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void clearChildren() { - // TODO Auto-generated method stub - - } - - @Override - public MonotonicTreeNode getParent() { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode getNode() { - // TODO Auto-generated method stub - return null; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraRandomNodeID.java --- a/src/treecms/cassandra/CassandraRandomNodeID.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -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); - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraSingleNode.java --- a/src/treecms/cassandra/CassandraSingleNode.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -package treecms.cassandra; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Map; -import java.util.Set; -import treecms.api.Forest; -import treecms.api.NodeAttributes; -import treecms.api.NodeChildren; -import treecms.api.NodeID; -import treecms.api.SingleNode; -import treecms.tree.util.NodeAttributesImpl; -import treecms.tree.util.NodeChildrenImpl; - -public class CassandraSingleNode implements SingleNode -{ - private final CassandraForest m_forest; - private final NodeID m_id; - - private final NodeChildren m_children; - private final NodeAttributes m_attrs; - - public CassandraSingleNode(CassandraForest _forest,NodeID _id) - { - m_forest = _forest; - m_id = _id; - - m_children = new NodeChildrenImpl(); - m_attrs = new NodeAttributesImpl(); - } - - @Override - public NodeID getID() - { - return m_id; - } - - @Override - public Forest getForest() - { - return m_forest; - } - - @Override - public List getList() - { - return m_children.getList(); - } - - @Override - public Set getUUIDSet() - { - return m_children.getUUIDSet(); - } - - @Override - public boolean add(SingleNode _child) - { - return m_children.add(_child); - } - - @Override - public boolean addAll(NodeChildren _children) - { - return m_children.addAll(_children); - } - - @Override - public SingleNode get(String _uuid) - { - return m_children.get(_uuid); - } - - @Override - public SingleNode get(int _index) - { - return m_children.get(_index); - } - - @Override - public SingleNode remove(String _uuid) - { - return m_children.remove(_uuid); - } - - @Override - public SingleNode remove(int _index) - { - return m_children.remove(_index); - } - - @Override - public SingleNode replace(SingleNode _newChild) - { - return m_children.replace(_newChild); - } - - @Override - public boolean contains(String _id) - { - return m_children.contains(_id); - } - - @Override - public boolean swap(String _uuid1, String _uuid2) - { - return m_children.swap(_uuid1, _uuid2); - } - - @Override - public void clearChildren() - { - m_children.clearChildren(); - } - - @Override - public Map asMap() - { - return m_attrs.asMap(); - } - - @Override - public Set getKeySet() - { - return m_attrs.getKeySet(); - } - - @Override - public void put(ByteBuffer _name, ByteBuffer _value) - { - m_attrs.put(_name,_value); - } - - @Override - public void putAll(NodeAttributes _attrs) - { - m_attrs.putAll(_attrs); - } - - @Override - public ByteBuffer get(ByteBuffer _name) - { - return m_attrs.get(_name); - } - - @Override - public NodeAttributes getAll() - { - return m_attrs.getAll(); - } - - @Override - public void remove(ByteBuffer _name) - { - m_attrs.remove(_name); - } - - @Override - public void removeAll(Set _keySet) - { - m_attrs.removeAll(_keySet); - } - - @Override - public void clearAttributes() - { - m_attrs.clearAttributes(); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraTree.java --- a/src/treecms/cassandra/CassandraTree.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -package treecms.cassandra; - -import treecms.api.Tree; -import treecms.api.TreeNode; - -public class CassandraTree implements Tree { - - @Override - public TreeNode getRoot() { - // TODO Auto-generated method stub - return null; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/cassandra/CassandraTreeNode.java --- a/src/treecms/cassandra/CassandraTreeNode.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -package treecms.cassandra; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import treecms.api.Forest; -import treecms.api.NodeAttributes; -import treecms.api.NodeChildren; -import treecms.api.NodeID; -import treecms.api.SingleNode; -import treecms.api.TreeNode; - -public class CassandraTreeNode implements TreeNode -{ - - @Override - public NodeID getID() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Forest getForest() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Map asMap() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Set getKeySet() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void put(ByteBuffer _name, ByteBuffer _value) { - // TODO Auto-generated method stub - - } - - @Override - public void putAll(NodeAttributes _attrs) { - // TODO Auto-generated method stub - - } - - @Override - public ByteBuffer get(ByteBuffer _name) { - // TODO Auto-generated method stub - return null; - } - - @Override - public NodeAttributes getAll() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void remove(ByteBuffer _name) { - // TODO Auto-generated method stub - - } - - @Override - public void removeAll(Set _keySet) { - // TODO Auto-generated method stub - - } - - @Override - public void clearAttributes() { - // TODO Auto-generated method stub - - } - - @Override - public List getList() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Set getUUIDSet() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean add(TreeNode _child) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean addAll(NodeChildren _children) { - // TODO Auto-generated method stub - return false; - } - - @Override - public TreeNode get(String _uuid) { - // TODO Auto-generated method stub - return null; - } - - @Override - public TreeNode get(int _index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public TreeNode remove(String _uuid) { - // TODO Auto-generated method stub - return null; - } - - @Override - public TreeNode remove(int _index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public TreeNode replace(TreeNode _newChild) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean contains(String _id) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean swap(String _uuid1, String _uuid2) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void clearChildren() { - // TODO Auto-generated method stub - - } - - @Override - public TreeNode getParent() { - // TODO Auto-generated method stub - return null; - } - - @Override - public SingleNode getNode() { - // TODO Auto-generated method stub - return null; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/collections/CopyOnWriteArrayList.java --- a/src/treecms/collections/CopyOnWriteArrayList.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,237 +0,0 @@ -package treecms.collections; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.RandomAccess; -import java.util.concurrent.locks.ReentrantLock; - - -public class CopyOnWriteArrayList implements List , RandomAccess -{ - private volatile Object[] m_array; - private final ReentrantLock m_lock; - - public CopyOnWriteArrayList() - { - m_array = new Object[0]; - m_lock = new ReentrantLock(); - } - - public CopyOnWriteArrayList(List _list) - { - this(); - if(_list instanceof CopyOnWriteArrayList){ - CopyOnWriteArrayList list = (CopyOnWriteArrayList)_list; - m_array = list.m_array; - } - } - - @Override - public int size() - { - return m_array.length; - } - - @Override - public boolean isEmpty() - { - return (size() == 0) ? true : false; - } - - @Override - public boolean contains(Object _o) - { - Object[] array = m_array; - for(Object item : array){ - if(item.equals(_o)){ - return true; - } - } - return false; - } - - @Override - public Iterator iterator() - { - List list = (List)Arrays.asList(m_array); - return Collections.unmodifiableList(list).iterator(); - } - - @Override - public Object[] toArray() - { - return Arrays.copyOf(m_array,size()); - } - - @Override - public T[] toArray(T[] _a) - { - final Object[] ret; - int size = size(); - if(_a.length < size){ - ret = Arrays.copyOf(m_array,size); - }else{ - System.arraycopy(m_array,0,_a,0,size); - ret = _a; - } - - return (T[])ret; - } - - @Override - public synchronized boolean add(E e) - { - int size = m_array.length; - Object[] newArray = new Object[size + 1]; - System.arraycopy(m_array,0,newArray,0,size); - newArray[size] = e; - m_array = newArray; - return true; - } - - @Override - public synchronized boolean remove(Object o) - { - int size = size(); - Object[] array = new Object[size - 1]; - - for(int i = 0;i < size;i ++){ - Object item = m_array[i]; - if(item.equals(o)){ - for(i = i + 1;i < size;i ++){ - array[i - 1] = m_array[i]; - } - - m_array = array; - return true; - } - array[i] = item; - } - - return false; - } - - @Override - public boolean containsAll(Collection c) - { - boolean ret = true; - for(Object e1 : c){ - ret = ret & contains(e1); - } - return ret; - } - - @Override - public synchronized boolean addAll(Collection c) - { - Object[] array = new Object[size() + c.size()]; - System.arraycopy(m_array,0,array,0,m_array.length); - - int i = m_array.length + 1; - for(Object e : c){ - array[i] = e; - i++; - } - return true; - } - - @Override - public synchronized boolean addAll(int index, Collection c) - { - Object[] array = new Object[size() + c.size()]; - System.arraycopy(m_array,0,array,0,index); - - int i = index + 1; - for(Object e : c){ - array[i] = e; - i ++; - } - - System.arraycopy(m_array,index + 1,array,i + 1,size() - index); - m_array = array; - return true; - } - - @Override - public boolean removeAll(Collection c) - { - Object[] array = new Object[size() - c.size()]; - - return false; - } - - @Override - public boolean retainAll(Collection c) - { - // TODO Auto-generated method stub - return false; - } - - @Override - public void clear() { - // TODO Auto-generated method stub - - } - - @Override - public E get(int index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public E set(int index, E element) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void add(int index, E element) { - // TODO Auto-generated method stub - - } - - @Override - public E remove(int index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public int indexOf(Object o) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public int lastIndexOf(Object o) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public ListIterator listIterator() - { - // TODO Auto-generated method stub - return null; - } - - @Override - public ListIterator listIterator(int index) - { - // TODO Auto-generated method stub - return null; - } - - @Override - public List subList(int fromIndex, int toIndex) - { - return null; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/OnMemoryForest.java --- a/src/treecms/memory/OnMemoryForest.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/memory/OnMemoryForest.java Mon Jul 18 20:22:53 2011 +0900 @@ -3,23 +3,20 @@ import java.nio.ByteBuffer; import java.util.Map; import java.util.Set; - import treecms.api.Forest; import treecms.api.MonotonicTree; import treecms.api.MonotonicTreeNode; -import treecms.api.NodeID; -import treecms.tree.id.IncrementalID; -import treecms.tree.id.RandomNodeID; +import treecms.tree.id.IncrementalIDProvider; +import treecms.tree.id.NodeIDProvider; public class OnMemoryForest implements Forest { public static void main(String _args[]) { - OnMemoryForest f = new OnMemoryForest(); + OnMemoryForest f = new OnMemoryForest(new IncrementalIDProvider("test",0)); MonotonicTree main = f.getMainTree(); MonotonicTreeNode root = main.getRoot(); MonotonicTreeNode ch1 = root.create(null); - MonotonicTreeNode ch2 = root.create(null); MonotonicTreeNode ch11 = ch1.create(null); ByteBuffer key1 = ByteBuffer.wrap("hoge".getBytes()); @@ -51,12 +48,9 @@ private final OnMemoryMonotonicTree m_tree; - public OnMemoryForest() + public OnMemoryForest(NodeIDProvider _provider) { - NodeID id = new IncrementalID("ROOT"); - OnMemoryNode newNode = new OnMemoryNode(id,null); - - m_tree = OnMemoryMonotonicTree.createInstance(newNode,null); + m_tree = OnMemoryMonotonicTree.createInstance(_provider,null); } @Override diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/OnMemoryMonotonicTree.java --- a/src/treecms/memory/OnMemoryMonotonicTree.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/memory/OnMemoryMonotonicTree.java Mon Jul 18 20:22:53 2011 +0900 @@ -2,32 +2,45 @@ import treecms.api.MonotonicTree; import treecms.api.MonotonicTreeNode; -import treecms.tree.util.LockableNodeTable; +import treecms.api.Node; +import treecms.tree.id.NodeIDProvider; public class OnMemoryMonotonicTree implements MonotonicTree { private final OnMemoryMonotonicTree m_tree; - private final LockableNodeTable m_table; - private final OnMemoryMonotonicTreeNode m_root; + private volatile OnMemoryMonotonicTreeNode m_root; - private OnMemoryMonotonicTree(OnMemoryNode _root,OnMemoryMonotonicTree _tree) + private OnMemoryMonotonicTree(NodeIDProvider _provider,OnMemoryMonotonicTree _tree) { m_tree = _tree; - m_table = new LockableNodeTable(); - m_table.register(_root); - m_root = new OnMemoryMonotonicTreeNode(_root,null,m_table); + m_root = new OnMemoryMonotonicTreeNode(new OnMemoryNode(_provider.create(),null),null); } - public static OnMemoryMonotonicTree createInstance(OnMemoryNode _root,OnMemoryMonotonicTree _tree) + public static OnMemoryMonotonicTree createInstance(NodeIDProvider _provider,OnMemoryMonotonicTree _tree) { - OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(_root,_tree); + OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(_provider,_tree); return tree; } public OnMemoryNode get(String _fid) { - OnMemoryNode node = (OnMemoryNode)m_table.tip(_fid); - return node; + return (OnMemoryNode)search(_fid,m_root.getNode()); + } + + private Node search(String _fid,Node _node) + { + if(_node.getID().getFamilyID().equals(_fid)){ + return _node; + } + + for(Node child : _node.getList()){ + Node ret = search(_fid,child); + if(ret != null){ + return ret; + } + } + + return null; } @Override diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/OnMemoryMonotonicTreeNode.java --- a/src/treecms/memory/OnMemoryMonotonicTreeNode.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/memory/OnMemoryMonotonicTreeNode.java Mon Jul 18 20:22:53 2011 +0900 @@ -11,65 +11,47 @@ import treecms.api.Node; import treecms.api.NodeAttributes; import treecms.api.NodeID; -import treecms.tree.util.LockableNodeTable; import treecms.tree.util.NodeData; public class OnMemoryMonotonicTreeNode implements MonotonicTreeNode { - private volatile OnMemoryMonotonicTreeNode m_parent; + private final OnMemoryMonotonicTreeNode m_parent; private OnMemoryNode m_node; - private final LockableNodeTable m_table; - public OnMemoryMonotonicTreeNode(OnMemoryNode _node,OnMemoryMonotonicTreeNode _parent,LockableNodeTable _table) + public OnMemoryMonotonicTreeNode(OnMemoryNode _node,OnMemoryMonotonicTreeNode _parent) { m_node = _node; - m_table = _table; m_parent = _parent; } @Override public NodeID getID() { - OnMemoryNode n = (OnMemoryNode)getNode(); - return n.getID(); + return m_node.getID(); } @Override public MonotonicTreeNode getParent() { - if(m_parent == null){ - return null; - } - - OnMemoryNode node = (OnMemoryNode)getNode(); - - //check , does parent contain the node. - if(!m_parent.contains(node.getID())){ - m_parent = null; - } - return m_parent; } @Override public ByteBuffer get(ByteBuffer _key) { - OnMemoryNode node = (OnMemoryNode)getNode(); - return node.get(_key); + return m_node.get(_key); } @Override public NodeAttributes getAll() { - OnMemoryNode node = (OnMemoryNode)getNode(); - return node.getAll(); + return m_node.getAll(); } @Override public void put(ByteBuffer _key, ByteBuffer _value) { - OnMemoryNode n = (OnMemoryNode)getNode(); - NodeData d = new NodeData(n,n); + NodeData d = new NodeData(m_node,m_node); d.put(_key,_value); cloneAndTransmit(d); @@ -78,8 +60,7 @@ @Override public void putAll(NodeAttributes _map) { - OnMemoryNode n = (OnMemoryNode)getNode(); - NodeData d = new NodeData(n,n); + NodeData d = new NodeData(m_node,m_node); d.putAll(_map); cloneAndTransmit(d); @@ -88,8 +69,7 @@ @Override public void remove(ByteBuffer _key) { - OnMemoryNode n = (OnMemoryNode)getNode(); - NodeData d = new NodeData(n,n); + NodeData d = new NodeData(m_node,m_node); d.remove(_key); cloneAndTransmit(d); @@ -98,8 +78,7 @@ @Override public void removeAll(Set _keys) { - OnMemoryNode n = (OnMemoryNode)getNode(); - NodeData d = new NodeData(n,n); + NodeData d = new NodeData(m_node,m_node); d.removeAll(_keys); cloneAndTransmit(d); @@ -108,8 +87,7 @@ @Override public void clearAttributes() { - OnMemoryNode n = (OnMemoryNode)getNode(); - NodeData d = new NodeData(n,n); + NodeData d = new NodeData(m_node,m_node); d.clearAttributes(); cloneAndTransmit(d); @@ -117,20 +95,12 @@ public void cloneAndTransmit(NodeData _d) { - String fid = m_node.getID().getFamilyID(); - - m_table.lock(fid); - - OnMemoryNode node = (OnMemoryNode)m_table.tip(fid); - NodeID newID = node.getID().update(); + NodeID newID = m_node.getID().update(); OnMemoryNode clone = new OnMemoryNode(newID,_d); - m_table.register(clone); - - m_table.unlock(fid); OnMemoryMonotonicTreeNode parent = (OnMemoryMonotonicTreeNode)getParent(); if(parent != null){ - parent.transmit(node,clone); + parent.transmit(m_node,clone); } m_node = clone; @@ -138,24 +108,17 @@ public boolean transmit(Node _orig,Node _edit) { - String fid = m_node.getID().getFamilyID(); - m_table.lock(fid); - OnMemoryNode node = (OnMemoryNode)getNode(); - - NodeData d = new NodeData(node,node); + NodeData d = new NodeData(m_node,m_node); d.replace(_edit); - NodeID newID = node.getID().update(); + NodeID newID = m_node.getID().update(); OnMemoryNode clone = new OnMemoryNode(newID,d); - m_table.register(clone); - m_table.unlock(fid); - m_node = clone; - OnMemoryMonotonicTreeNode parent = (OnMemoryMonotonicTreeNode)getParent(); if(parent != null){ - return m_parent.transmit(node,clone); + return m_parent.transmit(m_node,clone); } + return true; } @@ -174,7 +137,7 @@ ArrayList list = new ArrayList(size); for(Iterator it = node.getList().iterator();it.hasNext();){ OnMemoryNode n = (OnMemoryNode)it.next(); - OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(n,this,m_table); + OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(n,this); list.add(tn); } @@ -191,7 +154,7 @@ if(deleted != null){ cloneAndTransmit(d); - OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(deleted,null,m_table); + OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(deleted,null); return tn; } @@ -230,7 +193,7 @@ public MonotonicTreeNode get(int _index) { OnMemoryNode node = (OnMemoryNode)getNode(); - OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(node,this,m_table); + OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(node,this); return tn; } @@ -267,7 +230,7 @@ public MonotonicTreeNode get(String _fid) { OnMemoryNode node = (OnMemoryNode)m_node.get(_fid); - OnMemoryMonotonicTreeNode mono = new OnMemoryMonotonicTreeNode(node,this,m_table); + OnMemoryMonotonicTreeNode mono = new OnMemoryMonotonicTreeNode(node,this); return mono; } @@ -280,7 +243,7 @@ OnMemoryNode deleted = (OnMemoryNode)d.remove(_fid); cloneAndTransmit(d); - return new OnMemoryMonotonicTreeNode(deleted,null,m_table); + return new OnMemoryMonotonicTreeNode(deleted,null); } @Override @@ -288,14 +251,13 @@ { NodeID newID = getNode().getID().create(); OnMemoryNode newNode = new OnMemoryNode(newID,new NodeData(null,_attr)); - m_table.register(newNode); OnMemoryNode thisNode = (OnMemoryNode)getNode(); NodeData d = new NodeData(thisNode,thisNode); d.add(newNode); cloneAndTransmit(d); - OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(newNode,this,m_table); + OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(newNode,this); return tn; } diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/OnMemoryNode.java --- a/src/treecms/memory/OnMemoryNode.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/memory/OnMemoryNode.java Mon Jul 18 20:22:53 2011 +0900 @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import java.util.Set; + import treecms.api.Node; import treecms.api.NodeAttributes; import treecms.api.NodeID; @@ -83,19 +84,19 @@ } @Override - public Node create(NodeAttributes _attr) + public OnMemoryNode create(NodeAttributes _attr) { throw new UnsupportedOperationException(ERR_READONLY); } @Override - public Node remove(String _uuid) + public OnMemoryNode remove(String _uuid) { throw new UnsupportedOperationException(ERR_READONLY); } @Override - public Node remove(int _index) + public OnMemoryNode remove(int _index) { throw new UnsupportedOperationException(ERR_READONLY); } diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/test/OnMemoryForestTest.java --- a/src/treecms/memory/test/OnMemoryForestTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -package treecms.memory.test; - -import org.junit.runner.JUnitCore; -import treecms.api.Forest; -import treecms.memory.OnMemoryForest; -import treecms.test.AbstractForestTest; - -public class OnMemoryForestTest extends AbstractForestTest -{ - public static void main(String _args[]) - { - JUnitCore.main(OnMemoryForestTest.class.getName()); - } - - @Override - public Forest getInstance() - { - OnMemoryForest forest = new OnMemoryForest(); - return forest; - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/test/OnMemoryMonotonicTreeTest.java --- a/src/treecms/memory/test/OnMemoryMonotonicTreeTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -package treecms.memory.test; - -import org.junit.runner.JUnitCore; - -import treecms.api.Forest; -import treecms.memory.OnMemoryForest; -import treecms.test.AbstractMonotonicTreeTest; - -public class OnMemoryMonotonicTreeTest extends AbstractMonotonicTreeTest -{ - public static void main(String _args[]) - { - JUnitCore.main(OnMemoryMonotonicTreeTest.class.getName()); - } - @Override - public Forest getForest() - { - OnMemoryForest f = new OnMemoryForest(); - return f; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/memory/test/OnMemoryNodeTest.java --- a/src/treecms/memory/test/OnMemoryNodeTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -package treecms.memory.test; - -import org.junit.runner.JUnitCore; -import treecms.api.SingleNode; -import treecms.memory.OnMemoryForest; -import treecms.test.AbstractNodeTest; - -public class OnMemoryNodeTest extends AbstractNodeTest -{ - public static void main(String _args[]) - { - JUnitCore.main(OnMemoryForest.class.getName()); - } - - private OnMemoryForest m_forest; - - public OnMemoryNodeTest() - { - m_forest = new OnMemoryForest(); - } - - @Override - public SingleNode getInstance() - { - return m_forest.create(); - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/merger/Merger.java --- a/src/treecms/merger/Merger.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/merger/Merger.java Mon Jul 18 20:22:53 2011 +0900 @@ -1,8 +1,10 @@ package treecms.merger; -import treecms.api.Node; +import treecms.api.NodeAttributes; +import treecms.api.NodeChildren; +import treecms.api.NodeContext; -public interface Merger> +public interface Merger> { public T merge(T _tree1,T _tree2); } diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/merger/ReplaceMerger.java --- a/src/treecms/merger/ReplaceMerger.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/merger/ReplaceMerger.java Mon Jul 18 20:22:53 2011 +0900 @@ -1,8 +1,10 @@ package treecms.merger; -import treecms.api.Node; +import treecms.api.NodeAttributes; +import treecms.api.NodeChildren; +import treecms.api.NodeContext; -public class ReplaceMerger> implements Merger +public class ReplaceMerger> implements Merger { public T merge(T _tree1,T _tree2) { diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/AbstractForestTest.java --- a/src/treecms/test/AbstractForestTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -package treecms.test; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Map; -import junit.framework.Assert; -import org.junit.Test; -import treecms.api.Forest; -import treecms.api.MonotonicTree; -import treecms.api.MonotonicTreeNode; -import treecms.api.NodeID; -import treecms.tree.util.NodeData; - -public abstract class AbstractForestTest -{ - public abstract Forest getInstance(); - - @Test - public void testGetMainTree() - { - Forest f = getInstance(); - MonotonicTree t = f.getMainTree(); - - Assert.assertNotNull(t); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/AbstractMonotonicTreeTest.java --- a/src/treecms/test/AbstractMonotonicTreeTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -package treecms.test; - -import java.nio.ByteBuffer; - -import junit.framework.Assert; - -import org.junit.Test; -import treecms.api.Forest; -import treecms.api.MonotonicTree; -import treecms.api.SingleNode; -import treecms.api.MonotonicTreeNode; -import treecms.api.Tree; -import treecms.tree.util.NodeChildrenImpl; -import treecms.tree.util.NodeFinder; - -public abstract class AbstractMonotonicTreeTest -{ - public abstract Forest getForest(); - - @Test - public void testInitialize() - { - Forest f = getForest(); - Tree t = f.getMainTree(); - MonotonicTree mt = f.getMonotonicTree(t); - MonotonicTreeNode n = mt.getRoot(); - - Assert.assertEquals(true,t.getRoot().getID().equals(n.getID())); - } - - @Test - public void testEdit() - { - Forest forest = getForest(); - SingleNode root = forest.create(); - - SingleNode n1 = forest.create(); - SingleNode n11 = forest.create(); - SingleNode n12 = forest.create(); - n1.addAll(new NodeChildrenImpl(n11,n12)); - - SingleNode n2 = forest.create(); - SingleNode n21 = forest.create(); - SingleNode n22 = forest.create(); - n2.addAll(new NodeChildrenImpl(n21,n22)); - - SingleNode n221 = forest.create(); - n22.add(n221); - - root.addAll(new NodeChildrenImpl(n1,n2)); - - MonotonicTree tree = forest.getMonotonicTree(forest.getTree(root)); - NodeFinder finder = new NodeFinder(tree.getRoot()); - MonotonicTreeNode node = finder.findByNodeID(n221.getID()); - node.put(ByteBuffer.wrap("test".getBytes()),ByteBuffer.wrap("value".getBytes())); - - - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/AbstractNodeTest.java --- a/src/treecms/test/AbstractNodeTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -package treecms.test; - -import java.nio.ByteBuffer; -import java.util.List; -import junit.framework.Assert; -import org.junit.Test; -import treecms.api.NodeChildren; -import treecms.api.NodeID; -import treecms.tree.util.NodeChildrenImpl; - -public abstract class AbstractNodeTest -{ - public abstract Node getInstance(); - - @Test - public void testGetID() - { - Node n = getInstance(); - Assert.assertNotNull(getInstance().getID()); - } - - @Test - public void testGetData() - { - Assert.assertNotNull(getInstance().getList()); - Assert.assertNotNull(getInstance().getAll()); - } - - @Test - public void testGetForest() - { - Assert.assertNotNull(getInstance().getForest()); - } - - @Test - public void testAddChildren() - { - SingleNode node = getInstance(); - - SingleNode ch1 = node.getForest().create(); - SingleNode ch2 = node.getForest().create(); - SingleNode ch3 = node.getForest().create(); - - NodeChildren list = new NodeChildrenImpl(ch1,ch2,ch3); - node.addAll(list); - - List children = node.getList(); - int size = list.getList().size(); - for(int i = 0;i < size;i ++){ - NodeID id1 = children.get(i).getID(); - NodeID id2 = list.get(i).getID(); - - Assert.assertEquals(true,id1.equals(id2)); - } - } - - @Test - public void testSetAndGetAttribute() - { - SingleNode node = getInstance(); - byte[] name = "test".getBytes(); - byte[] value = "test".getBytes(); - - node.put(ByteBuffer.wrap(name),ByteBuffer.wrap(value)); - Assert.assertEquals(true,node.get(ByteBuffer.wrap(name)).equals(ByteBuffer.wrap(value))); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/ByteArrayTest.java --- a/src/treecms/test/ByteArrayTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -package treecms.test; - -public class ByteArrayTest -{ - public static void main(String _args[]) - { - byte key1[] = new byte[]{12,23,23,43}; - byte key2[] = new byte[]{12,23,23,43}; - - System.out.println(key1.equals(key2)); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/CopyOnWriteTreeMapTest1.java --- a/src/treecms/test/CopyOnWriteTreeMapTest1.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -package treecms.test; - -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import treecms.tree.util.CopyOnWriteTreeMap; - -public class CopyOnWriteTreeMapTest1 -{ - public static void main(String _args[]) - { - ExecutorService service = Executors.newFixedThreadPool(5); - - - } - - private static class ReaderTask implements Runnable - { - private final CopyOnWriteTreeMap m_map; - - public ReaderTask(CopyOnWriteTreeMap _map,List _keys) - { - m_map = _map; - } - - @Override - public void run() - { - } - } - - private static class WriterTask implements Runnable - { - private final CopyOnWriteTreeMap m_map; - - public WriterTask(CopyOnWriteTreeMap _map) - { - m_map = _map; - } - - @Override - public void run() - { - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/GenericsTest.java --- a/src/treecms/test/GenericsTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -package treecms.test; - -import java.util.List; - -public class GenericsTest -{ - public static void main(String _args[]) - { - new GenericsTest(); - } - - public GenericsTest() - { - } - - public GenericsTest(E _instance) - { - } -} - -class FooBar implements Bar -{ - - @Override - public Foo get() { - // TODO Auto-generated method stub - return null; - } - - @Override - public List list(Foo _f) { - // TODO Auto-generated method stub - return null; - } - -} - -interface Foo -{ - public Foo get(); - public List list(Foo _f); -} - -interface Hoge extends Foo -{ - @Override - public Hoge get(); - - public List list(Hoge _h); -} - -interface Bar extends Foo -{ -} - -interface Foo2 -{ -} - -class FooBar2 implements Foo2 -{ -} - - - - diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/GenericsTest2.java --- a/src/treecms/test/GenericsTest2.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -package treecms.test; - -public class GenericsTest2 -{ - -} - -interface Attributes -{ - void a(); -} - -interface Children> -{ - void b(); -} - -interface Context -{ - void c(); -} - -interface Node> extends Attributes , Children , Context -{ -} - -interface SingleNode extends Node -{ - -} - -class ChildrenImpl implements Children -{ - - @Override - public void b() { - // TODO Auto-generated method stub - - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/JSONParserTest1.java --- a/src/treecms/test/JSONParserTest1.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -package treecms.test; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.json.simple.JSONArray; -import org.json.simple.parser.ContainerFactory; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -public class JSONParserTest1 -{ - public static void main(String _args[]) throws ParseException - { - //test1 - String s = "[]"; - JSONParser p = new JSONParser(); - JSONArray array = (JSONArray)p.parse(s); - System.out.println(array.size()); - - //test2 - String json = ""; - ContainerFactory factory = new ContainerFactory(){ - - @Override - public List creatArrayContainer() { - return new LinkedList(); - } - - @Override - public Map createObjectContainer() { - return new HashMap(); - } - - }; - - JSONParser p2 = new JSONParser(); - LinkedList list = (LinkedList)p2.parse(json,factory); - for(Object item : list){ - System.out.println(item.toString()); - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/NodeIDTest.java --- a/src/treecms/test/NodeIDTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -package treecms.test; - -import junit.framework.Assert; - -import org.junit.Before; -import org.junit.Test; - -import treecms.api.NodeID; - -public class NodeIDTest -{ - NodeID m_newID; - - public NodeIDTest(NodeID _id) - { - m_newID = _id; - } - - @Before - public void testCreateID() - { - NodeID newID = m_newID.create(); - Assert.assertNull(newID); - } - - @Test - public void testCompareID() - { - NodeID newID = m_newID.create(); - Assert.assertEquals(true,m_newID.equals(m_newID)); - Assert.assertEquals(false,m_newID.equals(newID)); - } - - @Test - public void testUpdateID() - { - NodeID newID = m_newID.update(); - Assert.assertEquals(true,m_newID.isFamily(newID)); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/OrderedSetTest.java --- a/src/treecms/test/OrderedSetTest.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -package treecms.test; - -import java.util.LinkedHashSet; - -public class OrderedSetTest -{ - public static void main(String _args[]) - { - LinkedHashSet set = new LinkedHashSet(); - set.add(1); - set.add(2); - set.add(3); - - for(Integer i : set){ - System.out.println(i); - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/ReentrantLockTest1.java --- a/src/treecms/test/ReentrantLockTest1.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package treecms.test; - -import java.io.IOException; -import java.util.concurrent.locks.ReentrantLock; - -public class ReentrantLockTest1 -{ - public static void main(String _args[]) throws Exception - { - final ReentrantLock lock = new ReentrantLock(); - - Runnable r = new Runnable(){ - @Override - public void run() - { - String name = Thread.currentThread().getName(); - synchronized(lock){ - System.out.println(name + ": acquire lock"); - try { - System.in.read(); - System.out.println(name + ": is dead"); - return; - } catch (IOException _e) { - _e.printStackTrace(); - } - } - } - }; - - Thread th1 = new Thread(r); - Thread th2 = new Thread(r); - - th1.start(); - th2.start(); - - th1.join(); - th2.join(); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/SwingTest1.java --- a/src/treecms/test/SwingTest1.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -package treecms.test; - -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.*; - -public class SwingTest1 -{ - public static void main(String _args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException - { - UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); - JFrame f = new JFrame(""); - JButton btn = new JButton("btn!"); - Container cnt = f.getContentPane(); - cnt.setLayout(new BorderLayout()); - cnt.add(btn,BorderLayout.CENTER); - - - final JPopupMenu menu = new JPopupMenu(); - JMenuItem item = new JMenuItem("test1"); - menu.add(item); - - btn.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e) - { - menu.setVisible(true); - } - }); - - f.setVisible(true); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/test/SynchronizedTest1.java --- a/src/treecms/test/SynchronizedTest1.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -package treecms.test; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -public class SynchronizedTest1 -{ - public static void main(String _args[]) throws InterruptedException, IOException - { - Object lock = new Object(); - - new MyThread(lock).start(); - new MyThread(lock).start(); - new MyThread(lock).start(); - new MyThread(lock).start(); - new MyThread(lock).start(); - new MyThread(lock).start(); - - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - br.readLine(); - - synchronized(lock){ - lock.notifyAll(); - } - - Thread.sleep(100); - } - - private static class MyThread extends Thread - { - private final Object m_lock; - - public MyThread(Object _lock) - { - m_lock = _lock; - } - - public void run() - { - synchronized(m_lock){ - try{ - m_lock.wait(); - System.out.println("done wating.."); - }catch(InterruptedException _e){ - _e.printStackTrace(); - } - } - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/tree/util/CopyOnWriteLinkedList.java --- a/src/treecms/tree/util/CopyOnWriteLinkedList.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -package treecms.tree.util; - -public class CopyOnWriteLinkedList -{ - public CopyOnWriteLinkedList() - { - - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/tree/util/CopyOnWriteTreeMap.java --- a/src/treecms/tree/util/CopyOnWriteTreeMap.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,250 +0,0 @@ -package treecms.tree.util; - -import java.io.IOException; -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.Map; -import java.util.Random; -import java.util.TreeMap; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.ReentrantLock; - -public class CopyOnWriteTreeMap,V> -{ - private volatile TreeNode m_read; - private volatile TreeNode m_write; - - private final Object m_writeLock; - public static void main(String _args[]) throws InterruptedException, IOException - { - System.in.read(); - - final CopyOnWriteTreeMap map = new CopyOnWriteTreeMap(); - //final Map map = Collections.synchronizedMap(new TreeMap()); - final LinkedList keys = new LinkedList(); - - Random r = new Random(); - for(int i = 0;i < 10000;i ++){ - String str = Long.toHexString(r.nextLong()); - keys.add(str); - } - - ExecutorService service = Executors.newFixedThreadPool(5); - - Callable writer = new Callable(){ - @Override - public Object call() throws Exception - { - long mill = System.currentTimeMillis(); - for(String str : keys){ - map.put(str,str); - } - System.out.println("Writer :"+ (System.currentTimeMillis() - mill)); - return null; - } - }; - - Callable reader = new Callable(){ - @Override - public Object call() throws Exception - { - long mill = System.currentTimeMillis(); - for(String str : keys){ - map.get(str); - } - System.out.println("Reader :"+ (System.currentTimeMillis() - mill)); - - return null; - } - }; - - service.submit(reader); - service.submit(writer); - service.submit(writer); - service.submit(writer); - service.submit(writer); - service.submit(writer); - - service.shutdown(); - service.awaitTermination(Long.MAX_VALUE,TimeUnit.DAYS); - - System.in.read(); - } - - public CopyOnWriteTreeMap() - { - m_read = m_write = null; - m_writeLock = new Object(); - } - - public V get(K _key) - { - if(m_read == null){ - return null; - } - - TreeNode tn = m_read; - - while(tn != null){ - K key = tn.key(); - int result = key.compareTo(_key); - if(result == 0){ - //find - return tn.value(); - }else if(result > 0){ - //go right - TreeNode r = tn.getRight(); - tn = r; - }else{ - //go left - TreeNode l = tn.getLeft(); - tn = l; - } - } - - return null; - } - - public void put(K _key,V _value) throws InterruptedException - { - TreeNode cur; - synchronized(m_writeLock){ - if(m_write == null){ - m_write = new TreeNode(_key,_value); - m_write.unlock(); - m_read = m_write; - return; - } - - m_write = m_write.copy(); - cur = m_write; - } - - while(true){ - K key = cur.key(); - int result = key.compareTo(_key); - - if(result > 0){ - TreeNode r = cur.getRight(); - if(r == null){ - r = new TreeNode(_key,_value); - cur.setRight(r); - r.unlock(); - cur.unlock(); - break; - } - TreeNode cp = r.copy(); - cur.setRight(cp); - cur.unlock(); - cur = cp; - - }else if(result < 0){ - TreeNode l = cur.getLeft(); - if(l == null){ - l = new TreeNode(_key,_value); - cur.setLeft(l); - l.unlock(); - cur.unlock(); - break; - } - TreeNode cp = l.copy(); - cur.setLeft(cp); - cur.unlock(); - cur = cp; - }else{ - cur.setValue(_value); - cur.unlock(); - m_read = m_write; - return; - } - } - - m_read = m_write; - } - - private static class TreeNode - { - TreeNode m_left; - TreeNode m_right; - - private K m_key; - private V m_value; - private volatile boolean m_flag; - private final CountDownLatch m_latch; - - public TreeNode(K _key,V _value) - { - this(_key,_value,null,null); - } - - private TreeNode(K _key,V _value,TreeNode _left,TreeNode _right) - { - m_key = _key; - m_value = _value; - m_left = _left; - m_right = _right; - m_latch = new CountDownLatch(1); - m_flag = true; - } - - public K key() - { - return m_key; - } - - public V value() - { - return m_value; - } - - public void setValue(V _value) - { - m_value = _value; - } - - public void setKey(K _key) - { - m_key = _key; - } - - public void setLeft(TreeNode _left) - { - m_left = _left; - } - - public void setRight(TreeNode _right) - { - m_right = _right; - } - - public TreeNode getLeft() - { - return m_left; - } - - public TreeNode getRight() - { - return m_right; - } - - public void unlock() throws InterruptedException - { - m_flag = false; - m_latch.countDown(); - } - - public TreeNode copy() throws InterruptedException - { - if(m_flag){ - m_latch.await(); - } - return new TreeNode(m_key,m_value,m_left,m_right); - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/tree/util/CopyOnWriteTreeMap2.java --- a/src/treecms/tree/util/CopyOnWriteTreeMap2.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -package treecms.tree.util; - -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.Map; -import java.util.Random; -import java.util.TreeMap; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.ReentrantLock; - -public class CopyOnWriteTreeMap2,V> -{ - private volatile TreeNode m_read; - private final AtomicReference> m_write; - - public static void main(String _args[]) throws InterruptedException - { - final CopyOnWriteTreeMap map = new CopyOnWriteTreeMap(); - //final Map map = Collections.synchronizedMap(new TreeMap()); - //final CopyOnWriteTreeMap2 map = new CopyOnWriteTreeMap2(); - final LinkedList keys = new LinkedList(); - - Random r = new Random(); - for(int i = 0;i < 5000;i ++){ - String str = Long.toHexString(r.nextLong()); - // map.put(str,str); - keys.add(str); - } - - ExecutorService service = Executors.newFixedThreadPool(5); - - Callable task = new Callable(){ - @Override - public Object call() throws Exception - { - long mill = System.currentTimeMillis(); - for(String str : keys){ - map.put(str,str); - } - System.out.println(System.currentTimeMillis() - mill); - - return null; - } - }; - - service.submit(task); - service.submit(task); - service.submit(task); - service.submit(task); - service.submit(task); - - service.shutdown(); - service.awaitTermination(Long.MAX_VALUE,TimeUnit.DAYS); - - for(String key : keys){ - String val = map.get(key); - if(!val.equals(key)){ - System.out.println("val("+key+") is ok"); - } - } - } - - public CopyOnWriteTreeMap2() - { - m_read = null; - m_write = new AtomicReference>(); - } - - public V get(K _key) - { - if(m_read == null){ - return null; - } - - TreeNode tn = m_read; - - while(tn != null){ - K key = tn.key(); - int result = key.compareTo(_key); - if(result == 0){ - //find - return tn.value(); - }else if(result > 0){ - //go right - TreeNode r = tn.getRight(); - tn = r; - }else{ - //go left - TreeNode l = tn.getLeft(); - tn = l; - } - } - - return null; - } - - public void put(K _key,V _value) throws InterruptedException - { - TreeNode root; - TreeNode cur; - while(true){ - root = m_write.get(); - if(root == null){ - root = new TreeNode(_key,_value); - root.unlock(); - if(m_write.compareAndSet(null,root)){ - m_read = root; - return; - } - continue; - } - - cur = root.copy(); - if(m_write.compareAndSet(root,cur)){ - break; - } - } - - while(true){ - K key = cur.key(); - int result = key.compareTo(_key); - - if(result > 0){ - TreeNode r = cur.getRight(); - if(r == null){ - r = new TreeNode(_key,_value); - cur.setRight(r); - r.unlock(); - cur.unlock(); - break; - } - TreeNode cp = r.copy(); - cur.setRight(cp); - cur.unlock(); - cur = cp; - - }else if(result < 0){ - TreeNode l = cur.getLeft(); - if(l == null){ - l = new TreeNode(_key,_value); - cur.setLeft(l); - l.unlock(); - cur.unlock(); - break; - } - TreeNode cp = l.copy(); - cur.setLeft(cp); - cur.unlock(); - cur = cp; - }else{ - cur.setValue(_value); - cur.unlock(); - m_read = root; - return; - } - } - - m_read = root; - } - - private static class TreeNode - { - TreeNode m_left; - TreeNode m_right; - - private K m_key; - private V m_value; - private volatile boolean m_flag; - private final CountDownLatch m_latch; - - public TreeNode(K _key,V _value) - { - this(_key,_value,null,null); - } - - private TreeNode(K _key,V _value,TreeNode _left,TreeNode _right) - { - m_key = _key; - m_value = _value; - m_left = _left; - m_right = _right; - m_latch = new CountDownLatch(1); - m_flag = true; - } - - public K key() - { - return m_key; - } - - public V value() - { - return m_value; - } - - public void setValue(V _value) - { - m_value = _value; - } - - public void setKey(K _key) - { - m_key = _key; - } - - public void setLeft(TreeNode _left) - { - m_left = _left; - } - - public void setRight(TreeNode _right) - { - m_right = _right; - } - - public TreeNode getLeft() - { - return m_left; - } - - public TreeNode getRight() - { - return m_right; - } - - public void unlock() throws InterruptedException - { - m_flag = false; - m_latch.countDown(); - } - - public TreeNode copy() throws InterruptedException - { - if(m_flag){ - m_latch.await(); - } - return new TreeNode(m_key,m_value,m_left,m_right); - } - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/tree/util/LockableNodeTable.java --- a/src/treecms/tree/util/LockableNodeTable.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -package treecms.tree.util; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import treecms.api.Node; -import treecms.api.NodeID; -import treecms.api.NodeTable; - -public class LockableNodeTable implements NodeTable -{ - private final ConcurrentMap m_nodes; - private final ConcurrentMap> m_tips; - - public LockableNodeTable() - { - m_nodes = new ConcurrentHashMap(); - m_tips = new ConcurrentHashMap>(); - } - - @Override - public void register(Node _newNode) - { - NodeID id = _newNode.getID(); - m_nodes.put(id,_newNode); - - LockableReference ref = m_tips.putIfAbsent(id.getFamilyID(),new LockableReference(_newNode)); - if(ref != null){ - ref.lock(); - ref.put(_newNode); - ref.unlock(); - } - } - - @Override - public Node get(NodeID _id) - { - return m_nodes.get(_id); - } - - @Override - public Node tip(String _fid) - { - LockableReference ref = m_tips.get(_fid); - if(ref == null){ - return null; - } - return ref.get(); - } - - public boolean unlock(String _fid) - { - LockableReference ref = m_tips.get(_fid); - - if(ref == null){ - return false; - } - - ref.unlock(); - return true; - } - - public boolean lock(String _fid) - { - LockableReference ref = m_tips.get(_fid); - if(ref == null){ - return false; - } - - ref.lock(); - return true; - } - -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/tree/util/LockableReference.java --- a/src/treecms/tree/util/LockableReference.java Tue Jul 12 14:39:35 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -package treecms.tree.util; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.ReentrantLock; - -public class LockableReference -{ - public static void main(String _args[]) throws InterruptedException - { - //test code for LockableReference - - Integer i = new Integer(10); - final LockableReference ref = new LockableReference(i); - - Runnable r = new Runnable(){ - @Override - public void run() - { - String name = Thread.currentThread().getName(); - System.out.println(name + ": acquire lock"); - ref.lock(); - System.out.println(name + ": locked"); - System.out.println(name + ": ref is " + ref.get()); - ref.put(2); - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - try { - br.readLine(); - }catch(IOException _e){ - _e.printStackTrace(); - } - ref.unlock(); - } - }; - - Thread th1 = new Thread(r); - Thread th2 = new Thread(r); - - th1.start(); - th2.start(); - - th1.join(); - th2.join(); - } - - private final AtomicReference m_ref; - private final ReentrantLock m_lock; - - public LockableReference(V _ref) - { - m_ref = new AtomicReference(_ref); - m_lock = new ReentrantLock(true); - } - - public V get() - { - V ret; - m_lock.lock(); - ret = m_ref.get(); - m_lock.unlock(); - return ret; - } - - public boolean isLocked() - { - return m_lock.isLocked(); - } - - public void put(V _ref) - { - m_lock.lock(); - m_ref.set(_ref); - m_lock.unlock(); - } - - public void lock() - { - m_lock.lock(); - } - - public void unlock() - { - m_lock.unlock(); - } -} diff -r c1e7ec6b3d44 -r 9cb971a68cc5 src/treecms/tree/util/NodeChildrenImpl.java --- a/src/treecms/tree/util/NodeChildrenImpl.java Tue Jul 12 14:39:35 2011 +0900 +++ b/src/treecms/tree/util/NodeChildrenImpl.java Mon Jul 18 20:22:53 2011 +0900 @@ -1,9 +1,7 @@ package treecms.tree.util; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap;