# HG changeset patch # User ShoshiTAMAKI # Date 1288691061 -32400 # Node ID 9b91329e8a0401ad97326393191ea4eacd6c3082 # Parent 99346c04a3cf94fa0a0fd89c4791b94313049c2a commit for zemi , doent move diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/api/Node.java --- a/src/treecms/proto/api/Node.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/api/Node.java Tue Nov 02 18:44:21 2010 +0900 @@ -11,6 +11,7 @@ public boolean isChild(Node _child); public void addChild(Node _child); + public void addChildren(List _children); public void removeChild(Node _child); public void up(Node _child); diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/edit/EditableTreeBuilder.java --- a/src/treecms/proto/edit/EditableTreeBuilder.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/edit/EditableTreeBuilder.java Tue Nov 02 18:44:21 2010 +0900 @@ -2,40 +2,22 @@ import java.util.LinkedList; import java.util.List; - import treecms.proto.api.Node; import treecms.proto.api.TreeBuilder; +import treecms.proto.simple.SimpleTreeBuilder; -public class EditableTreeBuilder implements TreeBuilder +public class EditableTreeBuilder extends SimpleTreeBuilder { - private TreeBuilder m_builder; private Node m_newRoot; - private Node m_oldRoot; - private Node m_target; //node that wanted to edit. public EditableTreeBuilder(Node _target,TreeBuilder _builder) { - m_builder = _builder; - //search path - m_oldRoot = _builder.getContents(); - LinkedList path = findPath(m_oldRoot,_target); - - /* - for(Node node : path){ - System.out.println(node.getTitle()); - } - */ - - //clone tree + LinkedList path = findPath(_builder.getContents(),_target); //clone root node. - m_newRoot = m_builder.createNode(); - Node oldRoot = path.poll(); - m_newRoot.setClassName(oldRoot.getClassName()); - m_newRoot.setTitle(oldRoot.getTitle()); - m_newRoot.getChildList().addAll(oldRoot.getChildList()); + m_newRoot = cloneNode(path.poll()); cloneTree(path,m_newRoot.getChildList()); } @@ -52,11 +34,8 @@ Node _child = _children.get(i); if(_child == target){ //clone node - Node newNode = m_builder.createNode(); - newNode.setClassName(target.getClassName()); - newNode.setTitle(target.getTitle()); - newNode.getChildList().addAll(target.getChildList()); - m_target = newNode; //oooooooooooooo.............. :( + Node newNode = cloneNode(target); + m_target = newNode; // look out!! //remove old node from clonedTree _children.add(i,newNode); @@ -103,11 +82,4 @@ // TODO Auto-generated method stub return m_newRoot; } - - @Override - public Node createNode() - { - // TODO Auto-generated method stub - return m_builder.createNode(); - } } diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/edit/PreOrderTreeWalkerRecursive.java --- a/src/treecms/proto/edit/PreOrderTreeWalkerRecursive.java Sun Oct 31 18:34:02 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -package treecms.proto.edit; -import java.util.Iterator; - -import java.util.LinkedList; - -import treecms.proto.api.Node; - -public class PreOrderTreeWalkerRecursive implements Iterable -{ - private Node m_root; - - public PreOrderTreeWalkerRecursive(Node _root) - { - m_root = _root; - } - - @Override - public Iterator iterator() - { - return new PreOrderRecursiveIterator(m_root); - } - - class PreOrderRecursiveIterator implements Iterator - { - private LinkedList nextList; - - public PreOrderRecursiveIterator(Node _root) - { - nextList = new LinkedList(); - getChildren(_root, nextList); - } - - void getChildren(Node node, LinkedListlist) { - list.add(node); - for(Node child : node.getChildList()){ - getChildren(child,list); - } - } - - @Override - public boolean hasNext() - { - return !nextList.isEmpty(); - } - - @Override - public Node next() - { - return nextList.poll(); - } - - @Override - public void remove() - { - throw new UnsupportedOperationException("cant remove from itrerator"); - } - } - - public LinkedList findPath(Node root, Node node) { - LinkedList list = new LinkedList(); - list.addFirst(root); - findPath(root,node,list); - return list; - } - - private boolean findPath(Node root, Node node, LinkedList list) { - if (root==node) return true; - for(Node child : node.getChildList()){ - if (findPath(child,node,list)) { - list.addFirst(child); - return true; - } - } - return false; // backtrack - } - - /* - public Node cloneTree(LinkedList path) { - Node old = path.poll(); - Node node = new SimpleNode(old.getTitle()); - node.setClassName(old.getClassName()); - for(Node child: old.getChildList()) { - if (child==old && !path.isEmpty()) child = cloneTree(path); - node.getChildList().add(child); - } - return node; - } - */ -} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/id/IncrementalNodeID.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/id/IncrementalNodeID.java Tue Nov 02 18:44:21 2010 +0900 @@ -0,0 +1,62 @@ +package treecms.proto.id; + +import treecms.proto.api.NodeID; +import java.util.concurrent.atomic.AtomicLong; + +public class IncrementalNodeID implements NodeID +{ + private String m_inheritedID; + private final long m_version; + + private AtomicLong m_tip; + + public IncrementalNodeID(String _inheritedID,AtomicLong _version) + { + m_inheritedID = _inheritedID; + m_version = _version.getAndIncrement(); + m_tip = _version; + } + + String getInheritedID() + { + return m_inheritedID; + } + + long getVersion() + { + return m_version; + } + + AtomicLong getTip() + { + return m_tip; + } + + @Override + public int compare(NodeID _target) + { + // 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; + }else if(diff < 0){ + return -1; + }else{ + return 1; + } + } + return -2; + } + + @Override + public String toString() + { + return m_inheritedID + "@" + m_version; + } +} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/id/IncrementalNodeIDFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/id/IncrementalNodeIDFactory.java Tue Nov 02 18:44:21 2010 +0900 @@ -0,0 +1,25 @@ +package treecms.proto.id; + +import java.util.UUID; +import java.util.concurrent.atomic.AtomicLong; + +import treecms.proto.api.NodeID; +import treecms.proto.api.NodeIDFactory; + +public class IncrementalNodeIDFactory implements NodeIDFactory +{ + @Override + public NodeID createNewID() + { + // TODO Auto-generated method stub + return new IncrementalNodeID(UUID.randomUUID().toString(),new AtomicLong()); + } + + @Override + public NodeID updateExistID(NodeID _id) + { + // TODO Auto-generated method stub + IncrementalNodeID id = (IncrementalNodeID)_id; + return new IncrementalNodeID(id.getInheritedID(),id.getTip()); + } +} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/id/NodeIDFactoryImpl.java --- a/src/treecms/proto/id/NodeIDFactoryImpl.java Sun Oct 31 18:34:02 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -package treecms.proto.id; - -import java.util.UUID; -import java.util.concurrent.atomic.AtomicLong; - -import treecms.proto.api.NodeID; -import treecms.proto.api.NodeIDFactory; - -public class NodeIDFactoryImpl implements NodeIDFactory -{ - @Override - public NodeID createNewID() - { - // TODO Auto-generated method stub - return new NodeIDImpl(UUID.randomUUID().toString(),new AtomicLong()); - } - - @Override - public NodeID updateExistID(NodeID _id) - { - // TODO Auto-generated method stub - NodeIDImpl id = (NodeIDImpl)_id; - return new NodeIDImpl(id.getInheritedID(),id.getTip()); - } -} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/id/NodeIDImpl.java --- a/src/treecms/proto/id/NodeIDImpl.java Sun Oct 31 18:34:02 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -package treecms.proto.id; - -import treecms.proto.api.NodeID; -import java.util.concurrent.atomic.AtomicLong; - -public class NodeIDImpl implements NodeID -{ - private String m_inheritedID; - private final long m_version; - - private AtomicLong m_tip; - - public NodeIDImpl(String _inheritedID,AtomicLong _version) - { - m_inheritedID = _inheritedID; - m_version = _version.getAndIncrement(); - m_tip = _version; - } - - String getInheritedID() - { - return m_inheritedID; - } - - long getVersion() - { - return m_version; - } - - AtomicLong getTip() - { - return m_tip; - } - - @Override - public int compare(NodeID _target) - { - // TODO Auto-generated method stub - if(m_inheritedID.equals(((NodeIDImpl)_target).m_inheritedID)){ - long diff = m_version - ((NodeIDImpl)_target).m_version; - if(diff == 0){ - return 0; - }else if(diff < 0){ - return -1; - }else{ - return 1; - } - } - return -2; - } - - @Override - public String toString() - { - return m_inheritedID + "@" + m_version; - } -} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/merge/MergedTreeBuilder.java --- a/src/treecms/proto/merge/MergedTreeBuilder.java Sun Oct 31 18:34:02 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -package treecms.proto.merge; - -import treecms.proto.api.Node; - -import java.util.List; -import treecms.proto.api.TreeBuilder; - -public class MergedTreeBuilder implements TreeBuilder -{ - private Node m_root; - - private TreeBuilder m_target; - - public MergedTreeBuilder(TreeBuilder _target1,TreeBuilder _target2) - { - Node root1 = _target1.getContents(); - Node root2 = _target2.getContents(); - - merge(root2,root1); - } - - public void merge(Node _target,Node _root) - { - List targetChld = _target.getChildList(); - List rootChld = _root.getChildList(); - } - - @Override - public Node getContents() - { - // TODO Auto-generated method stub - return m_root; - } - - @Override - public Node createNode() - { - // TODO Auto-generated method stub - return null; - } -} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/simple/SimpleNode.java --- a/src/treecms/proto/simple/SimpleNode.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/simple/SimpleNode.java Tue Nov 02 18:44:21 2010 +0900 @@ -8,7 +8,7 @@ public class SimpleNode implements Node { - private LinkedList m_childs; + private LinkedList m_children; private String m_class; private String m_title; @@ -16,7 +16,7 @@ public SimpleNode(NodeID _id) { - m_childs = new LinkedList(); + m_children = new LinkedList(); m_class = ""; m_title = ""; @@ -27,42 +27,42 @@ public List getChildList() { // TODO Auto-generated method stub - return m_childs; + return m_children; } @Override public boolean isChild(Node _child) { // TODO Auto-generated method stub - return m_childs.contains(_child); + return m_children.contains(_child); } @Override public void addChild(Node _child) { // TODO Auto-generated method stub - m_childs.add(_child); + m_children.add(_child); } @Override public void removeChild(Node _child) { // TODO Auto-generated method stub - m_childs.remove(_child); + m_children.remove(_child); } @Override public void up(Node _child) { // TODO Auto-generated method stub - int curPos = m_childs.indexOf(_child); + int curPos = m_children.indexOf(_child); if(curPos - 1 > 0){ - m_childs.add(curPos - 1,m_childs.remove(curPos)); + m_children.add(curPos - 1,m_children.remove(curPos)); } } @Override public void down(Node _child) { // TODO Auto-generated method stub - int curPos = m_childs.indexOf(_child); - if(curPos + 1 < m_childs.size()){ - m_childs.add(curPos + 1,m_childs.remove(curPos)); + int curPos = m_children.indexOf(_child); + if(curPos + 1 < m_children.size()){ + m_children.add(curPos + 1,m_children.remove(curPos)); } } @@ -93,7 +93,7 @@ @Override public Iterator iterator() { // TODO Auto-generated method stub - return m_childs.iterator(); + return m_children.iterator(); } @Override @@ -102,4 +102,9 @@ return this.m_id; } + @Override + public void addChildren(List _children) { + // TODO Auto-generated method stub + this.m_children.addAll(_children); + } } diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/simple/SimpleTreeBuilder.java --- a/src/treecms/proto/simple/SimpleTreeBuilder.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/simple/SimpleTreeBuilder.java Tue Nov 02 18:44:21 2010 +0900 @@ -2,16 +2,16 @@ import treecms.proto.api.Node; import treecms.proto.api.TreeBuilder; -import treecms.proto.id.NodeIDFactoryImpl; +import treecms.proto.id.IncrementalNodeIDFactory; public class SimpleTreeBuilder implements TreeBuilder { private Node m_root; - private NodeIDFactoryImpl m_idFactory; + private IncrementalNodeIDFactory m_idFactory; public SimpleTreeBuilder() { - m_idFactory = new NodeIDFactoryImpl(); + m_idFactory = new IncrementalNodeIDFactory(); m_root = createNode(); } @@ -30,8 +30,14 @@ { // TODO Auto-generated method stub if(!(_node instanceof SimpleNode)){ - throw new IllegalArgumentException(); + throw new IllegalArgumentException("cant clone , _node is not instance of SimpleNode"); } - return new SimpleNode(m_idFactory.updateExistID(_node.getID())); + + SimpleNode clone = new SimpleNode(m_idFactory.updateExistID(_node.getID())); + clone.setClassName(_node.getClassName()); + clone.setTitle(_node.getTitle()); + clone.addChildren(_node.getChildList()); + + return clone; } } diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/test/EditableTreeBuilderTest1.java --- a/src/treecms/proto/test/EditableTreeBuilderTest1.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/test/EditableTreeBuilderTest1.java Tue Nov 02 18:44:21 2010 +0900 @@ -1,13 +1,19 @@ package treecms.proto.test; -import treecms.proto.edit.*; import treecms.proto.api.*; +import treecms.proto.edit.EditableTreeBuilder; import treecms.proto.simple.*; public class EditableTreeBuilderTest1 { public static void main(String _args[]) { + new EditableTreeBuilderTest1(); + } + + public EditableTreeBuilderTest1() + { + TreeBuilder builder = new SimpleTreeBuilder(); Node root = builder.getContents(); root.setTitle("root"); @@ -43,23 +49,26 @@ child21.addChild(child211); child21.addChild(child212); - - //i want to edit child22 - System.out.println("original"); PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(builder.getContents()); - for(Node node : walker){ - System.out.println(node.getTitle() + "\t\tID:" + node.getID()); - } + System.out.println("original........................................"); + print(walker); - - System.out.println("clonedtree"); - - //check that tree correctly copied. EditableTreeBuilder builder2 = new EditableTreeBuilder(child212,builder); builder2.getTargetNode().setTitle("cloned child212"); walker = new PreOrderTreeWalkerRecursive(builder2.getContents()); - for(Node node : walker){ + System.out.println("cloned.........................................."); + print(walker); + + builder2 = new EditableTreeBuilder(builder2.getTargetNode(),builder); + walker = new PreOrderTreeWalkerRecursive(builder2.getContents()); + System.out.println("cloned.........................................."); + print(walker); + } + + private void print(PreOrderTreeWalkerRecursive _walker) + { + for(Node node : _walker){ System.out.println(node.getTitle() + "\t\tID:" + node.getID()); } } diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/test/PreOrderTreeWalkerRecurisiveTest1.java --- a/src/treecms/proto/test/PreOrderTreeWalkerRecurisiveTest1.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/test/PreOrderTreeWalkerRecurisiveTest1.java Tue Nov 02 18:44:21 2010 +0900 @@ -4,7 +4,6 @@ import treecms.proto.api.*; import treecms.proto.simple.*; import treecms.proto.edit.EditableTreeBuilder; -import treecms.proto.edit.PreOrderTreeWalkerRecursive; public class PreOrderTreeWalkerRecurisiveTest1 { diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/test/PreOrderTreeWalkerRecursive.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/test/PreOrderTreeWalkerRecursive.java Tue Nov 02 18:44:21 2010 +0900 @@ -0,0 +1,89 @@ +package treecms.proto.test; +import java.util.Iterator; + +import java.util.LinkedList; + +import treecms.proto.api.Node; + +public class PreOrderTreeWalkerRecursive implements Iterable +{ + private Node m_root; + + public PreOrderTreeWalkerRecursive(Node _root) + { + m_root = _root; + } + + @Override + public Iterator iterator() + { + return new PreOrderRecursiveIterator(m_root); + } + + class PreOrderRecursiveIterator implements Iterator + { + private LinkedList nextList; + + public PreOrderRecursiveIterator(Node _root) + { + nextList = new LinkedList(); + getChildren(_root, nextList); + } + + void getChildren(Node node, LinkedListlist) { + list.add(node); + for(Node child : node.getChildList()){ + getChildren(child,list); + } + } + + @Override + public boolean hasNext() + { + return !nextList.isEmpty(); + } + + @Override + public Node next() + { + return nextList.poll(); + } + + @Override + public void remove() + { + throw new UnsupportedOperationException("cant remove from itrerator"); + } + } + + public LinkedList findPath(Node root, Node node) { + LinkedList list = new LinkedList(); + list.addFirst(root); + findPath(root,node,list); + return list; + } + + private boolean findPath(Node root, Node node, LinkedList list) { + if (root==node) return true; + for(Node child : node.getChildList()){ + if (findPath(child,node,list)) { + list.addFirst(child); + return true; + } + } + return false; // backtrack + } + + /* + public Node cloneTree(LinkedList path) { + Node old = path.poll(); + Node node = new SimpleNode(old.getTitle()); + node.setClassName(old.getClassName()); + for(Node child: old.getChildList()) { + if (child==old && !path.isEmpty()) child = cloneTree(path); + node.getChildList().add(child); + } + return node; + } + */ +} diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/test/SearchPathTest1.java --- a/src/treecms/proto/test/SearchPathTest1.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/test/SearchPathTest1.java Tue Nov 02 18:44:21 2010 +0900 @@ -5,7 +5,6 @@ import java.util.LinkedList; import treecms.proto.api.*; -import treecms.proto.edit.PreOrderTreeWalkerRecursive; import treecms.proto.simple.*; public class SearchPathTest1 diff -r 99346c04a3cf -r 9b91329e8a04 src/treecms/proto/test/SimpleNodeTest1.java --- a/src/treecms/proto/test/SimpleNodeTest1.java Sun Oct 31 18:34:02 2010 +0900 +++ b/src/treecms/proto/test/SimpleNodeTest1.java Tue Nov 02 18:44:21 2010 +0900 @@ -3,7 +3,6 @@ import java.util.Iterator; import treecms.proto.api.*; -import treecms.proto.edit.PreOrderTreeWalkerRecursive; import treecms.proto.simple.*; public class SimpleNodeTest1 @@ -51,7 +50,7 @@ Iterator itr = walker.iterator(); while(itr.hasNext()){ Node node = itr.next(); - System.out.println(node.getTitle()); + System.out.println(node.getTitle()+"\t id:"+node.getID().toString()); } } }