Mercurial > hg > Members > shoshi > TreeCMS > TreeCMSPrototype1
view src/treecms/proto/edit/EditableTreeBuilder.java @ 20:e950264f82d3
commit
author | ShoshiTAMAKI |
---|---|
date | Sun, 17 Oct 2010 00:29:56 +0900 |
parents | src/treecms/proto/edit/EditableNodeAPITreeBuilder.java@6b8f33b7e09f |
children | cce963b8a4fd |
line wrap: on
line source
package treecms.proto.edit; import java.util.LinkedList; import java.util.List; import treecms.proto.api.Node; import treecms.proto.api.TreeBuilder; public class EditableTreeBuilder implements TreeBuilder { private TreeBuilder m_builder; private Node m_newRoot; private Node m_oldRoot; public EditableTreeBuilder(Node _target,TreeBuilder _builder) { m_builder = _builder; //search path m_oldRoot = _builder.getContents(); List<Node> path = findPath(m_oldRoot,_target); //clone tree List<Node> clonedTree = cloneTree(path); m_newRoot = clonedTree.get(0); } private List<Node> cloneTree(List<Node> _path) { List<Node> clonedTree = new LinkedList<Node>(); Node origRoot = _path.get(0); Node clonedRoot = m_builder.createNode(); clonedRoot.setTitle(origRoot.getTitle()); clonedRoot.setClassName(origRoot.getClassName()); return clonedTree; } public List<Node> findPathTest(Node _root,Node _child) { return findPath(_root,_child); } private List<Node> findPath(Node _root,Node _child) { LinkedList<Node> list = new LinkedList<Node>(); findPath(_root,_child,list); list.addFirst(_root); return list; } private boolean findPath(Node _root,Node _child,LinkedList<Node> _list) { if(_root == _child){ return true; } for(Node child : _root.getChildList()){ if(findPath(child,_child,_list)){ _list.addFirst(child); return true; } } return false; } @Override public Node getContents() { // TODO Auto-generated method stub return m_newRoot; } @Override public Node createNode() { // TODO Auto-generated method stub return m_builder.createNode(); } }