# HG changeset patch # User tatsuki # Date 1455464186 -32400 # Node ID 2fc1c4f19c028acea3b88879bd354c83528932f4 # Parent 15235a18202ae3dd5d6e6d3990a11cab6fba67c3 commandline update diff -r 15235a18202a -r 2fc1c4f19c02 src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java --- 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 key value attribute + case "insert"://Nodeの追加 insert into treeName path keys key values attribute insert(iterator); break; - case "update": + case "update"://attribute等のupdate treeName path keys key values attribute + update(iterator); break; } } } + private void update(Iterator 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 keys = new LinkedList<>(); + while (iterator.hasNext()) { + String str = iterator.next(); + if (str.equals("values")) + break; + keys.add(str);//表示するkeyを表示 + } + + LinkedList 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 keyIterator = keys.iterator(); + Iterator valueIterator = values.iterator(); + Either 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 iterator) { DefaultNodePath path = new DefaultNodePath(); String treeName = ""; @@ -98,6 +168,8 @@ path = path.add(new Integer(num)); } continue; + case " ": + continue; case "keys": }