Mercurial > hg > Members > tatsuki > JungleXMLReader
comparison src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 9:28f383f677ff
add competentRoledTest and method
author | one |
---|---|
date | Sat, 25 Oct 2014 10:43:20 +0900 |
parents | 378bfec11a8d |
children | ccb74917f06a |
comparison
equal
deleted
inserted
replaced
8:378bfec11a8d | 9:28f383f677ff |
---|---|
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; | 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; |
14 | 16 |
15 public class JuGrix { | 17 public class JuGrix { |
16 | 18 |
17 JungleTree personTree; | 19 JungleTree personTree; |
129 return false; | 131 return false; |
130 } | 132 } |
131 ,"id",id); | 133 ,"id",id); |
132 | 134 |
133 List<String> ids = List.nil(); | 135 List<String> ids = List.nil(); |
136 | |
134 for (;searchTargetIterator.hasNext();) { | 137 for (;searchTargetIterator.hasNext();) { |
135 | 138 |
136 Pair<TreeNode, NodePath> searchTargetPair = searchTargetIterator.next(); | 139 Pair<TreeNode, NodePath> searchTargetPair = searchTargetIterator.next(); |
137 Iterator<Pair<TreeNode,NodePath>> pairIdIterator = ifTraverser.find( | 140 Iterator<Pair<TreeNode,NodePath>> pairIdIterator = ifTraverser.find( |
138 (TreeNode node) -> { | 141 (TreeNode node) -> { |
186 return true; | 189 return true; |
187 return false; | 190 return false; |
188 } | 191 } |
189 ,"element","Person"); | 192 ,"element","Person"); |
190 | 193 |
191 return null; | 194 if (!pairPersonIterator.hasNext()) |
192 } | 195 return new NullIterator(); |
193 | 196 TreeNode person = pairPersonIterator.next().left(); |
194 | 197 |
198 Iterator<Pair<TreeNode,NodePath>> targetPairIterator = ifTraverser.find( | |
199 (TreeNode node) -> { | |
200 String nodeElement = node.getAttributes().getString("element"); | |
201 if (nodeElement == null) | |
202 return false; | |
203 if (!nodeElement.equals("priority")) | |
204 return false; | |
205 String priority = node.getAttributes().getString("text"); | |
206 if (priority == null) | |
207 return false; | |
208 if (priority.equals("0")) | |
209 return true; | |
210 return false; | |
211 } | |
212 ,person); | |
213 | |
214 | |
215 List<String> idList = List.nil(); | |
216 for (;targetPairIterator.hasNext();) { | |
217 NodePath searchPath = targetPairIterator.next().right(); | |
218 Pair<Integer, NodePath> searchPair = searchPath.last(); | |
219 NodePath targetPath = searchPair.right().add(searchPair.left() + 1); | |
220 TreeNode targetNode = getTarget(person, targetPath); | |
221 String id = targetNode.getAttributes().getString("text"); | |
222 idList = idList.cons(id); | |
223 } | |
224 | |
225 return idList.iterator(); | |
226 } | |
227 | |
228 public TreeNode getTarget(TreeNode node , NodePath path){ | |
229 TreeNode target; | |
230 Pair<Integer, NodePath> pathNode = path.pop(); | |
231 int num = pathNode.left(); | |
232 NodePath newPath = pathNode.right(); | |
233 if (num == -1 && newPath.size() != 0) | |
234 return getTarget(node, newPath); | |
235 | |
236 Either<Error, TreeNode> either = node.getChildren().at(num); | |
237 if (either.isA()) | |
238 return node; | |
239 | |
240 TreeNode child = either.b(); | |
241 if (pathNode.right().size() == 0) | |
242 return child; | |
243 | |
244 target = getTarget(child,pathNode.right()); | |
245 return target; | |
246 } | |
247 class NullIterator implements Iterator<String>{ | |
248 | |
249 @Override | |
250 public boolean hasNext() { | |
251 return false; | |
252 } | |
253 | |
254 @Override | |
255 public String next() { | |
256 return null; | |
257 } | |
258 | |
259 } | |
195 } | 260 } |