diff src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java @ 4:5acde010c6db

add jungle browsing system
author tatsuki
date Tue, 28 Jun 2016 19:45:55 +0900
parents f3d30646c863
children
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java	Mon Jun 27 05:25:48 2016 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java	Tue Jun 28 19:45:55 2016 +0900
@@ -17,6 +17,7 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.LoggingNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.OperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditor;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultEvaluator;
 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traversal;
@@ -656,34 +657,28 @@
         return str;
     }
 
-    @Override
-    public GetAttributeImp getAttribute(String _bname, String _path, String revisionStr) {
-        DefaultNodePath path = new DefaultNodePath();
-        String[] nums = _path.split(",");
-        for (String num : nums) {
-            if (!num.equals("-1"))
-                path = path.add(Integer.parseInt(num));
-        }
-
+    public GetAttributeImp getAttribute(String _bname, String nodePath,String revisionStr) {
+        Long revision = Long.parseLong(revisionStr);
+        DefaultNodePath path = createNodePath(nodePath);
         JungleTree tree = jungle.getTreeByName(_bname);
-        TreeNode node;
-        if (revisionStr.equals("-1")) {
-            node = tree.getRootNode();
-        } else {
-            Long revision = Long.parseLong(revisionStr);
-            JungleTree oldTree = tree.getOldTree(revision).b();
-            node = oldTree.getRootNode();
-        }
+        JungleTree oldTree = tree.getOldTree(revision).b();
+        Either<Error, TreeNode> either = tree.getNodeOfPath(path);
+        if (either.isA())
+            return new GetAttributeImp(new DefaultTreeNode());
+        TreeNode node = either.b();
+        return new GetAttributeImp(node);
+    }
 
-        DefaultTraverser traverser = new DefaultTraverser();
-        DefaultEvaluator evaluator = new DefaultEvaluator(path);
-        Either<Error, Traversal> ret = traverser.traverse(node, evaluator);
-        if (ret.isA()) {
-            Assert.fail();
+    private DefaultNodePath createNodePath(String nodePath) {
+        DefaultNodePath path = new DefaultNodePath();
+        try {
+            for (int count = 0; nodePath.substring(count, count + 1) != null; count++) {
+                if (!nodePath.substring(count, count + 1).equals("/"))
+                    path = path.add(Integer.parseInt(nodePath.substring(count, count + 1)));
+            }
+        } catch (Exception _e) {
         }
+        return path;
+    }
 
-        Traversal traversal = ret.b();
-        TreeNode target = traversal.destination();
-        return new GetAttributeImp(target);
-    }
 }