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 }