Mercurial > hg > Members > shoshi > jungle > bbs
diff src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java @ 5:2b3542c5be34
move child
author | tatsuki |
---|---|
date | Tue, 02 Aug 2016 17:46:03 +0900 |
parents | 5acde010c6db |
children | 36f0f18ce6a8 |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java Tue Jun 28 19:45:55 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java Tue Aug 02 17:46:03 2016 +0900 @@ -14,8 +14,13 @@ import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeChildren; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; +import plparser.Property; +import plparser.jungle.PropertyJungleTreeFactoryImpl; +import plparser.jungle.PropertyListJungleNodeFactory; +import plparser.jungle.PropertyListParserCreateTree; import java.nio.ByteBuffer; import java.util.Iterator; @@ -46,7 +51,10 @@ } public void createBoards(final String _name) { - if (null == jungle.createNewTree(_name)) { + createBoards(_name, new DefaultTreeNode()); + } + public void createBoards(final String _name, TreeNode rootNode) { + if (null == jungle.createNewTree(_name, rootNode)) { throw new IllegalStateException(); } JungleTree tree = jungle.getTreeByName("boards"); @@ -184,6 +192,62 @@ return children.iterator(); } + @Override + public void importLayout(String boardName, String path) { + PropertyListParserCreateTree<Property> jp; + PropertyListJungleNodeFactory jlf = new PropertyJungleTreeFactoryImpl(); + jp = new PropertyListParserCreateTree<Property>(jlf); + TreeNode root = jp.parseFile(path); + createBoards(boardName, root); + } + + @Override + public Iterator<TreeNode> findNode(String bname, String key, String value) { + JungleTree tree = jungle.getTreeByName(bname); + InterfaceTraverser traverser = tree.getTraverser(true); + return traverser.find((TreeNode node) -> { + return true; + },key,value); + } + + @Override + public String getNodePath(String bname, TreeNode node) { + JungleTree tree = jungle.getTreeByName(bname); + NodePath path = tree.getNodePath(node); + return path.toString(); + } + + @Override + public boolean childMove(String bname, String pathString, String childNumString, String move) { + int childNum = Integer.parseInt(childNumString); + JungleTree tree = jungle.getTreeByName(bname); + DefaultNodePath path = createNodePath(pathString); + TreeNode node = tree.getNodeOfPath(path).b(); + int childrenCount = node.getChildren().size(); + TreeNode child = node.getChildren().at(childNum).b(); + TreeNodeChildren grandsons = child.getChildren(); + JungleTreeEditor editor = tree.getTreeEditor(); + editor = editor.deleteChildAt(path,childNum).b(); + if (move.equals("up") && childNum != 0) + childNum--; + else if (move.equals("down") && childNum != childrenCount) + childNum++; + editor = editor.addNewChildAt(path,childNum).b(); + + Iterator<String> keys = child.getAttributes().getKeys(); + NodePath newChildPath = path.add(childNum); + while (keys.hasNext()) { + String key = keys.next(); + ByteBuffer value = child.getAttributes().get(key); + editor = editor.putAttribute(newChildPath,key,value).b(); + } + + for (TreeNode grandson : grandsons) { + + } + return editor.success().isB(); + } + private DefaultNodePath createNodePath(String nodePath) { DefaultNodePath path = new DefaultNodePath(); String[] nums = nodePath.split(",");