comparison src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 28:ed831b2fc156

temporarily stored
author one
date Fri, 07 Nov 2014 02:20:07 +0900
parents ef3fae2e7f0c
children 626e56f749a9
comparison
equal deleted inserted replaced
27:095813055f19 28:ed831b2fc156
3 import java.util.Iterator; 3 import java.util.Iterator;
4 import java.util.LinkedList; 4 import java.util.LinkedList;
5 import java.util.regex.Matcher; 5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern; 6 import java.util.regex.Pattern;
7 7
8 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.loadXml;
8 import fj.Ord; 9 import fj.Ord;
9 import fj.P2; 10 import fj.P2;
10 import fj.data.TreeMap; 11 import fj.data.TreeMap;
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
21 JungleTree personTree; 22 JungleTree personTree;
22 JungleTree organizationTree; 23 JungleTree organizationTree;
23 JungleTree roleTree; 24 JungleTree roleTree;
24 JungleTree rdeTree; 25 JungleTree rdeTree;
25 26
26 public JuGrix() { 27 public JuGrix(boolean index) {
28
27 try { 29 try {
28 loadXml reader = new loadXml(); 30 loadXml reader = new loadXml();
29 personTree = reader.loadTestDataCreateIndex("Person.xml"); 31
30 organizationTree = reader.loadTestDataCreateIndex("Organization.xml"); 32 if (index == true) {
31 roleTree = reader.loadTestDataCreateIndex("Role.xml"); 33 personTree = reader.loadTestDataCreateIndex("Person.xml");
32 rdeTree = reader.loadTestDataCreateIndex("RoleDescriptionElement.xml"); 34 organizationTree = reader.loadTestDataCreateIndex("Organization.xml");
35 roleTree = reader.loadTestDataCreateIndex("Role.xml");
36 rdeTree = reader.loadTestDataCreateIndex("RoleDescriptionElement.xml");
37 } else {
38 personTree = reader.loadTestData("Person.xml");
39 organizationTree = reader.loadTestData("Organization.xml");
40 roleTree = reader.loadTestData("Role.xml");
41 rdeTree = reader.loadTestData("RoleDescriptionElement.xml");
42 }
43
33 } catch (Exception e) { 44 } catch (Exception e) {
34 e.printStackTrace(); 45 e.printStackTrace();
35 } 46 }
36 } 47 }
37 48
109 } 120 }
110 121
111 public boolean filter(String orgId, LinkedList<String> roleIds) { 122 public boolean filter(String orgId, LinkedList<String> roleIds) {
112 if (roleIds == null) 123 if (roleIds == null)
113 return true; 124 return true;
125
126 if (roleIds.isEmpty())
127 return true;
114 128
115 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 129 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
116 130
117 Iterator<Pair<TreeNode, NodePath>> orgNodeIterator = orgTraverser.find((TreeNode node) -> { 131 Iterator<Pair<TreeNode, NodePath>> orgNodeIterator = orgTraverser.find((TreeNode node) -> {
118 String personId = node.getAttributes().getString("element"); 132 String personId = node.getAttributes().getString("element");
129 }, "id", orgId); 143 }, "id", orgId);
130 144
131 if (!orgNodeIterator.hasNext()) 145 if (!orgNodeIterator.hasNext())
132 return false; 146 return false;
133 147
134 Pair<TreeNode, NodePath> searchNode = orgNodeIterator.next(); 148 Pair<TreeNode, NodePath> searchNodePair = orgNodeIterator.next();
135 149
136 for (String id : roleIds) { 150 for (String id : roleIds) {
137 Pattern personPattern = Pattern.compile("r:"); 151 Pattern personPattern = Pattern.compile("r:");
138 Matcher personMacher = personPattern.matcher(id); 152 Matcher personMacher = personPattern.matcher(id);
139 if (personMacher.find()) { 153 if (personMacher.find()) {
140 if (!roleFilter(id, searchNode)) 154 if (roleFilter(id, searchNodePair))
141 return false; 155 return false;
142 } 156 }
143 157
144 Pattern organizationPattern = Pattern.compile("rde:"); 158 Pattern organizationPattern = Pattern.compile("rde:");
145 Matcher organizationMacher = organizationPattern.matcher(id); 159 Matcher organizationMacher = organizationPattern.matcher(id);
146 if (organizationMacher.find()) { 160 if (organizationMacher.find()) {
147 if (!rdeFilter(id, searchNode)) 161 if (!rdeFilter(id, searchNodePair))
148 return false; 162 return false;
149 } 163 }
150 } 164 }
151 return true; 165 return true;
152 } 166 }
153 167
154 private boolean rdeFilter(String id, Pair<TreeNode, NodePath> targetNode) { 168 private boolean rdeFilter(String id, Pair<TreeNode, NodePath> searchNodePair) {
155 169
156 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 170 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
157 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTree((TreeNode node) -> { 171 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTree((TreeNode node) -> {
158 String element = node.getAttributes().getString("element"); 172 String element = node.getAttributes().getString("element");
159 if (element == null) 173 if (element == null)
162 return false; 176 return false;
163 String roleId = node.getAttributes().getString("text"); 177 String roleId = node.getAttributes().getString("text");
164 if (roleId != null) 178 if (roleId != null)
165 return true; 179 return true;
166 return false; 180 return false;
167 }, targetNode, "element", "roleRefId"); 181 }, searchNodePair, "element", "roleRefId");
168 182
169 TreeMap<String, String> idMap = TreeMap.empty(Ord.stringOrd); 183 TreeMap<String, String> idMap = TreeMap.empty(Ord.stringOrd);
170 for (; pairIdIterator.hasNext();) { 184 for (; pairIdIterator.hasNext();) {
171 String roleId = pairIdIterator.next().left().getAttributes().getString("text"); 185 String roleId = pairIdIterator.next().left().getAttributes().getString("text");
172 idMap = idMap.set(roleId, roleId); 186 idMap = idMap.set(roleId, roleId);
175 Iterator<P2<String, String>> ids = idMap.iterator(); 189 Iterator<P2<String, String>> ids = idMap.iterator();
176 InterfaceTraverser roleTraverser = roleTree.getTraverser(); 190 InterfaceTraverser roleTraverser = roleTree.getTraverser();
177 191
178 for (; ids.hasNext();) { 192 for (; ids.hasNext();) {
179 String roleId = ids.next()._1(); 193 String roleId = ids.next()._1();
180
181 Iterator<Pair<TreeNode, NodePath>> roleNodeIterator = roleTraverser.find((TreeNode node) -> { 194 Iterator<Pair<TreeNode, NodePath>> roleNodeIterator = roleTraverser.find((TreeNode node) -> {
182 String element = node.getAttributes().getString("element"); 195 String element = node.getAttributes().getString("element");
183 if (element == null) 196 if (element == null)
184 return false; 197 return false;
185 if (!element.equals("Role")) 198 if (!element.equals("Role"))
189 return false; 202 return false;
190 if (compareRoleId.equals(roleId)) 203 if (compareRoleId.equals(roleId))
191 return true; 204 return true;
192 return false; 205 return false;
193 }, "id", roleId); 206 }, "id", roleId);
194
195 // -----------------------------------------bug------------------------------------------ 207 // -----------------------------------------bug------------------------------------------
196 for (; roleNodeIterator.hasNext();) { 208 for (; roleNodeIterator.hasNext();) {
209 Pair<TreeNode, NodePath> rolePair = roleNodeIterator.next();
197 Iterator<Pair<TreeNode, NodePath>> rdeNodeIterator = roleTraverser.findInSubTree((TreeNode node) -> { 210 Iterator<Pair<TreeNode, NodePath>> rdeNodeIterator = roleTraverser.findInSubTree((TreeNode node) -> {
198 String elementName = node.getAttributes().getString("element"); 211 String elementName = node.getAttributes().getString("element");
199 if (elementName == null) 212 if (elementName == null)
200 return false; 213 return false;
201 if (!elementName.equals("roleDescriptionElementRefIds")) 214 if (!elementName.equals("roleDescriptionElementRefIds"))
206 Pattern personPattern = Pattern.compile(id); 219 Pattern personPattern = Pattern.compile(id);
207 Matcher personMacher = personPattern.matcher(rdeId); 220 Matcher personMacher = personPattern.matcher(rdeId);
208 if (personMacher.find()) 221 if (personMacher.find())
209 return true; 222 return true;
210 return false; 223 return false;
211 }, roleNodeIterator.next(), "text", "id"); 224 }, rolePair, "text", "id");
212 225
213 if (!rdeNodeIterator.hasNext()) 226 if (!rdeNodeIterator.hasNext())
214 return false; 227 return false;
215 } 228 }
216 229
217 } 230 }
218 return true; 231 return true;
219 } 232 }
220 233
221 public boolean roleFilter(String id, Pair<TreeNode, NodePath> orgPathNodePair) { 234 public boolean roleFilter(String id, Pair<TreeNode, NodePath> searchNodePair) {
235 //System.out.println(searchNodePair.getAttributes().getString("id"));
222 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 236 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
223 237
224 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTree((TreeNode node) -> { 238 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTree((TreeNode node) -> {
225 String elementName = node.getAttributes().getString("element"); 239 String elementName = node.getAttributes().getString("element");
226 if (elementName == null) 240 if (elementName == null)
231 if (roleId == null) 245 if (roleId == null)
232 return false; 246 return false;
233 if (roleId.equals(id)) 247 if (roleId.equals(id))
234 return true; 248 return true;
235 return false; 249 return false;
236 }, orgPathNodePair, "text", id); 250 }, searchNodePair, "text", id);
237 251
238 if (pairIdIterator.hasNext()) { 252 if (pairIdIterator.hasNext()) {
239 System.out.println(pairIdIterator.next().left().getAttributes().getString("text")); 253 System.out.println(pairIdIterator.next().left().getAttributes().getString("text"));
240 return true; 254 return false;
241 } 255 }
242 return false; 256 return true;
243 } 257 }
244 258
245 public Iterator<String> roleIds(String id) { 259 public Iterator<String> roleIds(String id) {
246 Pattern personPattern = Pattern.compile("p:"); 260 Pattern personPattern = Pattern.compile("p:");
247 Matcher personMacher = personPattern.matcher(id); 261 Matcher personMacher = personPattern.matcher(id);
290 if (nodeId != null) 304 if (nodeId != null)
291 return true; 305 return true;
292 return false; 306 return false;
293 }, searchTargetPair, "element", "roleRefId"); 307 }, searchTargetPair, "element", "roleRefId");
294 308
295
296 for (; pairIdIterator.hasNext();) { 309 for (; pairIdIterator.hasNext();) {
297 Pair<TreeNode, NodePath> idNodePath = pairIdIterator.next(); 310 Pair<TreeNode, NodePath> idNodePath = pairIdIterator.next();
298 String attribute = idNodePath.left().getAttributes().getString("text"); 311 String attribute = idNodePath.left().getAttributes().getString("text");
299 312
300 Iterator<String> checkList = ids.iterator(); 313 Iterator<String> checkList = ids.iterator();
303 attribute = null; 316 attribute = null;
304 } 317 }
305 318
306 if (attribute != null) { 319 if (attribute != null) {
307 ids.add(attribute); 320 ids.add(attribute);
308 //System.out.println("-------------------------" + attribute + "-------------------------"); 321 System.out.println("-------------------------" + attribute + "-------------------------");
309 } 322 }
310 } 323 }
311 } 324 }
312 return ids.iterator(); 325 return ids.iterator();
313 } 326 }
314 327
315 public Iterator<String> competentRoleId(String personId) { 328 public Iterator<String> competentRoleId(String personId) {
316 329
317 InterfaceTraverser ifTraverser = personTree.getTraverser(); 330 InterfaceTraverser ifTraverser = personTree.getTraverser();
318 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = searchPerson(personId, ifTraverser); 331 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = ifTraverser.find((TreeNode node) -> {
332 String nodeElement = node.getAttributes().getString("element");
333 if (nodeElement == null)
334 return false;
335 if (!nodeElement.equals("Person"))
336 return false;
337 String nodeId = node.getAttributes().getString("Person-id");
338 if (nodeId == null)
339 return false;
340 if (nodeId.equals(personId))
341 return true;
342 return false;
343 }, "Person-id", personId);
319 344
320 if (!pairPersonIterator.hasNext()) 345 if (!pairPersonIterator.hasNext())
321 return new NullIterator(); 346 return new NullIterator();
322 Pair<TreeNode, NodePath> personPathNodePair = pairPersonIterator.next(); 347 Pair<TreeNode, NodePath> person = pairPersonIterator.next();
323 TreeNode person = personPathNodePair.left(); 348
324
325 Iterator<Pair<TreeNode, NodePath>> targetPairIterator = ifTraverser.findInSubTree((TreeNode node) -> { 349 Iterator<Pair<TreeNode, NodePath>> targetPairIterator = ifTraverser.findInSubTree((TreeNode node) -> {
326 String nodeElement = node.getAttributes().getString("element"); 350 String nodeElement = node.getAttributes().getString("element");
327 if (nodeElement == null) 351 if (nodeElement == null)
328 return false; 352 return false;
329 if (!nodeElement.equals("priority")) 353 if (!nodeElement.equals("priority"))
330 return false; 354 return false;
331 String priority = node.getAttributes().getString("text"); 355 String priority = node.getAttributes().getString("text-priority");
332 if (priority == null) 356 if (priority == null)
333 return false; 357 return false;
334 if (priority.equals("0")) 358 if (priority.equals("0"))
335 return true; 359 return true;
336 return false; 360 return false;
337 }, personPathNodePair, "text", "0"); 361 }, person, "text-priority", "0");
338 362
339 LinkedList<String> idList = new LinkedList<String>(); 363 LinkedList<String> idList = new LinkedList<String>();
340 for (; targetPairIterator.hasNext();) { 364 for (; targetPairIterator.hasNext();) {
341 NodePath searchPath = targetPairIterator.next().right(); 365 NodePath searchPath = targetPairIterator.next().right();
342 Pair<Integer, NodePath> searchPair = searchPath.last(); 366 Pair<Integer, NodePath> searchPair = searchPath.last();
343 NodePath targetPath = searchPair.right().add(searchPair.left() + 1); 367 NodePath targetPath = searchPair.right().add(searchPair.left() + 1);
344 TreeNode targetNode = getTarget(person, targetPath); 368 TreeNode targetNode = getTarget(personTree.getRootNode(), targetPath);
345 String id = targetNode.getAttributes().getString("text"); 369 // TreeNode targetNode = getTarget(person.left(), targetPath);
370 String id = targetNode.getAttributes().getString("text-roleRefId");
346 idList.add(id); 371 idList.add(id);
347 } 372 }
348 373
349 return idList.iterator(); 374 return idList.iterator();
350 } 375 }
354 InterfaceTraverser ifTraverser = personTree.getTraverser(); 379 InterfaceTraverser ifTraverser = personTree.getTraverser();
355 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = searchPerson(personId, ifTraverser); 380 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = searchPerson(personId, ifTraverser);
356 381
357 if (!pairPersonIterator.hasNext()) 382 if (!pairPersonIterator.hasNext())
358 return new NullIterator(); 383 return new NullIterator();
359 384 Pair<TreeNode, NodePath> person = pairPersonIterator.next();
360 Pair<TreeNode, NodePath> personNodePathPair = pairPersonIterator.next(); 385
361 TreeNode person = personNodePathPair.left();
362 Iterator<Pair<TreeNode, NodePath>> targetPairIterator = ifTraverser.findInSubTree((TreeNode node) -> { 386 Iterator<Pair<TreeNode, NodePath>> targetPairIterator = ifTraverser.findInSubTree((TreeNode node) -> {
363 String nodeElement = node.getAttributes().getString("element"); 387 String nodeElement = node.getAttributes().getString("element");
364 if (nodeElement == null) 388 if (nodeElement == null)
365 return false; 389 return false;
366 if (!nodeElement.equals("priority")) 390 if (!nodeElement.equals("priority"))
369 if (priority == null) 393 if (priority == null)
370 return false; 394 return false;
371 if (!priority.equals("0")) 395 if (!priority.equals("0"))
372 return true; 396 return true;
373 return false; 397 return false;
374 }, personNodePathPair, "text", "0"); 398 }, person, "text", "0");
375 399
376
377 LinkedList<String> idList = new LinkedList<String>(); 400 LinkedList<String> idList = new LinkedList<String>();
378 for (; targetPairIterator.hasNext();) { 401 for (; targetPairIterator.hasNext();) {
379 NodePath searchPath = targetPairIterator.next().right(); 402 NodePath searchPath = targetPairIterator.next().right();
380 Pair<Integer, NodePath> searchPair = searchPath.last(); 403 Pair<Integer, NodePath> searchPair = searchPath.last();
381 NodePath targetPath = searchPair.right().add(searchPair.left() + 1); 404 NodePath targetPath = searchPair.right().add(searchPair.left() + 1);
382 TreeNode targetNode = getTarget(person, targetPath); 405 TreeNode targetNode = getTarget(person.left(), targetPath);
383 String id = targetNode.getAttributes().getString("text"); 406 String id = targetNode.getAttributes().getString("text");
384 idList.add(id); 407 idList.add(id);
385 } 408 }
386 409
387 return idList.iterator(); 410 return idList.iterator();
388 } 411 }
389 412
390 private Iterator<Pair<TreeNode, NodePath>> searchPerson(String personId, InterfaceTraverser ifTraverser) {
391 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = ifTraverser.find((TreeNode node) -> {
392 String nodeElement = node.getAttributes().getString("element");
393 if (nodeElement == null)
394 return false;
395 if (!nodeElement.equals("Person"))
396 return false;
397 String nodeId = node.getAttributes().getString("id");
398 if (nodeId == null)
399 return false;
400 if (nodeId.equals(personId))
401 return true;
402 return false;
403 }, "element", "Person");
404 return pairPersonIterator;
405 }
406 413
407 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) { 414 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) {
408 415
409 Iterator<String> childrensIterator = deepChildOrganizationIds(orgId, new LinkedList<String>()); 416 Iterator<String> childrensIterator = deepChildOrganizationIds(orgId, new LinkedList<String>());
410 if (!childrensIterator.hasNext()) 417 if (!childrensIterator.hasNext())
448 455
449 return childrenList; 456 return childrenList;
450 } 457 }
451 458
452 public Iterator<String> childOrganizationIds(String orgId, LinkedList<String> filterIds) { 459 public Iterator<String> childOrganizationIds(String orgId, LinkedList<String> filterIds) {
453 if (!filter(orgId, filterIds)) 460
454 return new NullIterator();
455 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 461 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
462
456 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = orgTraverser.find((TreeNode node) -> { 463 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = orgTraverser.find((TreeNode node) -> {
457 String nodeElement = node.getAttributes().getString("element"); 464 String nodeElement = node.getAttributes().getString("element");
458 if (nodeElement == null) 465 if (nodeElement == null)
459 return false; 466 return false;
460 if (!nodeElement.equals("Organization")) 467 if (!nodeElement.equals("Organization"))
461 return false; 468 return false;
462 String nodeId = node.getAttributes().getString("id"); 469 String nodeId = node.getAttributes().getString("Organization-id");
463 if (nodeId == null) 470 if (nodeId == null)
464 return false; 471 return false;
465 if (nodeId.equals(orgId)) 472 if (nodeId.equals(orgId))
466 return true; 473 return true;
467 return false; 474 return false;
468 }, "id", orgId); 475 }, "Organization-id", orgId);
469 476
470 if (!pairPersonIterator.hasNext()) 477 if (!pairPersonIterator.hasNext())
471 return new NullIterator(); 478 return new NullIterator();
472 Pair<TreeNode, NodePath> personPathNodePair = pairPersonIterator.next(); 479
480 Pair<TreeNode, NodePath> person = pairPersonIterator.next();
473 481
474 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdsIterator = orgTraverser.findInSubTree((TreeNode node) -> { 482 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdsIterator = orgTraverser.findInSubTree((TreeNode node) -> {
475 String nodeElement = node.getAttributes().getString("element"); 483 String nodeElement = node.getAttributes().getString("element");
476 if (nodeElement == null) 484 if (nodeElement == null)
477 return false; 485 return false;
478 if (nodeElement.equals("childOrganizations")) 486 if (nodeElement.equals("childOrganizations"))
479 return true; 487 return true;
480 return false; 488 return false;
481 }, personPathNodePair, "element", "childOrganizations"); 489 }, person, "element", "childOrganizations");
482 490
483 if (!chilrenOrgIdsIterator.hasNext()) 491 if (!chilrenOrgIdsIterator.hasNext())
484 return new NullIterator(); 492 return new NullIterator();
485 493
486 Pair<TreeNode, NodePath> chilerenOrgIdsPathNodePair = chilrenOrgIdsIterator.next(); 494 Pair<TreeNode, NodePath> chilerenOrgIds = chilrenOrgIdsIterator.next();
487 495
488 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> { 496 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdIterator = orgTraverser.findInSubTree((TreeNode node) -> {
489 String nodeElement = node.getAttributes().getString("element"); 497 String nodeElement = node.getAttributes().getString("element");
490 if (nodeElement == null) 498 if (nodeElement == null)
491 return false; 499 return false;
492 if (!nodeElement.equals("organizationRefIds")) 500 if (!nodeElement.equals("organizationRefIds"))
493 return false; 501 return false;
494 nodeElement = node.getAttributes().getString("text"); 502 nodeElement = node.getAttributes().getString("text-organizationRefIds");
495 if (nodeElement != null) 503 if (nodeElement != null)
496 return true; 504 return true;
497 return false; 505 return false;
498 }, chilerenOrgIdsPathNodePair, "text"); 506 }, chilerenOrgIds, "text-organizationRefIds", null);
499 507
500 LinkedList<String> ids = new LinkedList<String>(); 508 LinkedList<String> ids = new LinkedList<String>();
501 509
502 for (; chilrenOrgIdIterator.hasNext();) { 510 for (; chilrenOrgIdIterator.hasNext();) {
503 Pair<TreeNode, NodePath> aaa = chilrenOrgIdIterator.next(); 511 String childrenOrgId = chilrenOrgIdIterator.next().left().getAttributes().getString("text-organizationRefIds");
504 String path = aaa.right().toString(); 512 if (filter(childrenOrgId, filterIds))
505 String id = aaa.left().getAttributes().getString("text"); 513 ids.add(childrenOrgId);
506 ids.add(id); 514
507 } 515 }
508 516
509 return ids.iterator(); 517 return ids.iterator();
510 } 518 }
511 519
542 } 550 }
543 551
544 } 552 }
545 553
546 public String rolePriority(String personId, String roleId) { 554 public String rolePriority(String personId, String roleId) {
547
548 InterfaceTraverser personTraverser = personTree.getTraverser(); 555 InterfaceTraverser personTraverser = personTree.getTraverser();
549 Iterator<Pair<TreeNode, NodePath>> personIterator = personTraverser.find((TreeNode node) -> { 556 Iterator<Pair<TreeNode, NodePath>> personIterator = personTraverser.find((TreeNode node) -> {
550 String element = node.getAttributes().getString("element"); 557 String element = node.getAttributes().getString("element");
551 if (element == null) 558 if (element == null)
552 return false; 559 return false;
561 }, "id", personId); 568 }, "id", personId);
562 569
563 if (!personIterator.hasNext()) 570 if (!personIterator.hasNext())
564 return ""; 571 return "";
565 572
566 Pair<TreeNode, NodePath> targetPersonPathNodePair = personIterator.next(); 573 Pair<TreeNode, NodePath> targetNode = personIterator.next();
567 TreeNode targetPersonNode = targetPersonPathNodePair.left(); 574
568
569 Iterator<Pair<TreeNode, NodePath>> priorityIterator = personTraverser.findInSubTree((TreeNode node) -> { 575 Iterator<Pair<TreeNode, NodePath>> priorityIterator = personTraverser.findInSubTree((TreeNode node) -> {
570 String element = node.getAttributes().getString("element"); 576 String element = node.getAttributes().getString("element");
571 if (element == null) 577 if (element == null)
572 return false; 578 return false;
573 if (!element.equals("roleRefId")) 579 if (!element.equals("roleRefId"))
576 if (compareRoleId == null) 582 if (compareRoleId == null)
577 return false; 583 return false;
578 if (compareRoleId.equals(roleId)) 584 if (compareRoleId.equals(roleId))
579 return true; 585 return true;
580 return false; 586 return false;
581 }, targetPersonPathNodePair, "element", "roleRefId"); 587 }, targetNode, "element", "roleRefId");
582 588
583 for (; priorityIterator.hasNext();) { 589 for (; priorityIterator.hasNext();) {
584 Pair<TreeNode, NodePath> priorityPair = priorityIterator.next(); 590 Pair<TreeNode, NodePath> priorityPair = priorityIterator.next();
585 NodePath roleNodePath = priorityPair.right(); 591 NodePath roleNodePath = priorityPair.right();
586 Pair<Integer, NodePath> last = roleNodePath.last(); 592 Pair<Integer, NodePath> last = roleNodePath.last();
587 NodePath priorityNodePath = last.right().add(last.left() - 1); 593 NodePath priorityNodePath = last.right().add(last.left() - 1);
588 TreeNode priorityNode = getTarget(targetPersonNode, priorityNodePath); 594 TreeNode priorityNode = getTarget(targetNode.left(), priorityNodePath);
589 if (priorityNode.getAttributes().getString("element").equals("priority")) 595 if (priorityNode.getAttributes().getString("element").equals("priority"))
590 return priorityNode.getAttributes().getString("text"); 596 return priorityNode.getAttributes().getString("text");
591 } 597 }
592 return ""; 598 return "";
593 } 599 }
614 }, "element", "Organization"); 620 }, "element", "Organization");
615 621
616 if (!orgIterator.hasNext()) 622 if (!orgIterator.hasNext())
617 return new LinkedList<String>(); 623 return new LinkedList<String>();
618 624
625 Pair<TreeNode, NodePath> orgNode = orgIterator.next();
626
619 Iterator<Pair<TreeNode, NodePath>> parentOrgIterator = orgTraverser.findInSubTree((TreeNode node) -> { 627 Iterator<Pair<TreeNode, NodePath>> parentOrgIterator = orgTraverser.findInSubTree((TreeNode node) -> {
620 String element = node.getAttributes().getString("element"); 628 String element = node.getAttributes().getString("element");
621 if (element == null) 629 if (element == null)
622 return false; 630 return false;
623 if (element.equals("parentOrganizations")) 631 if (element.equals("parentOrganizations"))
624 return true; 632 return true;
625 return false; 633 return false;
626 }, orgIterator.next(), "element", "parentOrganizations"); 634 }, orgNode, "element", "parentOrganizations");
627 635
628 LinkedList<String> parentIds = new LinkedList<String>(); 636 LinkedList<String> parentIds = new LinkedList<String>();
629 637
630 for (; parentOrgIterator.hasNext();) { 638 for (; parentOrgIterator.hasNext();) {
631 Pair<TreeNode, NodePath> parentOrgPathNodePair = parentOrgIterator.next(); 639 Pair<TreeNode, NodePath> parentOrgNode = parentOrgIterator.next();
632 640
633 Iterator<Pair<TreeNode, NodePath>> parentNodeIterator = orgTraverser.findInSubTree((TreeNode node) -> { 641 Iterator<Pair<TreeNode, NodePath>> parentNodeIterator = orgTraverser.findInSubTree((TreeNode node) -> {
634 String element = node.getAttributes().getString("element"); 642 String element = node.getAttributes().getString("element");
635 if (element == null) 643 if (element == null)
636 return false; 644 return false;
638 return false; 646 return false;
639 String parentId = node.getAttributes().getString("text"); 647 String parentId = node.getAttributes().getString("text");
640 if (parentId != null) 648 if (parentId != null)
641 return true; 649 return true;
642 return false; 650 return false;
643 }, parentOrgPathNodePair, "element", "organizationRefId"); 651 }, parentOrgNode, "element", "organizationRefId");
644 652
645 for (; parentNodeIterator.hasNext();) { 653 for (; parentNodeIterator.hasNext();) {
646 String parentId = parentNodeIterator.next().left().getAttributes().getString("text"); 654 String parentId = parentNodeIterator.next().left().getAttributes().getString("text");
647 if (filter(parentId, filterIds)) 655 if (filter(parentId, filterIds))
648 parentIds.add(parentId); 656 parentIds.add(parentId);
728 String targetId = targetNode.getAttributes().getString("id"); 736 String targetId = targetNode.getAttributes().getString("id");
729 return targetId; 737 return targetId;
730 } 738 }
731 739
732 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) { 740 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) {
733 Pattern personPattern = Pattern.compile("p:");
734 Matcher personMacher = personPattern.matcher(id);
735 if (personMacher.find()) {
736 return searchRoleIds(personTree, id, "Person");
737 }
738
739 Pattern organizationPattern = Pattern.compile("o:");
740 Matcher organizationMacher = organizationPattern.matcher(id);
741 if (organizationMacher.find()) {
742 return _roleDescriptionElementIds(id, filterIds);
743 }
744
745 return null;
746 }
747
748 public Iterator<String> _roleDescriptionElementIds(String id, LinkedList<String> filterIds) {
749 741
750 Iterator<String> orgIds = deepParentOrganizationIdsPlus(id, filterIds); 742 Iterator<String> orgIds = deepParentOrganizationIdsPlus(id, filterIds);
751 743
752 LinkedList<String> rdeIds = new LinkedList<String>(); 744 LinkedList<String> rdeIds = new LinkedList<String>();
753 745
787 }, "id", roleId); 779 }, "id", roleId);
788 780
789 if (!roleIterator.hasNext()) 781 if (!roleIterator.hasNext())
790 return ""; 782 return "";
791 783
784 Pair<TreeNode, NodePath> roleNode = roleIterator.next();
792 785
793 Iterator<Pair<TreeNode, NodePath>> rdeIterator = traverser.findInSubTree((TreeNode node) -> { 786 Iterator<Pair<TreeNode, NodePath>> rdeIterator = traverser.findInSubTree((TreeNode node) -> {
794 String element = node.getAttributes().getString("element"); 787 String element = node.getAttributes().getString("element");
795 if (element == null) 788 if (element == null)
796 return false; 789 return false;
798 return false; 791 return false;
799 String rde = node.getAttributes().getString("text"); 792 String rde = node.getAttributes().getString("text");
800 if (rde != null) 793 if (rde != null)
801 return true; 794 return true;
802 return false; 795 return false;
803 }, roleIterator.next(), "element", "roleDescriptionElementRefIds"); 796 }, roleNode, "element", "roleDescriptionElementRefIds");
804 797
805 if (!rdeIterator.hasNext()) 798 if (!rdeIterator.hasNext())
806 return ""; 799 return "";
807 800
808 return rdeIterator.next().left().getAttributes().getString("text"); 801 return rdeIterator.next().left().getAttributes().getString("text");