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

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