annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 122:b006861cb795

add SearchQueryTest
author one
date Mon, 06 Oct 2014 22:42:03 +0900
parents 6a35bd6e5887
children 75ba2f2d6ea3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
2
98
95000ff9064d Create Query
one
parents: 97
diff changeset
3 import java.util.Iterator;
95000ff9064d Create Query
one
parents: 97
diff changeset
4
112
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
5 import fj.Ord;
104
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
6 import fj.data.List;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
7 import fj.data.TreeMap;
98
95000ff9064d Create Query
one
parents: 97
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
c297f0015d9e create Update query
one
parents: 100
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.SearchQuery;
c297f0015d9e create Update query
one
parents: 100
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.UpdateQuery;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
19
100
9a7b7af838e0 add index TreeNodeEditor
one
parents: 99
diff changeset
20 public class InterfaceTraverser {
112
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
21
100
9a7b7af838e0 add index TreeNodeEditor
one
parents: 99
diff changeset
22 InterfaceTraverser traverser;
98
95000ff9064d Create Query
one
parents: 97
diff changeset
23 TreeNode node;
111
5df5505e1c1e change Index type
one
parents: 110
diff changeset
24 TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index;
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
25 JungleTreeEditor editor;
c297f0015d9e create Update query
one
parents: 100
diff changeset
26
112
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
27 public InterfaceTraverser(TreeNode _root, JungleTreeEditor editor) {
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
28 this.node = _root;
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
29 this.index = TreeMap.empty(Ord.stringOrd);
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
30 this.editor = editor;
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
31 }
98e256d9fd57 treeAttribute add get String but has error
one
parents: 111
diff changeset
32
111
5df5505e1c1e change Index type
one
parents: 110
diff changeset
33 public InterfaceTraverser(TreeNode _root, TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index, JungleTreeEditor editor) {
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
34 this.node = _root;
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
35 this.index = index;
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
36 this.editor = editor;
98
95000ff9064d Create Query
one
parents: 97
diff changeset
37 }
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
38
107
one
parents: 106
diff changeset
39
100
9a7b7af838e0 add index TreeNodeEditor
one
parents: 99
diff changeset
40 public InterfaceTraverser getTraverser(JungleTree tree) {
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
41 return new InterfaceTraverser(tree.getRootNode(), tree.getIndex(), tree.getTreeEditor());
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
42 }
98
95000ff9064d Create Query
one
parents: 97
diff changeset
43
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
44 public void set(TreeNode root){
c297f0015d9e create Update query
one
parents: 100
diff changeset
45 this.node = root;
c297f0015d9e create Update query
one
parents: 100
diff changeset
46 }
c297f0015d9e create Update query
one
parents: 100
diff changeset
47 /*
c297f0015d9e create Update query
one
parents: 100
diff changeset
48 * public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int
c297f0015d9e create Update query
one
parents: 100
diff changeset
49 * _pos){
c297f0015d9e create Update query
one
parents: 100
diff changeset
50 *
c297f0015d9e create Update query
one
parents: 100
diff changeset
51 * Children children = _node.getChildren(); Either<Error,TreeNode> either =
c297f0015d9e create Update query
one
parents: 100
diff changeset
52 * children.at(0); IteratorPathNode list = new IteratorPathNodeImpl(); int
c297f0015d9e create Update query
one
parents: 100
diff changeset
53 * pathCount = _pos; if(children.size() == 0){ list = list.add(new
c297f0015d9e create Update query
one
parents: 100
diff changeset
54 * Pair<TreeNode, NodePath>(node, _path.add(_pos))); return list; }
c297f0015d9e create Update query
one
parents: 100
diff changeset
55 *
c297f0015d9e create Update query
one
parents: 100
diff changeset
56 * for(TreeNode child : children){ list =
c297f0015d9e create Update query
one
parents: 100
diff changeset
57 * list.append(traverse(child,_path,pathCount)); pathCount++; }
c297f0015d9e create Update query
one
parents: 100
diff changeset
58 *
c297f0015d9e create Update query
one
parents: 100
diff changeset
59 * list = list.add(new Pair<TreeNode,NodePath>(_node, _path.add(_pos)));
c297f0015d9e create Update query
one
parents: 100
diff changeset
60 * return list; }
c297f0015d9e create Update query
one
parents: 100
diff changeset
61 *
c297f0015d9e create Update query
one
parents: 100
diff changeset
62 * public int count(Query _query, String _key, String _attribute){ return
c297f0015d9e create Update query
one
parents: 100
diff changeset
63 * this.find(_query,_key,_attribute); }
c297f0015d9e create Update query
one
parents: 100
diff changeset
64 *
c297f0015d9e create Update query
one
parents: 100
diff changeset
65 * public List<Pair<NodePath,TreeNode>> distinct(String _key ,String...
c297f0015d9e create Update query
one
parents: 100
diff changeset
66 * _attribute){ return null; }
c297f0015d9e create Update query
one
parents: 100
diff changeset
67 */
102
3d88bad21bc4 refactoring 9-11
one
parents: 101
diff changeset
68
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
69 public JungleTreeEditor update(final Query query) {
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
70 /*Iterator<Pair<TreeNode, NodePath>> findNode = find(query);
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
71 //do {
c297f0015d9e create Update query
one
parents: 100
diff changeset
72 for (; findNode.hasNext();) {
c297f0015d9e create Update query
one
parents: 100
diff changeset
73 Either<Error, JungleTreeEditor> either = editor.putAttribute(findNode.next().right(), "KEY", query.getUpdateAttribute());
c297f0015d9e create Update query
one
parents: 100
diff changeset
74 if (either.isA())
c297f0015d9e create Update query
one
parents: 100
diff changeset
75 ;// wait delay write
c297f0015d9e create Update query
one
parents: 100
diff changeset
76 editor = either.b();
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
77 }
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
78 //} while (editor.success().isA());
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
79 */
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
80 return editor;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
81 }
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
82
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
83 public Iterator<Pair<TreeNode, NodePath>> find(final Query query) {
122
b006861cb795 add SearchQueryTest
one
parents: 113
diff changeset
84 final PathNodeIterator itNode = new PathNodeIterator(node);
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
85
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
86 return new Iterator<Pair<TreeNode, NodePath>>() {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
87
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
88 private Pair<TreeNode, NodePath> matchPair = nextmatch(itNode);
c297f0015d9e create Update query
one
parents: 100
diff changeset
89
c297f0015d9e create Update query
one
parents: 100
diff changeset
90 private Pair<TreeNode, NodePath> nextmatch(PathNodeIterator itNode) {
c297f0015d9e create Update query
one
parents: 100
diff changeset
91 for (; itNode.hasNext();) {
c297f0015d9e create Update query
one
parents: 100
diff changeset
92 Pair<TreeNode, NodePath> pathNode = itNode.next();
c297f0015d9e create Update query
one
parents: 100
diff changeset
93 if (query.condition(pathNode.left()))
c297f0015d9e create Update query
one
parents: 100
diff changeset
94 return pathNode;
c297f0015d9e create Update query
one
parents: 100
diff changeset
95 }
c297f0015d9e create Update query
one
parents: 100
diff changeset
96 return null;
c297f0015d9e create Update query
one
parents: 100
diff changeset
97 }
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
98
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
99 @Override
c297f0015d9e create Update query
one
parents: 100
diff changeset
100 public boolean hasNext() {
c297f0015d9e create Update query
one
parents: 100
diff changeset
101 return matchPair != null;
c297f0015d9e create Update query
one
parents: 100
diff changeset
102 }
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
103
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
104 @Override
c297f0015d9e create Update query
one
parents: 100
diff changeset
105 public Pair<TreeNode, NodePath> next() {
c297f0015d9e create Update query
one
parents: 100
diff changeset
106 Pair<TreeNode, NodePath> currentPair = matchPair;
c297f0015d9e create Update query
one
parents: 100
diff changeset
107 matchPair = nextmatch(itNode);
c297f0015d9e create Update query
one
parents: 100
diff changeset
108 return currentPair;
c297f0015d9e create Update query
one
parents: 100
diff changeset
109 }
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
110
101
c297f0015d9e create Update query
one
parents: 100
diff changeset
111 @Override
c297f0015d9e create Update query
one
parents: 100
diff changeset
112 public void remove() {
c297f0015d9e create Update query
one
parents: 100
diff changeset
113 // TODO Auto-generated method stub
c297f0015d9e create Update query
one
parents: 100
diff changeset
114
c297f0015d9e create Update query
one
parents: 100
diff changeset
115 }
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
116
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
117 };
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
118
98
95000ff9064d Create Query
one
parents: 97
diff changeset
119 }
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
120 }