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(",");