annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 153:20af7f25ef32

miner change
author one
date Tue, 25 Nov 2014 17:52:41 +0900
parents 8a0aa8fc137c
children b8cef4b640a3
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
104
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
5 import fj.data.List;
141
3071b1a471fd add getKeys
one
parents: 140
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 132
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager;
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
13
100
9a7b7af838e0 add index TreeNodeEditor
one
parents: 99
diff changeset
14 public class InterfaceTraverser {
124
75ba2f2d6ea3 searchQueryTest add index
one
parents: 122
diff changeset
15
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
16 TreeNode node;
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
17 Index index;
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
18 ParentIndex parentIndex;
20af7f25ef32 miner change
one
parents: 152
diff changeset
19 boolean parentUpdateFlag;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
20 IndexManager indexManager;
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
21 boolean indexFlag;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
22
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
23 public InterfaceTraverser(TreeNode _root, Index index, ParentIndex parentIndex, IndexManager indexManager,
20af7f25ef32 miner change
one
parents: 152
diff changeset
24 boolean indexFlag) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
25 this.node = _root;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
26 this.index = index;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
27 this.indexManager = indexManager;
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
28 this.parentIndex = parentIndex;
20af7f25ef32 miner change
one
parents: 152
diff changeset
29 if (parentIndex.isEmpty())
20af7f25ef32 miner change
one
parents: 152
diff changeset
30 parentUpdateFlag = true;
20af7f25ef32 miner change
one
parents: 152
diff changeset
31 else
20af7f25ef32 miner change
one
parents: 152
diff changeset
32 parentUpdateFlag = false;
20af7f25ef32 miner change
one
parents: 152
diff changeset
33 this.indexFlag = indexFlag;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
34 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
35
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
36 public Index getIndex() {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
37 return index;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
38 }
127
b2c1fd513feb push index thread add read log
one
parents: 126
diff changeset
39
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
40 public void commit() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
41 parentUpdateFlag = false;
20af7f25ef32 miner change
one
parents: 152
diff changeset
42 indexManager.commit(index, parentIndex);
20af7f25ef32 miner change
one
parents: 152
diff changeset
43 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
44
20af7f25ef32 miner change
one
parents: 152
diff changeset
45 public ParentIndex getParentIndex() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
46 return parentIndex;
20af7f25ef32 miner change
one
parents: 152
diff changeset
47 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
48
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
49 public void setIndex(Index index) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
50 this.index = index;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
51 }
127
b2c1fd513feb push index thread add read log
one
parents: 126
diff changeset
52
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
53 public Iterator<TreeNode> emptyQuery() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
54
20af7f25ef32 miner change
one
parents: 152
diff changeset
55 final PathNodeIterator itNode = new PathNodeIterator(node);
20af7f25ef32 miner change
one
parents: 152
diff changeset
56 return new Iterator<TreeNode>() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
57
20af7f25ef32 miner change
one
parents: 152
diff changeset
58 private TreeNode matchNode = nextmatch(itNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
59
20af7f25ef32 miner change
one
parents: 152
diff changeset
60 private TreeNode nextmatch(PathNodeIterator itNode) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
61
20af7f25ef32 miner change
one
parents: 152
diff changeset
62 for (; itNode.hasNext();) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
63 TreeNode targetNode = itNode.next();
20af7f25ef32 miner change
one
parents: 152
diff changeset
64 List<String> keys = targetNode.getAttributes().getKeys();
20af7f25ef32 miner change
one
parents: 152
diff changeset
65 for (String key : keys) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
66 String value = targetNode.getAttributes().getString(key);
20af7f25ef32 miner change
one
parents: 152
diff changeset
67 if (value != null)
20af7f25ef32 miner change
one
parents: 152
diff changeset
68 index = index.set(key, value, targetNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
69 if (parentUpdateFlag)
20af7f25ef32 miner change
one
parents: 152
diff changeset
70 parentIndex = parentIndex.set(targetNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
71 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
72 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
73 commit();
20af7f25ef32 miner change
one
parents: 152
diff changeset
74 return null;
20af7f25ef32 miner change
one
parents: 152
diff changeset
75 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
76
20af7f25ef32 miner change
one
parents: 152
diff changeset
77 @Override
20af7f25ef32 miner change
one
parents: 152
diff changeset
78 public boolean hasNext() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
79 if (matchNode == null) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
80 return false;
20af7f25ef32 miner change
one
parents: 152
diff changeset
81 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
82 return true;
20af7f25ef32 miner change
one
parents: 152
diff changeset
83 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
84
20af7f25ef32 miner change
one
parents: 152
diff changeset
85 @Override
20af7f25ef32 miner change
one
parents: 152
diff changeset
86 public TreeNode next() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
87 TreeNode currentPair = matchNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
88 matchNode = nextmatch(itNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
89 return currentPair;
20af7f25ef32 miner change
one
parents: 152
diff changeset
90 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
91
20af7f25ef32 miner change
one
parents: 152
diff changeset
92 @Override
20af7f25ef32 miner change
one
parents: 152
diff changeset
93 public void remove() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
94 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
95
20af7f25ef32 miner change
one
parents: 152
diff changeset
96 };
20af7f25ef32 miner change
one
parents: 152
diff changeset
97
20af7f25ef32 miner change
one
parents: 152
diff changeset
98 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
99
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
100 /**
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
101 * subTree以下のNodeに対してKey,Valueのペアでindexを使って探索を行う
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
102 *
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
103 * @param query
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
104 * @param subTree
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
105 * @param key
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
106 * @param searchValue
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
107 * @return
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
108 */
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
109 public Iterator<TreeNode> findInSubTree(Query query, TreeNode subTree, String key, String searchValue) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
110 /*
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
111 * indexを使って取ってきたNodeのPathと、subTreeのPathを先頭から1つずつ比較し、
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
112 * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
113 */
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
114 List<TreeNode> nodeList = index.get(key, searchValue);
20af7f25ef32 miner change
one
parents: 152
diff changeset
115 if (nodeList != null) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
116
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
117 if (nodeList.isEmpty())
20af7f25ef32 miner change
one
parents: 152
diff changeset
118 return new NulIterator<TreeNode>();// 空のIteratorを返す
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
119
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
120 // ここでNode以下にあるか調べる
20af7f25ef32 miner change
one
parents: 152
diff changeset
121 List<TreeNode> filteredList = List.nil();
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
122
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
123 for (TreeNode targetNode : nodeList) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
124 TreeNode parent = targetNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
125 while (parent != null) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
126 parent = parentIndex.get(parent);
20af7f25ef32 miner change
one
parents: 152
diff changeset
127 if (parent.equals(subTree))
20af7f25ef32 miner change
one
parents: 152
diff changeset
128 filteredList = filteredList.cons(targetNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
129 }
141
3071b1a471fd add getKeys
one
parents: 140
diff changeset
130 }
3071b1a471fd add getKeys
one
parents: 140
diff changeset
131
3071b1a471fd add getKeys
one
parents: 140
diff changeset
132 return filteredList.iterator();
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
133
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
134 } else {
141
3071b1a471fd add getKeys
one
parents: 140
diff changeset
135 final PathNodeIterator itNode = new PathNodeIterator(subTree);
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
136 return new Iterator<TreeNode>() {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
137
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
138 private TreeNode matchNode = nextmatch(itNode);
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
139
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
140 private TreeNode nextmatch(PathNodeIterator itNode) {
127
b2c1fd513feb push index thread add read log
one
parents: 126
diff changeset
141
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
142 for (; itNode.hasNext();) {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
143 TreeNode targetNode = itNode.next();
20af7f25ef32 miner change
one
parents: 152
diff changeset
144 if (query.condition(targetNode))
20af7f25ef32 miner change
one
parents: 152
diff changeset
145 return targetNode;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
146 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
147 return null;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
148 }
125
a0c4a4b8ad10 index test
one
parents: 124
diff changeset
149
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
150 @Override
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
151 public boolean hasNext() {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
152 if (matchNode == null) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
153 return false;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
154 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
155 return true;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
156 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
157
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
158 @Override
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
159 public TreeNode next() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
160 TreeNode currentNode = matchNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
161 matchNode = nextmatch(itNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
162 return currentNode;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
163 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
164
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
165 @Override
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
166 public void remove() {
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
167 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
168
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
169 };
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
170 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
171 }
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
172
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
173 /**
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
174 * subTree以下のNodeに対してKeyに対応する値をindexを使って探索する
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
175 *
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
176 * @param query
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
177 * @param subTree
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
178 * @param key
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
179 * @param searchValue
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
180 * @return
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
181 */
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
182 public Iterator<TreeNode> findInSubTreeAllValue(Query query, TreeNode subTree, String key) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
183 /*
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
184 * indexからinnerIndexを取得 取得したinnerIndexが保有するKeyを取得
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
185 * そのKeyを保有するNodeとNodeのPathを取得する
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
186 * indexを使って取ってきたNodeのPathと、subTreeのPathを先頭から1つずつ比較し、
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
187 * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
188 */
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
189 Iterator<TreeNode> NodeIterator = index.getAll(key);
20af7f25ef32 miner change
one
parents: 152
diff changeset
190 if (NodeIterator != null) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
191 List<TreeNode> filteredList = List.nil();
20af7f25ef32 miner change
one
parents: 152
diff changeset
192 for (; NodeIterator.hasNext();) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
193 TreeNode targetNode = NodeIterator.next();
20af7f25ef32 miner change
one
parents: 152
diff changeset
194 TreeNode parent = targetNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
195 while (parent != null) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
196 parent = parentIndex.get(parent);
20af7f25ef32 miner change
one
parents: 152
diff changeset
197 if (parent.equals(subTree))
20af7f25ef32 miner change
one
parents: 152
diff changeset
198 filteredList = filteredList.cons(targetNode);
143
afbe19c98f53 change Index form TreeMap<String,TreeMap<String<List<Pair<TreeNode,NodePath>>>> → TreeMap<String,TreeMap<String<List<NodePath>>>
one
parents: 141
diff changeset
199 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
200 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
201 return filteredList.iterator();
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
202
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
203 } else {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
204
141
3071b1a471fd add getKeys
one
parents: 140
diff changeset
205 final PathNodeIterator itNode = new PathNodeIterator(subTree);
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
206 return new Iterator<TreeNode>() {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
207
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
208 private TreeNode matchPair = nextmatch(itNode);
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
209
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
210 private TreeNode nextmatch(PathNodeIterator itNode) {
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
211
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
212 for (; itNode.hasNext();) {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
213 TreeNode targetNode = itNode.next();
20af7f25ef32 miner change
one
parents: 152
diff changeset
214 if (query.condition(targetNode))
20af7f25ef32 miner change
one
parents: 152
diff changeset
215 return targetNode;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
216 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
217 return null;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
218 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
219
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
220 @Override
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
221 public boolean hasNext() {
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
222 if (matchPair == null) {
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
223 return false;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
224 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
225 return true;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
226 }
124
75ba2f2d6ea3 searchQueryTest add index
one
parents: 122
diff changeset
227
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
228 @Override
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
229 public TreeNode next() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
230 TreeNode currentNode = matchPair;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
231 matchPair = nextmatch(itNode);
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
232 return currentNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
233 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
234
20af7f25ef32 miner change
one
parents: 152
diff changeset
235 @Override
20af7f25ef32 miner change
one
parents: 152
diff changeset
236 public void remove() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
237 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
238
20af7f25ef32 miner change
one
parents: 152
diff changeset
239 };
20af7f25ef32 miner change
one
parents: 152
diff changeset
240 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
241 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
242
20af7f25ef32 miner change
one
parents: 152
diff changeset
243 public Iterator<TreeNode> find(Query query, String key, String searchValue) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
244
20af7f25ef32 miner change
one
parents: 152
diff changeset
245 List<TreeNode> nodeList = index.get(key, searchValue);
20af7f25ef32 miner change
one
parents: 152
diff changeset
246 if (nodeList != null) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
247 return nodeList.iterator();
20af7f25ef32 miner change
one
parents: 152
diff changeset
248 } else {
20af7f25ef32 miner change
one
parents: 152
diff changeset
249
20af7f25ef32 miner change
one
parents: 152
diff changeset
250 final PathNodeIterator itNode = new PathNodeIterator(node);
20af7f25ef32 miner change
one
parents: 152
diff changeset
251 return new Iterator<TreeNode>() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
252
20af7f25ef32 miner change
one
parents: 152
diff changeset
253 private TreeNode matchNode = nextmatch(itNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
254
20af7f25ef32 miner change
one
parents: 152
diff changeset
255 private TreeNode nextmatch(PathNodeIterator itNode) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
256
20af7f25ef32 miner change
one
parents: 152
diff changeset
257 for (; itNode.hasNext();) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
258 TreeNode targetNode = itNode.next();
20af7f25ef32 miner change
one
parents: 152
diff changeset
259 String value = targetNode.getAttributes().getString(key);
20af7f25ef32 miner change
one
parents: 152
diff changeset
260 if (indexFlag) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
261 if (value != null)
20af7f25ef32 miner change
one
parents: 152
diff changeset
262 index = index.set(key, value, targetNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
263 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
264 if (parentUpdateFlag)
20af7f25ef32 miner change
one
parents: 152
diff changeset
265 parentIndex = parentIndex.set(targetNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
266 if (query.condition(targetNode))
20af7f25ef32 miner change
one
parents: 152
diff changeset
267 return targetNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
268 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
269 commit();
20af7f25ef32 miner change
one
parents: 152
diff changeset
270 return null;
20af7f25ef32 miner change
one
parents: 152
diff changeset
271 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
272
20af7f25ef32 miner change
one
parents: 152
diff changeset
273 @Override
20af7f25ef32 miner change
one
parents: 152
diff changeset
274 public boolean hasNext() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
275 if (matchNode == null) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
276 return false;
20af7f25ef32 miner change
one
parents: 152
diff changeset
277 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
278 return true;
20af7f25ef32 miner change
one
parents: 152
diff changeset
279 }
20af7f25ef32 miner change
one
parents: 152
diff changeset
280
20af7f25ef32 miner change
one
parents: 152
diff changeset
281 @Override
20af7f25ef32 miner change
one
parents: 152
diff changeset
282 public TreeNode next() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
283 TreeNode currentPair = matchNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
284 matchNode = nextmatch(itNode);
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
285 return currentPair;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
286 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
287
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
288 @Override
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
289 public void remove() {
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
290 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
291
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
292 };
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
293 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
294 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
295
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
296 public Iterator<TreeNode> findAll(Query query, String key) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
297
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
298 Iterator<TreeNode> nodeList = index.getAll(key);
20af7f25ef32 miner change
one
parents: 152
diff changeset
299 if (nodeList != null) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
300
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
301 return nodeList;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
302
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
303 } else {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
304
20af7f25ef32 miner change
one
parents: 152
diff changeset
305 final PathNodeIterator itNode = new PathNodeIterator(node);
20af7f25ef32 miner change
one
parents: 152
diff changeset
306 return new Iterator<TreeNode>() {
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
307
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
308 private TreeNode matchNode = nextmatch(itNode);
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
309
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
310 private TreeNode nextmatch(PathNodeIterator itNode) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
311
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
312 for (; itNode.hasNext();) {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
313 TreeNode targetNode = itNode.next();
20af7f25ef32 miner change
one
parents: 152
diff changeset
314 String value = targetNode.getAttributes().getString(key);
20af7f25ef32 miner change
one
parents: 152
diff changeset
315 if (indexFlag) {
20af7f25ef32 miner change
one
parents: 152
diff changeset
316 if (value != null)
20af7f25ef32 miner change
one
parents: 152
diff changeset
317 index = index.set(key, value, targetNode);
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
318 }
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
319 if (parentUpdateFlag)
20af7f25ef32 miner change
one
parents: 152
diff changeset
320 parentIndex = parentIndex.set(targetNode);
20af7f25ef32 miner change
one
parents: 152
diff changeset
321 if (query.condition(targetNode))
20af7f25ef32 miner change
one
parents: 152
diff changeset
322 return targetNode;
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
323 }
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
324 commit();
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
325 return null;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
326 }
136
0f68cd7b2838 add Node Search
one
parents: 134
diff changeset
327
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
328 @Override
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
329 public boolean hasNext() {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
330 if (matchNode == null) {
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
331 return false;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
332 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
333 return true;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
334 }
136
0f68cd7b2838 add Node Search
one
parents: 134
diff changeset
335
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
336 @Override
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
337 public TreeNode next() {
20af7f25ef32 miner change
one
parents: 152
diff changeset
338 TreeNode currentPair = matchNode;
20af7f25ef32 miner change
one
parents: 152
diff changeset
339 matchNode = nextmatch(itNode);
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
340 return currentPair;
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
341 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
342
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
343 @Override
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
344 public void remove() {
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
345 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
346
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
347 };
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
348 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
349 }
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
350 }