changeset 36:9663c816e370

commit.
author suika6039
date Mon, 27 Dec 2010 21:08:43 +0900
parents 9d248304be96
children 78e9b96ef04a
files src/treecms/proto/api/Node.java src/treecms/proto/api/NodeID.java src/treecms/proto/cassandra/CassandraNode.java src/treecms/proto/gui/GraphicalMonotonicTreeEditor.java src/treecms/proto/id/IncrementalNodeID.java src/treecms/proto/simple/RandomSimpleTreeBuilder.java src/treecms/proto/simple/SimpleBrowser.java src/treecms/proto/simple/SimpleLink.java src/treecms/proto/simple/SimpleNode.java src/treecms/proto/util/Pair.java src/treecms/proto/util/RandomSimpleTreeBuilder.java
diffstat 11 files changed, 288 insertions(+), 293 deletions(-) [+]
line wrap: on
line diff
--- 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<Node> iterator();
 	public void addChildren(List<Node> _child);
 	public List<Node> 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
--- 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);
 }
--- 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<Node> 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<Node> 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<Node> 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
-		
-	}
-
-}
--- 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
 {
--- 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);
+	}
 }
--- 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);
-		}
-	}
-	
-}
--- /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<NodeID,Node> m_table;
+	
+	private SimpleNode m_root;
+	
+	private SimpleBrowser()
+	{
+		m_table = new Hashtable<NodeID,Node>();
+		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);
+	}
+}
--- 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<Node> m_children;
 	
 	public SimpleLink(Node _target)
 	{
 		m_id = new IncrementalNodeID();
 		m_target = _target;
-		m_children = new LinkedList<Node>();
+		SimpleNodeTable.getInstance().put(m_id.toString(),this);
 	}
 
 	@Override
@@ -50,7 +49,7 @@
 	@Override
 	public List<Node> 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<Node> iterator()
 	{
-		return Collections.unmodifiableList(m_children).iterator();
+		return Collections.EMPTY_LIST;
 	}
 
 	@Override
@@ -130,4 +129,10 @@
 	{
 		return;
 	}
+	
+	@Override
+	public Node createNode()
+	{
+		return new SimpleNode();
+	}
 }
--- 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<Node> m_children;
+	private LinkedList<Node> m_children;
 	
 	private NodeID m_id;
 	private String m_title,m_class;
+	private Hashtable<String,String> m_attrs;
 	
-	public SimpleNode()
+	SimpleNode(NodeID _id)
 	{
-		this(new IncrementalNodeID());
-	}
-	
-	private SimpleNode(NodeID _id)
-	{
-		m_children = new CopyOnWriteArrayList<Node>();
+		m_children = new LinkedList<Node>();
 		
 		m_id = _id;
 		m_title = "";
 		m_class = "";
+		
+		m_attrs = new Hashtable<String,String>();
+		
+		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<Node> _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<Node> children = new LinkedList<Node>();
-		
-		//copy and build new list
-		Iterator<Node> 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<Node>(children);
 	}
 
 	@Override
 	public void replace(Node _target, Node _newChild)
 	{
-		Node target = _target;
-		LinkedList<Node> children = new LinkedList<Node>();
-		
-		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<Node>(children);
 	}
 
 	@Override
 	public void up(Node _child)
 	{
-		LinkedList<Node> children = new LinkedList<Node>();
-		
-		//copy and build new list
-		Iterator<Node> 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<Node>(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();
+	}
 }
--- /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<L,R>
+{
+	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;
+	}
+}
--- /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);
+		}
+	}
+	
+}