changeset 239:2fc1c4f19c02 Implementation_of_communication

commandline update
author tatsuki
date Mon, 15 Feb 2016 00:36:26 +0900
parents 15235a18202a
children 648df7d29d13
files src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java
diffstat 1 files changed, 75 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java	Mon Feb 15 00:17:36 2016 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java	Mon Feb 15 00:36:26 2016 +0900
@@ -10,6 +10,8 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
 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.DefaultEither;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultError;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.jungle.xml.reader.XmlReader;
@@ -65,18 +67,86 @@
 
         while (iterator.hasNext()) {
             switch (iterator.next()) {
-                case "select": //検索
+                case "select": //検索 select keyName from treeName
                     select(iterator);
                     break;
-                case "insert"://Nodeの追加 insert into treeName path <Path> key value attribute
+                case "insert"://Nodeの追加 insert into treeName path <Path> keys key values attribute
                     insert(iterator);
                     break;
-                case "update":
+                case "update"://attribute等のupdate treeName path <Path> keys key values attribute
+                    update(iterator);
                     break;
             }
         }
     }
 
+    private void update(Iterator<String> iterator) {
+        {
+            DefaultNodePath path = new DefaultNodePath();
+            String treeName = "";
+            if (iterator.hasNext())
+                treeName = iterator.next();
+            else {
+                System.out.println("faild");
+                return;
+            }
+            while (iterator.hasNext()) {
+                switch (iterator.next()) {
+                    case "path":
+                        String pathStr = "";
+                        if (iterator.hasNext())
+                            pathStr = iterator.next();
+                        pathStr = pathStr.substring(1, pathStr.length() - 1); // <>を取り取り除く
+                        String[] nums = pathStr.split(",");
+                        for (String num : nums) {
+                            if (num.equals("-1"))
+                                continue;
+                            path = path.add(new Integer(num));
+                        }
+                        continue;
+                    case " ":
+                        continue;
+                    case "keys":
+
+                }
+                break;
+            }
+
+            LinkedList<String> keys = new LinkedList<>();
+            while (iterator.hasNext()) {
+                String str = iterator.next();
+                if (str.equals("values"))
+                    break;
+                keys.add(str);//表示するkeyを表示
+            }
+
+            LinkedList<String> values = new LinkedList<>();
+            while (iterator.hasNext()) {
+                String str = iterator.next();
+                values.add(str);//表示するkeyを表示
+            }
+
+            JungleTree tree = jungle.getTreeByName(treeName);
+            if (tree == null)
+                tree = jungle.createNewTree(treeName);
+            JungleTreeEditor editor = tree.getTreeEditor();
+            Iterator<String> keyIterator = keys.iterator();
+            Iterator<String> valueIterator = values.iterator();
+            Either<Error, JungleTreeEditor> either = DefaultEither.newA(new DefaultError());
+            while (keyIterator.hasNext()) {//値の追加
+                String key = keyIterator.next();
+                String value = valueIterator.next();
+                either = editor.putAttribute(path, key, ByteBuffer.wrap(value.getBytes()));
+                if (either.isA())//Nodeの追加に失敗したらその場でinsert終了
+                    return;
+                editor = either.b();
+            }
+            editor.success();
+            if (either.isA())//Nodeの追加に失敗したらその場でinsert終了
+                System.out.println("faild");
+        }
+    }
+
     private void insert(Iterator<String> iterator) {
         DefaultNodePath path = new DefaultNodePath();
         String treeName = "";
@@ -98,6 +168,8 @@
                         path = path.add(new Integer(num));
                     }
                     continue;
+                case " ":
+                    continue;
                 case "keys":
 
             }