# HG changeset patch # User suika6039 # Date 1293451723 -32400 # Node ID 9663c816e3701f56f5b886b381159319502d24bf # Parent 9d248304be96bbde0895bc0fa62f0775f3e8d67a commit. diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/api/Node.java --- a/src/treecms/proto/api/Node.java Tue Dec 07 18:42:51 2010 +0900 +++ b/src/treecms/proto/api/Node.java Mon Dec 27 21:08:43 2010 +0900 @@ -9,8 +9,10 @@ public Iterator iterator(); public void addChildren(List _child); public List getChildren(); - public boolean isChild(Node _child); + public Node addChild(Node _child); + public boolean removeChild(Node _child); + public void clearChildren(); public String getTitle(); public void setTitle(String _title); @@ -18,9 +20,8 @@ public String getClassName(); public void setClassName(String _class); - public Node addChild(Node _child); - public boolean removeChild(Node _child); - public void clearChildren(); + public String getAttribute(String _attr); + public void setAttribute(String _attr,String _value); public void up(Node _child); public void down(Node _child); @@ -28,4 +29,5 @@ public NodeID getID(); public Node cloneNode(); + public Node createNode(); } \ No newline at end of file diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/api/NodeID.java --- a/src/treecms/proto/api/NodeID.java Tue Dec 07 18:42:51 2010 +0900 +++ b/src/treecms/proto/api/NodeID.java Mon Dec 27 21:08:43 2010 +0900 @@ -3,6 +3,12 @@ public interface NodeID { public NodeID update(); + public NodeID getTip(); + public String getUUID(); + public String getVersion(); public String toString(); - public int compare(NodeID _target); + + public boolean isFamily(NodeID _id); + public boolean isOrderThen(NodeID _id); + public boolean equals(NodeID _id); } diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/cassandra/CassandraNode.java --- a/src/treecms/proto/cassandra/CassandraNode.java Tue Dec 07 18:42:51 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -package treecms.proto.cassandra; - - -import org.apache.thrift.transport.*; -import org.apache.thrift.protocol.*; -import org.apache.cassandra.thrift.Cassandra; - -import java.util.Iterator; -import java.util.List; - -import treecms.proto.api.Node; -import treecms.proto.api.NodeID; - -public class CassandraNode implements Node -{ - public static void main(String _args[]) throws Exception - { - TTransport tr = new TFramedTransport(new TSocket("localhost",9160)); - TProtocol proto = new TBinaryProtocol(tr); - Cassandra.Client client = new Cassandra.Client(proto); - tr.open(); - - System.out.println(client.describe_cluster_name()); - } - - @Override - public Node addChild(Node child) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void addChildren(List child) { - // TODO Auto-generated method stub - - } - - @Override - public void clearChildren() { - // TODO Auto-generated method stub - - } - - @Override - public Node cloneNode() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void down(Node child) { - // TODO Auto-generated method stub - - } - - @Override - public List getChildren() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getClassName() { - // TODO Auto-generated method stub - return null; - } - - @Override - public NodeID getID() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getTitle() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean isChild(Node child) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Iterator iterator() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean removeChild(Node child) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void replace(Node target, Node newChild) { - // TODO Auto-generated method stub - - } - - @Override - public void setClassName(String class1) { - // TODO Auto-generated method stub - - } - - @Override - public void setTitle(String title) { - // TODO Auto-generated method stub - - } - - @Override - public void up(Node child) { - // TODO Auto-generated method stub - - } - -} diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/gui/GraphicalMonotonicTreeEditor.java --- a/src/treecms/proto/gui/GraphicalMonotonicTreeEditor.java Tue Dec 07 18:42:51 2010 +0900 +++ b/src/treecms/proto/gui/GraphicalMonotonicTreeEditor.java Mon Dec 27 21:08:43 2010 +0900 @@ -24,9 +24,9 @@ import treecms.proto.api.Editor; import treecms.proto.api.Node; -import treecms.proto.simple.RandomSimpleTreeBuilder; import treecms.proto.simple.SimpleEditor; import treecms.proto.simple.SimpleNode; +import treecms.proto.util.RandomSimpleTreeBuilder; public class GraphicalMonotonicTreeEditor extends JFrame { diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/id/IncrementalNodeID.java --- a/src/treecms/proto/id/IncrementalNodeID.java Tue Dec 07 18:42:51 2010 +0900 +++ b/src/treecms/proto/id/IncrementalNodeID.java Mon Dec 27 21:08:43 2010 +0900 @@ -7,49 +7,38 @@ public class IncrementalNodeID implements NodeID { private String m_inheritedID; - private final long m_version; + private long m_version; private AtomicLong m_tip; public IncrementalNodeID() { - m_inheritedID = UUID.randomUUID().toString(); + this(UUID.randomUUID().toString()); m_tip = new AtomicLong(); - m_version = m_tip.getAndIncrement(); + m_version = 0; } - private IncrementalNodeID(String _inheritedID,AtomicLong _version) + private IncrementalNodeID(String _id) { - m_inheritedID = _inheritedID; - m_version = _version.getAndIncrement(); - m_tip = _version; - } - - public NodeID update() - { - return new IncrementalNodeID(m_inheritedID,m_tip); + m_inheritedID = _id; } @Override - public int compare(NodeID _target) + public NodeID update() { - // TODO Auto-generated method stub - if(!(_target instanceof IncrementalNodeID)){ - throw new IllegalArgumentException("_target is not instance of NodeIDImpl"); - } - - IncrementalNodeID target = (IncrementalNodeID)_target; - if(m_inheritedID.equals(target.m_inheritedID)){ - long diff = m_version - target.m_version; - if(diff == 0){ - return 0; // same id - }else if(diff < 0){ - return -1; // target is newer then this. - }else{ - return 1; // target is older then this. - } - } - return -2; //wrong inherited id + IncrementalNodeID id = new IncrementalNodeID(m_inheritedID); + id.m_tip = m_tip; + id.m_version = m_tip.incrementAndGet(); + return id; + } + + @Override + public NodeID getTip() + { + IncrementalNodeID id = new IncrementalNodeID(m_inheritedID); + id.m_tip = m_tip; + id.m_version = m_tip.get(); + return id; } @Override @@ -57,4 +46,46 @@ { return m_inheritedID + "@" + m_version; } + + @Override + public boolean equals(NodeID _id) + { + IncrementalNodeID id = (IncrementalNodeID)_id; + if(isFamily(id) && m_version == id.m_version){ + return true; + } + return false; + } + + @Override + public boolean isFamily(NodeID _id) + { + IncrementalNodeID id = (IncrementalNodeID)_id; + if(m_inheritedID.equals(id.m_inheritedID)){ + return true; + } + return false; + } + + @Override + public boolean isOrderThen(NodeID _id) + { + IncrementalNodeID id = (IncrementalNodeID)_id; + if(isFamily(id) && m_version > id.m_version){ + return true; + } + return false; + } + + @Override + public String getUUID() + { + return m_inheritedID; + } + + @Override + public String getVersion() + { + return Long.toString(m_version); + } } diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/simple/RandomSimpleTreeBuilder.java --- a/src/treecms/proto/simple/RandomSimpleTreeBuilder.java Tue Dec 07 18:42:51 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -package treecms.proto.simple; - -import java.util.Random; - -import treecms.proto.api.Node; - -public class RandomSimpleTreeBuilder -{ - public static void main(String _args[]) - { - SimpleNode root = RandomSimpleTreeBuilder.randomTree(2,2,3,3); - print(0,root); - } - - public static void print(int _indent,Node _parent) - { - for(int i = 0;i < _indent;i ++){ - System.out.print("\t"); - } - System.out.println(_parent.getTitle()); - - for(Node child : _parent.getChildren()){ - print(_indent + 1,child); - } - } - - public static SimpleNode randomTree(int _maxRow,int _maxCol) - { - return randomTree(0,0,_maxRow,_maxCol); - } - - public static SimpleNode randomTree(int _minRow,int _minCol,int _maxRow,int _maxCol) - { - RandomSimpleTreeBuilder builder = new RandomSimpleTreeBuilder(_minRow,_minCol,_maxRow,_maxCol); - return builder.generate(); - } - - private int m_minCol; - private int m_maxRow,m_maxCol; - - private RandomSimpleTreeBuilder(int _minRow,int _minCol,int _maxRow,int _maxCol) - { - m_minCol = _minCol; - m_maxRow = _maxRow; - m_maxCol = _maxCol; - } - - public SimpleNode generate() - { - SimpleNode root = new SimpleNode(); - root.setTitle("root"); - - Random rand = new Random(); - int childs = m_minCol + rand.nextInt(m_maxCol)*(1 - m_minCol/(1 + m_maxCol)); - for(int i = 1;i < childs;i ++){ - SimpleNode child = (SimpleNode)root.addChild(new SimpleNode()); - child.setTitle("c"+i); - generate(child,1,rand); - } - return root; - } - - private void generate(SimpleNode _parent,int _row,Random _rand) - { - if(_row >= m_maxRow || _rand.nextInt(m_maxRow) == 0){ - return; - } - - int childs = m_minCol + _rand.nextInt(m_maxCol)*(1 - m_minCol/(1 + m_maxCol)); - for(int i = 1;i < childs;i ++){ - SimpleNode child = (SimpleNode)_parent.addChild(new SimpleNode()); - child.setTitle(_parent.getTitle()+i); - generate(child,_row + 1,_rand); - } - } - -} diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/simple/SimpleBrowser.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/simple/SimpleBrowser.java Mon Dec 27 21:08:43 2010 +0900 @@ -0,0 +1,56 @@ +package treecms.proto.simple; + +import java.util.Hashtable; + +import treecms.proto.api.*; +import treecms.proto.id.IncrementalNodeID; + +public class SimpleBrowser implements Browser +{ + private static final SimpleBrowser m_instance = new SimpleBrowser(); + private Hashtable m_table; + + private SimpleNode m_root; + + private SimpleBrowser() + { + m_table = new Hashtable(); + m_root = createNode(); + + m_table.put(m_root.getID(),m_root); + } + + public static SimpleBrowser getSingleton() + { + return m_instance; + } + + public void put(NodeID _id,Node _node) + { + m_table.put(_id,_node); + } + + public Node get(NodeID _id) + { + return m_table.get(_id); + } + + public SimpleNode createNode() + { + SimpleNode node = new SimpleNode(new IncrementalNodeID()); + return node; + } + + public SimpleLink createLink(Node _target) + { + SimpleLink link = new SimpleLink(_target); + return link; + } + + @Override + public Node useContents() + { + NodeID tip = m_root.getID().getTip(); + return m_table.get(tip); + } +} diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/simple/SimpleLink.java --- a/src/treecms/proto/simple/SimpleLink.java Tue Dec 07 18:42:51 2010 +0900 +++ b/src/treecms/proto/simple/SimpleLink.java Mon Dec 27 21:08:43 2010 +0900 @@ -14,13 +14,12 @@ { private NodeID m_id; private Node m_target; - private LinkedList m_children; public SimpleLink(Node _target) { m_id = new IncrementalNodeID(); m_target = _target; - m_children = new LinkedList(); + SimpleNodeTable.getInstance().put(m_id.toString(),this); } @Override @@ -50,7 +49,7 @@ @Override public List getChildren() { - return Collections.unmodifiableList(m_children); + return null; } @Override @@ -74,13 +73,13 @@ @Override public boolean isChild(Node child) { - return false; + return m_node.isChild(_child); } @Override public Iterator iterator() { - return Collections.unmodifiableList(m_children).iterator(); + return Collections.EMPTY_LIST; } @Override @@ -130,4 +129,10 @@ { return; } + + @Override + public Node createNode() + { + return new SimpleNode(); + } } diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/simple/SimpleNode.java --- a/src/treecms/proto/simple/SimpleNode.java Tue Dec 07 18:42:51 2010 +0900 +++ b/src/treecms/proto/simple/SimpleNode.java Mon Dec 27 21:08:43 2010 +0900 @@ -3,31 +3,31 @@ import java.util.Iterator; import java.util.Collections; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.LinkedList; import treecms.proto.api.Node; import treecms.proto.api.NodeID; import treecms.proto.id.IncrementalNodeID; +import java.util.Hashtable; -public class SimpleNode implements Node +class SimpleNode implements Node { - private CopyOnWriteArrayList m_children; + private LinkedList m_children; private NodeID m_id; private String m_title,m_class; + private Hashtable m_attrs; - public SimpleNode() + SimpleNode(NodeID _id) { - this(new IncrementalNodeID()); - } - - private SimpleNode(NodeID _id) - { - m_children = new CopyOnWriteArrayList(); + m_children = new LinkedList(); m_id = _id; m_title = ""; m_class = ""; + + m_attrs = new Hashtable(); + + SimpleNodeTable.getInstance().put(m_id.toString(),this); } @Override @@ -46,8 +46,9 @@ @Override public Node addChild(Node _child) { - if(m_children.addIfAbsent(_child)){ - return _child; + if(m_children.contains(_child)){ + m_children.add(_child); + return null; } return null; } @@ -74,7 +75,9 @@ @Override public void addChildren(List _children) { - this.m_children.addAllAbsent(_children); + if(m_children.containsAll(_children)){ + m_children.addAll(_children); + } } @@ -115,59 +118,31 @@ @Override public void down(Node _child) { - LinkedList children = new LinkedList(); - - //copy and build new list - Iterator itr = iterator(); - while(itr.hasNext()){ - Node next = itr.next(); - if(next == _child && itr.hasNext()){ - Node target = itr.next(); - children.add(target); - } - children.add(next); + int index = m_children.indexOf(_child); + if(index != 0){ + m_children.remove(_child); + m_children.add(index,_child); } - - m_children = new CopyOnWriteArrayList(children); } @Override public void replace(Node _target, Node _newChild) { - Node target = _target; - LinkedList children = new LinkedList(); - - for(Node child : m_children){ - if(child == target){ - children.add(_newChild); - target = _newChild; - continue; - } - children.add(child); + int index = m_children.indexOf(_target); + if(index != 0){ + m_children.remove(_target); + m_children.add(index,_newChild); } - - m_children = new CopyOnWriteArrayList(children); } @Override public void up(Node _child) { - LinkedList children = new LinkedList(); - - //copy and build new list - Iterator itr = iterator(); - while(itr.hasNext()){ - Node next = itr.next(); - if(next == _child && !children.isEmpty()){ - Node target = children.removeLast(); - children.add(next); - children.add(target); - continue; - } - children.add(next); + int index = m_children.indexOf(_child); + if(index != 0){ + m_children.remove(_child); + m_children.add(index,_child); } - - m_children = new CopyOnWriteArrayList(children); } public String toString() @@ -180,4 +155,22 @@ { m_children.clear(); } + + @Override + public String getAttribute(String _attr) + { + return m_attrs.get(_attr); + } + + @Override + public void setAttribute(String _attr, String _value) + { + m_attrs.put(_attr,_value); + } + + @Override + public Node createNode() + { + return SimpleBrowser.getSingleton().createNode(); + } } diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/util/Pair.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/util/Pair.java Mon Dec 27 21:08:43 2010 +0900 @@ -0,0 +1,23 @@ +package treecms.proto.util; + +public class Pair +{ + private L m_left; + private R m_right; + + public Pair(L _left,R _right) + { + m_left = _left; + m_right = _right; + } + + public L getLeft() + { + return m_left; + } + + public R getRight() + { + return m_right; + } +} diff -r 9d248304be96 -r 9663c816e370 src/treecms/proto/util/RandomSimpleTreeBuilder.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/util/RandomSimpleTreeBuilder.java Mon Dec 27 21:08:43 2010 +0900 @@ -0,0 +1,78 @@ +package treecms.proto.util; + +import java.util.Random; + +import treecms.proto.api.Node; +import treecms.proto.simple.SimpleNode; + +public class RandomSimpleTreeBuilder +{ + public static void main(String _args[]) + { + SimpleNode root = RandomSimpleTreeBuilder.randomTree(2,2,3,3); + print(0,root); + } + + public static void print(int _indent,Node _parent) + { + for(int i = 0;i < _indent;i ++){ + System.out.print("\t"); + } + System.out.println(_parent.getTitle()); + + for(Node child : _parent.getChildren()){ + print(_indent + 1,child); + } + } + + public static SimpleNode randomTree(int _maxRow,int _maxCol) + { + return randomTree(0,0,_maxRow,_maxCol); + } + + public static SimpleNode randomTree(int _minRow,int _minCol,int _maxRow,int _maxCol) + { + RandomSimpleTreeBuilder builder = new RandomSimpleTreeBuilder(_minRow,_minCol,_maxRow,_maxCol); + return builder.generate(); + } + + private int m_minCol; + private int m_maxRow,m_maxCol; + + private RandomSimpleTreeBuilder(int _minRow,int _minCol,int _maxRow,int _maxCol) + { + m_minCol = _minCol; + m_maxRow = _maxRow; + m_maxCol = _maxCol; + } + + public SimpleNode generate() + { + SimpleNode root = new SimpleNode(); + root.setTitle("root"); + + Random rand = new Random(); + int childs = m_minCol + rand.nextInt(m_maxCol)*(1 - m_minCol/(1 + m_maxCol)); + for(int i = 1;i < childs;i ++){ + SimpleNode child = (SimpleNode)root.addChild(new SimpleNode()); + child.setTitle("c"+i); + generate(child,1,rand); + } + return root; + } + + private void generate(SimpleNode _parent,int _row,Random _rand) + { + if(_row >= m_maxRow || _rand.nextInt(m_maxRow) == 0){ + return; + } + + int childs = m_minCol + _rand.nextInt(m_maxCol)*(1 - m_minCol/(1 + m_maxCol)); + for(int i = 1;i < childs;i ++){ + SimpleNode child = (SimpleNode)_parent.addChild(new SimpleNode()); + child.setTitle(_parent.getTitle()+i); + generate(child,_row + 1,_rand); + } + } + +}