# HG changeset patch # User shoshi # Date 1283082381 -32400 # Node ID ce6e4523b284fc00c77c5a2d9b6ece253db95160 # Parent 3bccd745f2e233974fd3540f750feb16b098f08e hogehoge diff -r 3bccd745f2e2 -r ce6e4523b284 src/treecms/proto/edit/EditableNodeAPITreeBuilder.java --- a/src/treecms/proto/edit/EditableNodeAPITreeBuilder.java Sun Aug 29 12:07:03 2010 +0900 +++ b/src/treecms/proto/edit/EditableNodeAPITreeBuilder.java Sun Aug 29 20:46:21 2010 +0900 @@ -1,18 +1,42 @@ package treecms.proto.edit; +import java.util.LinkedList; import java.util.List; import java.util.UUID; import treecms.proto.api.NodeAPI; import treecms.proto.api.NodeAPITreeBuilder; +import treecms.proto.test.PreOrderTreeWalkerRecursive; public class EditableNodeAPITreeBuilder implements NodeAPITreeBuilder { private NodeAPITreeBuilder m_builder; + private NodeAPI m_newRoot; + private NodeAPI m_oldRoot; - public EditableNodeAPITreeBuilder(NodeAPITreeBuilder _builder) + public EditableNodeAPITreeBuilder(NodeAPI _target,NodeAPITreeBuilder _builder) { m_builder = _builder; + m_newRoot = m_builder.createNode(); + + //search path + m_oldRoot = _builder.getContents(); + Iterable itr = new PreOrderTreeWalkerRecursive(m_oldRoot); + + LinkedList reverse = new LinkedList(); + for(NodeAPI child : itr){ + reverse.addFirst(child); + } + + LinkedList path = new LinkedList(); + NodeAPI target = _target; + for(NodeAPI node : reverse){ + if(node.isChild(target)){ + path.addFirst(target); + target = node; + } + } + } @Override diff -r 3bccd745f2e2 -r ce6e4523b284 src/treecms/proto/test/SearchPathRootToChildTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/test/SearchPathRootToChildTest.java Sun Aug 29 20:46:21 2010 +0900 @@ -0,0 +1,71 @@ +package treecms.proto.test; + +import java.util.Iterator; +import java.util.LinkedList; + +import treecms.proto.api.*; +import treecms.proto.simple.*; + +public class SearchPathRootToChildTest +{ + public static void main(String _arg[]) + { + NodeAPITreeBuilder builder = new SimpleNodeAPITreeBuilder(); + NodeAPI root = builder.getContents(); + root.setTitle("root"); + + NodeAPI child1 = builder.createNode(); + child1.setTitle("+-child1"); + NodeAPI child2 = builder.createNode(); + child2.setTitle("+-child2"); + + root.addChild(child1); + root.addChild(child2); + + NodeAPI child11 = builder.createNode(); + child11.setTitle(" +-child11"); + NodeAPI child12 = builder.createNode(); + child12.setTitle(" +-child12"); + NodeAPI child13 = builder.createNode(); + child13.setTitle(" +-child13"); + + child1.addChild(child11); + child1.addChild(child12); + child1.addChild(child13); + + NodeAPI child21 = builder.createNode(); + child21.setTitle(" +-child21"); + + child2.addChild(child21); + + NodeAPI child211 = builder.createNode(); + child211.setTitle(" +-child211"); + NodeAPI child212 = builder.createNode(); + child212.setTitle(" +-child212"); + + child21.addChild(child211); + child21.addChild(child212); + + + PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(root); + Iterator itr = walker.iterator(); + + LinkedList reverse = new LinkedList(); + while(itr.hasNext()){ + reverse.addFirst(itr.next()); + } + + NodeAPI target = child212; + LinkedList path = new LinkedList(); + for(NodeAPI node : reverse){ + if(node.isChild(target)){ + path.addFirst(target); + target = node; + } + } + + for(NodeAPI node : path){ + System.out.println(node.getTitle()); + } + } +}