comparison src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 31:7f70341a78bc

all function use index
author one
date Sat, 08 Nov 2014 06:31:14 +0900
parents f45b1c839753
children b8d86bc46b51
comparison
equal deleted inserted replaced
30:f45b1c839753 31:7f70341a78bc
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 org.apache.commons.collections.OrderedBidiMap;
9 import org.omg.CORBA.OBJ_ADAPTER;
10
8 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.loadXml; 11 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.loadXml;
9 import fj.Ord; 12 import fj.Ord;
10 import fj.P2; 13 import fj.P2;
11 import fj.data.TreeMap; 14 import fj.data.TreeMap;
15 import jp.ac.u_ryukyu.cr.ie.tatsuki.functionTest.PersonIdsTest;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; 19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; 20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
62 return true; 66 return true;
63 return false; 67 return false;
64 68
65 } 69 }
66 70
71
72
67 public Iterator<String> personIds(String orgId, LinkedList<String> roleIds) { 73 public Iterator<String> personIds(String orgId, LinkedList<String> roleIds) {
68 return personIdsSearch(orgId, roleIds).iterator(); 74 TreeMap<String, String> personIds = TreeMap.empty(Ord.stringOrd);
69 } 75 TreeMap<String, String> personIdsTreeMap = personIdsSearch(orgId, roleIds, personIds);
70 76
71 public LinkedList<String> personIdLink(String orgId, LinkedList<String> roleIds) { 77 if (personIdsTreeMap.isEmpty())
72 return personIdsSearch(orgId, roleIds); 78 return new NullIterator();
79
80 Iterator<P2<String, String>> personIdsIterator = personIdsTreeMap.iterator();
81 return new Iterator<String>() {
82
83 @Override
84 public boolean hasNext() {
85 if (personIdsIterator.hasNext())
86 return true;
87 return false;
88 }
89
90 @Override
91 public String next() {
92 return personIdsIterator.next()._1();
93 }
94
95 };
73 } 96 }
74 97
75 public Iterator<String> personIds(LinkedList<String> orgIds, LinkedList<String> roleIds) { 98 public Iterator<String> personIds(LinkedList<String> orgIds, LinkedList<String> roleIds) {
76 99
77 LinkedList<String> personIds = new LinkedList<String>(); 100 TreeMap<String, String> personIds = TreeMap.empty(Ord.stringOrd);
78
79 for (String orgId : orgIds) { 101 for (String orgId : orgIds) {
80 personIds.addAll(personIdsSearch(orgId, roleIds)); 102 personIds = personIdsSearch(orgId, roleIds, personIds);
81 } 103 }
82 return personIds.iterator(); 104
83 } 105 if (personIds.isEmpty())
84 106 return new NullIterator();
85 private LinkedList<String> personIdsSearch(String id, LinkedList<String> roleIds) { 107
108 Iterator<P2<String, String>> personIdsIterator = personIds.iterator();
109 return new Iterator<String>() {
110
111 @Override
112 public boolean hasNext() {
113 if (personIdsIterator.hasNext())
114 return true;
115 return false;
116 }
117
118 @Override
119 public String next() {
120 return personIdsIterator.next()._1();
121 }
122
123 };
124 }
125
126 private TreeMap<String, String> personIdsSearch(String id, LinkedList<String> roleIds, TreeMap<String, String> orgIds) {
86 127
87 if (!filter(id, roleIds)) 128 if (!filter(id, roleIds))
88 return new LinkedList<String>(); 129 return orgIds;
89 130
90 InterfaceTraverser personTraverser = personTree.getTraverser(); 131 InterfaceTraverser personTraverser = personTree.getTraverser();
91 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = personTraverser.find((TreeNode node) -> { 132 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = personTraverser.findAll((TreeNode node) -> {
92 String personId = node.getAttributes().getString("element"); 133 String personId = node.getAttributes().getString("element");
93 if (personId == null) 134 if (personId == null)
94 return false; 135 return false;
95 if (personId.equals("Person")) 136 if (personId.equals("Person"))
96 return true; 137 return true;
97 return false; 138 return false;
98 }, "element", "Person"); 139 }, "Person-id");
99
100 LinkedList<String> names = new LinkedList<String>();
101 140
102 for (; pairPersonIterator.hasNext();) { 141 for (; pairPersonIterator.hasNext();) {
103 142
104 Pair<TreeNode, NodePath> pairPerson = pairPersonIterator.next(); 143 Pair<TreeNode, NodePath> pairPerson = pairPersonIterator.next();
105 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = personTraverser.findInSubTree((TreeNode node) -> { 144 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = personTraverser.findInSubTree((TreeNode node) -> {
106 String personId = node.getAttributes().getString("text"); 145 String personId = node.getAttributes().getString("text-organizationRefId");
107 if (personId == null) 146 if (personId == null)
108 return false; 147 return false;
109 if (personId.equals(id)) 148 if (personId.equals(id))
110 return true; 149 return true;
111 return false; 150 return false;
112 }, pairPerson, "text", id); 151 }, pairPerson, "text-organizationRefId", id);
113 152
114 if (pairIdIterator.hasNext()) { 153 if (pairIdIterator.hasNext()) {
115 String name = pairPerson.left().getAttributes().getString("id"); 154 String name = pairPerson.left().getAttributes().getString("Person-id");
116 names.add(name); 155 if (name != null)
117 } 156 orgIds = orgIds.set(name, name);
118 } 157 }
119 return names; 158 }
159 return orgIds;
120 } 160 }
121 161
122 public boolean filter(String orgId, LinkedList<String> roleIds) { 162 public boolean filter(String orgId, LinkedList<String> roleIds) {
123 if (roleIds == null) 163 if (roleIds == null)
124 return true; 164 return true;
132 String personId = node.getAttributes().getString("element"); 172 String personId = node.getAttributes().getString("element");
133 if (personId == null) 173 if (personId == null)
134 return false; 174 return false;
135 if (!personId.equals("Organization")) 175 if (!personId.equals("Organization"))
136 return false; 176 return false;
137 String compareOrgId = node.getAttributes().getString("id"); 177 String compareOrgId = node.getAttributes().getString("Organization-id");
138 if (compareOrgId == null) 178 if (compareOrgId == null)
139 return false; 179 return false;
140 if (compareOrgId.equals(orgId)) 180 if (compareOrgId.equals(orgId))
141 return true; 181 return true;
142 return false; 182 return false;
143 }, "id", orgId); 183 }, "Organization-id", orgId);
144 184
145 if (!orgNodeIterator.hasNext()) 185 if (!orgNodeIterator.hasNext())
146 return false; 186 return false;
147 187
148 Pair<TreeNode, NodePath> searchNodePair = orgNodeIterator.next(); 188 Pair<TreeNode, NodePath> searchNodePair = orgNodeIterator.next();
166 } 206 }
167 207
168 private boolean rdeFilter(String id, Pair<TreeNode, NodePath> searchNodePair) { 208 private boolean rdeFilter(String id, Pair<TreeNode, NodePath> searchNodePair) {
169 209
170 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 210 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
171 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTree((TreeNode node) -> { 211 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> {
172 String element = node.getAttributes().getString("element"); 212 String element = node.getAttributes().getString("element");
173 if (element == null) 213 if (element == null)
174 return false; 214 return false;
175 if (!element.equals("roleRefId")) 215 if (!element.equals("roleRefId"))
176 return false; 216 return false;
177 String roleId = node.getAttributes().getString("text"); 217 String roleId = node.getAttributes().getString("text-roleRefId");
178 if (roleId != null) 218 if (roleId != null)
179 return true; 219 return true;
180 return false; 220 return false;
181 }, searchNodePair, "element", "roleRefId"); 221 }, searchNodePair, "text-roleRefId");
182 222
183 TreeMap<String, String> idMap = TreeMap.empty(Ord.stringOrd); 223 TreeMap<String, String> idMap = TreeMap.empty(Ord.stringOrd);
184 for (; pairIdIterator.hasNext();) { 224 for (; pairIdIterator.hasNext();) {
185 String roleId = pairIdIterator.next().left().getAttributes().getString("text"); 225 String roleId = pairIdIterator.next().left().getAttributes().getString("text-roleRefId");
186 idMap = idMap.set(roleId, roleId); 226 idMap = idMap.set(roleId, roleId);
187 } 227 }
188 228
189 Iterator<P2<String, String>> ids = idMap.iterator(); 229 Iterator<P2<String, String>> ids = idMap.iterator();
190 InterfaceTraverser roleTraverser = roleTree.getTraverser(); 230 InterfaceTraverser roleTraverser = roleTree.getTraverser();
195 String element = node.getAttributes().getString("element"); 235 String element = node.getAttributes().getString("element");
196 if (element == null) 236 if (element == null)
197 return false; 237 return false;
198 if (!element.equals("Role")) 238 if (!element.equals("Role"))
199 return false; 239 return false;
200 String compareRoleId = node.getAttributes().getString("id"); 240 String compareRoleId = node.getAttributes().getString("Role-id");
201 if (compareRoleId == null) 241 if (compareRoleId == null)
202 return false; 242 return false;
203 if (compareRoleId.equals(roleId)) 243 if (compareRoleId.equals(roleId))
204 return true; 244 return true;
205 return false; 245 return false;
206 }, "id", roleId); 246 }, "Role-id", roleId);
207 // -----------------------------------------bug------------------------------------------ 247
208 for (; roleNodeIterator.hasNext();) { 248 for (; roleNodeIterator.hasNext();) {
209 Pair<TreeNode, NodePath> rolePair = roleNodeIterator.next(); 249 Pair<TreeNode, NodePath> rolePair = roleNodeIterator.next();
210 Iterator<Pair<TreeNode, NodePath>> rdeNodeIterator = roleTraverser.findInSubTree((TreeNode node) -> { 250 Iterator<Pair<TreeNode, NodePath>> rdeNodeIterator = roleTraverser.findInSubTree((TreeNode node) -> {
211 String elementName = node.getAttributes().getString("element"); 251 String elementName = node.getAttributes().getString("element");
212 if (elementName == null) 252 if (elementName == null)
213 return false; 253 return false;
214 if (!elementName.equals("roleDescriptionElementRefIds")) 254 if (!elementName.equals("roleDescriptionElementRefIds"))
215 return false; 255 return false;
216 String rdeId = node.getAttributes().getString("text"); 256 String rdeId = node.getAttributes().getString("text-roleDescriptionElementRefIds");
217 if (rdeId == null) 257 if (rdeId == null)
218 return false; 258 return false;
219 Pattern personPattern = Pattern.compile(id); 259 Pattern personPattern = Pattern.compile(id);
220 Matcher personMacher = personPattern.matcher(rdeId); 260 Matcher personMacher = personPattern.matcher(rdeId);
221 if (personMacher.find()) 261 if (personMacher.find())
222 return true; 262 return true;
223 return false; 263 return false;
224 }, rolePair, "text", "id"); 264 }, rolePair, "text-roleDescriptionElementRefIds", id);
225 265
226 if (!rdeNodeIterator.hasNext()) 266 if (!rdeNodeIterator.hasNext())
227 return false; 267 return false;
228 } 268 }
229 269
239 String elementName = node.getAttributes().getString("element"); 279 String elementName = node.getAttributes().getString("element");
240 if (elementName == null) 280 if (elementName == null)
241 return false; 281 return false;
242 if (!elementName.equals("roleRefIds")) 282 if (!elementName.equals("roleRefIds"))
243 return false; 283 return false;
244 String roleId = node.getAttributes().getString("text"); 284 String roleId = node.getAttributes().getString("text-roleRefIds");
245 if (roleId == null) 285 if (roleId == null)
246 return false; 286 return false;
247 if (roleId.equals(id)) 287 if (roleId.equals(id))
248 return true; 288 return true;
249 return false; 289 return false;
250 }, searchNodePair, "text", id); 290 }, searchNodePair, "text-roleRefIds", id);
251 291
252 if (pairIdIterator.hasNext()) { 292 if (pairIdIterator.hasNext()) {
253 System.out.println(pairIdIterator.next().left().getAttributes().getString("text")); 293 System.out.println(pairIdIterator.next().left().getAttributes().getString("text-roleRefIds"));
254 return false; 294 return false;
255 } 295 }
256 return true; 296 return true;
257 } 297 }
258 298
279 String nodeElement = node.getAttributes().getString("element"); 319 String nodeElement = node.getAttributes().getString("element");
280 if (nodeElement == null) 320 if (nodeElement == null)
281 return false; 321 return false;
282 if (!nodeElement.equals(element)) 322 if (!nodeElement.equals(element))
283 return false; 323 return false;
284 String nodeId = node.getAttributes().getString("id"); 324 String nodeId = node.getAttributes().getString(element + "-id");
285 if (nodeId == null) 325 if (nodeId == null)
286 return false; 326 return false;
287 if (nodeId.equals(id)) 327 if (nodeId.equals(id))
288 return true; 328 return true;
289 return false; 329 return false;
290 }, "id", id); 330 }, element + "-id", id);
291 331
292 LinkedList<String> ids = new LinkedList<String>(); 332 TreeMap<String, String> idsTreeMap = TreeMap.empty(Ord.stringOrd);
333 ;
293 334
294 for (; searchTargetIterator.hasNext();) { 335 for (; searchTargetIterator.hasNext();) {
295 336
296 Pair<TreeNode, NodePath> searchTargetPair = searchTargetIterator.next(); 337 Pair<TreeNode, NodePath> searchTargetPair = searchTargetIterator.next();
297 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = ifTraverser.findInSubTree((TreeNode node) -> { 338 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = ifTraverser.findInSubTreeAllValue((TreeNode node) -> {
298 String nodeElement = node.getAttributes().getString("element"); 339 String nodeElement = node.getAttributes().getString("element");
299 if (nodeElement == null) 340 if (nodeElement == null)
300 return false; 341 return false;
301 if (!nodeElement.equals("roleRefId")) 342 if (!nodeElement.equals("roleRefId"))
302 return false; 343 return false;
303 String nodeId = node.getAttributes().getString("text"); 344 String nodeId = node.getAttributes().getString("text-roleRefId");
304 if (nodeId != null) 345 if (nodeId != null)
305 return true; 346 return true;
306 return false; 347 return false;
307 }, searchTargetPair, "element", "roleRefId"); 348 }, searchTargetPair, "text-roleRefId");
308 349
309 for (; pairIdIterator.hasNext();) { 350 for (; pairIdIterator.hasNext();) {
310 Pair<TreeNode, NodePath> idNodePath = pairIdIterator.next(); 351 Pair<TreeNode, NodePath> idNodePath = pairIdIterator.next();
311 String attribute = idNodePath.left().getAttributes().getString("text"); 352 String attribute = idNodePath.left().getAttributes().getString("text-roleRefId");
312 353 idsTreeMap = idsTreeMap.set(attribute, attribute);
313 Iterator<String> checkList = ids.iterator(); 354 }
314 for (; checkList.hasNext();) { 355 }
315 if (checkList.next().equals(attribute)) 356
316 attribute = null; 357 if (idsTreeMap.isEmpty())
317 } 358 return new NullIterator();
318 359
319 if (attribute != null) { 360 Iterator<P2<String, String>> ids = idsTreeMap.iterator();
320 ids.add(attribute); 361 return new Iterator<String>() {
321 System.out.println("-------------------------" + attribute + "-------------------------"); 362
322 } 363 @Override
323 } 364 public boolean hasNext() {
324 } 365 if (ids.hasNext())
325 return ids.iterator(); 366 return true;
367 return false;
368 }
369
370 @Override
371 public String next() {
372 return ids.next()._1();
373 }
374
375 };
326 } 376 }
327 377
328 public Iterator<String> competentRoleId(String personId) { 378 public Iterator<String> competentRoleId(String personId) {
329 379
330 InterfaceTraverser ifTraverser = personTree.getTraverser(); 380 InterfaceTraverser ifTraverser = personTree.getTraverser();
407 return false; 457 return false;
408 }, person, "text-priority"); 458 }, person, "text-priority");
409 459
410 LinkedList<String> idList = new LinkedList<String>(); 460 LinkedList<String> idList = new LinkedList<String>();
411 for (; targetPairIterator.hasNext();) { 461 for (; targetPairIterator.hasNext();) {
412 Pair<TreeNode,NodePath> targetPair = targetPairIterator.next(); 462 Pair<TreeNode, NodePath> targetPair = targetPairIterator.next();
413 TreeNode targetNode = targetPair.left(); 463 TreeNode targetNode = targetPair.left();
414 int priority = Integer.parseInt(targetNode.getAttributes().getString("text-priority")); 464 int priority = Integer.parseInt(targetNode.getAttributes().getString("text-priority"));
415 if (priority > 0) { 465 if (priority > 0) {
416 NodePath targetPath = targetPair.right(); 466 NodePath targetPath = targetPair.right();
417 Pair<Integer, NodePath> searchPair = targetPath.last(); 467 Pair<Integer, NodePath> searchPair = targetPath.last();
424 474
425 return idList.iterator(); 475 return idList.iterator();
426 } 476 }
427 477
428 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) { 478 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) {
429 479 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd);
430 Iterator<String> childrensIterator = deepChildOrganizationIds(orgId, new LinkedList<String>()); 480 Iterator<String> childrensIterator = deepParentOrganizationIdsPlus(orgId, filterIds);
481
431 if (!childrensIterator.hasNext()) 482 if (!childrensIterator.hasNext())
432 return new NullIterator(); 483 return new NullIterator();
433 484
434 LinkedList<String> childrenPersonList = new LinkedList<String>();
435 // childrenPersonList.addAll(personIdLink(orgId, filterIds));
436 for (; childrensIterator.hasNext();) { 485 for (; childrensIterator.hasNext();) {
437 String id = childrensIterator.next(); 486 String id = childrensIterator.next();
438 childrenPersonList.addAll(personIdLink(id, filterIds)); 487 personIdsTreeMap = personIdsSearch(id, filterIds,personIdsTreeMap);
439 } 488 }
440 489
441 return childrenPersonList.iterator(); 490 if (personIdsTreeMap.isEmpty())
491 return new NullIterator();
492
493 Iterator<P2<String, String>> personIds = personIdsTreeMap.iterator();
494 return new Iterator<String>() {
495
496 @Override
497 public boolean hasNext() {
498 if (personIds.hasNext())
499 return true;
500 return false;
501 }
502
503 @Override
504 public String next() {
505 return personIds.next()._1();
506 }
507 };
442 } 508 }
443 509
444 public Iterator<String> deepChildOrganizationIdsPlus(String orgId, LinkedList<String> filterIds) { 510 public Iterator<String> deepChildOrganizationIdsPlus(String orgId, LinkedList<String> filterIds) {
445 LinkedList<String> orgList = new LinkedList<String>(); 511 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd);
446 if (filter(orgId, filterIds)) 512 if (filter(orgId, filterIds))
447 orgList.add(orgId); 513 orgIdsTreeMap = orgIdsTreeMap.set(orgId, orgId);
448 orgList.addAll(_deepChildOrganizationIds(orgId, filterIds)); 514 orgIdsTreeMap = _deepChildOrganizationIds(orgId, filterIds, orgIdsTreeMap);
449 return orgList.iterator(); 515
516 if (orgIdsTreeMap.isEmpty())
517 return new NullIterator();
518
519 Iterator<P2<String, String>> orgIds = orgIdsTreeMap.iterator();
520 return new Iterator<String>() {
521
522 @Override
523 public boolean hasNext() {
524 if (orgIds.hasNext())
525 return true;
526 return false;
527 }
528
529 @Override
530 public String next() {
531 return orgIds.next()._1();
532 }
533 };
450 } 534 }
451 535
452 public Iterator<String> deepChildOrganizationIds(String orgId, LinkedList<String> filterIds) { 536 public Iterator<String> deepChildOrganizationIds(String orgId, LinkedList<String> filterIds) {
453 return _deepChildOrganizationIds(orgId, filterIds).iterator(); 537
454 } 538 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd);
455 539 TreeMap<String, String> newOrgIdsTreeMap = _deepChildOrganizationIds(orgId, filterIds, orgIdsTreeMap);
456 public LinkedList<String> _deepChildOrganizationIds(String orgId, LinkedList<String> filterIds) { 540 if (newOrgIdsTreeMap.isEmpty())
541 return new NullIterator();
542
543 Iterator<P2<String, String>> orgIds = newOrgIdsTreeMap.iterator();
544 return new Iterator<String>() {
545
546 @Override
547 public String next() {
548 return orgIds.next()._1();
549 }
550
551 @Override
552 public boolean hasNext() {
553 if (orgIds.hasNext())
554 return true;
555 return false;
556 }
557 };
558 }
559
560 public TreeMap<String, String> _deepChildOrganizationIds(String orgId, LinkedList<String> filterIds,
561 TreeMap<String, String> orgIdsTreeMap) {
457 562
458 Iterator<String> childrensIterator = childOrganizationIds(orgId, new LinkedList<String>()); 563 Iterator<String> childrensIterator = childOrganizationIds(orgId, new LinkedList<String>());
459 if (!childrensIterator.hasNext()) 564 if (!childrensIterator.hasNext())
460 return new LinkedList<String>(); 565 return orgIdsTreeMap;
461 566
462 LinkedList<String> childrenList = new LinkedList<String>();
463 for (; childrensIterator.hasNext();) { 567 for (; childrensIterator.hasNext();) {
464 String childrenId = childrensIterator.next(); 568 String childrenId = childrensIterator.next();
465 if (filter(childrenId, filterIds)) 569 if (filter(childrenId, filterIds))
466 childrenList.add(childrenId); 570 orgIdsTreeMap = orgIdsTreeMap.set(childrenId, childrenId);
467 childrenList.addAll(_deepChildOrganizationIds(childrenId, filterIds)); 571 orgIdsTreeMap = _deepChildOrganizationIds(childrenId, filterIds, orgIdsTreeMap);
468 } 572 }
469 573
470 return childrenList; 574 return orgIdsTreeMap;
471 } 575 }
472 576
473 public Iterator<String> childOrganizationIds(String orgId, LinkedList<String> filterIds) { 577 public Iterator<String> childOrganizationIds(String orgId, LinkedList<String> filterIds) {
578 TreeMap<String, String> childrenOrgIdTreeMap = TreeMap.empty(Ord.stringOrd);
579 TreeMap<String, String> newChildrenOrgIdTreeMap = _childOrganizationIds(orgId, filterIds, childrenOrgIdTreeMap);
580
581 if (newChildrenOrgIdTreeMap.isEmpty())
582 return new NullIterator();
583
584 Iterator<P2<String, String>> childrenOrgIdIterator = newChildrenOrgIdTreeMap.iterator();
585 return new Iterator<String>() {
586
587 @Override
588 public boolean hasNext() {
589 if (childrenOrgIdIterator.hasNext())
590 return true;
591 return false;
592 }
593
594 @Override
595 public String next() {
596 return childrenOrgIdIterator.next()._1();
597 }
598 };
599
600 }
601
602 public TreeMap<String, String> _childOrganizationIds(String orgId, LinkedList<String> filterIds,
603 TreeMap<String, String> childOrgIdsTreeMap) {
474 604
475 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 605 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
476 606
477 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = orgTraverser.find((TreeNode node) -> { 607 Iterator<Pair<TreeNode, NodePath>> pairPersonIterator = orgTraverser.find((TreeNode node) -> {
478 String nodeElement = node.getAttributes().getString("element"); 608 String nodeElement = node.getAttributes().getString("element");
487 return true; 617 return true;
488 return false; 618 return false;
489 }, "Organization-id", orgId); 619 }, "Organization-id", orgId);
490 620
491 if (!pairPersonIterator.hasNext()) 621 if (!pairPersonIterator.hasNext())
492 return new NullIterator(); 622 return childOrgIdsTreeMap;
493 623
494 Pair<TreeNode, NodePath> person = pairPersonIterator.next(); 624 Pair<TreeNode, NodePath> person = pairPersonIterator.next();
495 625
496 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdsIterator = orgTraverser.findInSubTree((TreeNode node) -> { 626 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdsIterator = orgTraverser.findInSubTree((TreeNode node) -> {
497 String nodeElement = node.getAttributes().getString("element"); 627 String nodeElement = node.getAttributes().getString("element");
501 return true; 631 return true;
502 return false; 632 return false;
503 }, person, "element", "childOrganizations"); 633 }, person, "element", "childOrganizations");
504 634
505 if (!chilrenOrgIdsIterator.hasNext()) 635 if (!chilrenOrgIdsIterator.hasNext())
506 return new NullIterator(); 636 return childOrgIdsTreeMap;
507 637
508 Pair<TreeNode, NodePath> chilerenOrgIds = chilrenOrgIdsIterator.next(); 638 Pair<TreeNode, NodePath> chilerenOrgIds = chilrenOrgIdsIterator.next();
509 639
510 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> { 640 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> {
511 String nodeElement = node.getAttributes().getString("element"); 641 String nodeElement = node.getAttributes().getString("element");
517 if (nodeElement != null) 647 if (nodeElement != null)
518 return true; 648 return true;
519 return false; 649 return false;
520 }, chilerenOrgIds, "text-organizationRefIds"); 650 }, chilerenOrgIds, "text-organizationRefIds");
521 651
522 LinkedList<String> ids = new LinkedList<String>();
523
524 for (; chilrenOrgIdIterator.hasNext();) { 652 for (; chilrenOrgIdIterator.hasNext();) {
525 String childrenOrgId = chilrenOrgIdIterator.next().left().getAttributes().getString("text-organizationRefIds"); 653 String childrenOrgId = chilrenOrgIdIterator.next().left().getAttributes().getString("text-organizationRefIds");
526 if (filter(childrenOrgId, filterIds)) 654 if (filter(childrenOrgId, filterIds))
527 ids.add(childrenOrgId); 655 childOrgIdsTreeMap = childOrgIdsTreeMap.set(childrenOrgId, childrenOrgId);
528 656
529 } 657 }
530 658
531 return ids.iterator(); 659 return childOrgIdsTreeMap;
532 } 660 }
533 661
534 public TreeNode getTarget(TreeNode node, NodePath path) { 662 public TreeNode getTarget(TreeNode node, NodePath path) {
535 TreeNode target; 663 TreeNode target;
536 Pair<Integer, NodePath> pathNode = path.pop(); 664 Pair<Integer, NodePath> pathNode = path.pop();
571 String element = node.getAttributes().getString("element"); 699 String element = node.getAttributes().getString("element");
572 if (element == null) 700 if (element == null)
573 return false; 701 return false;
574 if (!element.equals("Person")) 702 if (!element.equals("Person"))
575 return false; 703 return false;
576 String nodeId = node.getAttributes().getString("id"); 704 String nodeId = node.getAttributes().getString("Person-id");
577 if (nodeId == null) 705 if (nodeId == null)
578 return false; 706 return false;
579 if (nodeId.equals(personId)) 707 if (nodeId.equals(personId))
580 return true; 708 return true;
581 return false; 709 return false;
582 }, "id", personId); 710 }, "Person-id", personId);
583 711
584 if (!personIterator.hasNext()) 712 if (!personIterator.hasNext())
585 return ""; 713 return "";
586 714
587 Pair<TreeNode, NodePath> targetNode = personIterator.next(); 715 Pair<TreeNode, NodePath> targetNode = personIterator.next();
590 String element = node.getAttributes().getString("element"); 718 String element = node.getAttributes().getString("element");
591 if (element == null) 719 if (element == null)
592 return false; 720 return false;
593 if (!element.equals("roleRefId")) 721 if (!element.equals("roleRefId"))
594 return false; 722 return false;
595 String compareRoleId = node.getAttributes().getString("text"); 723 String compareRoleId = node.getAttributes().getString("text-roleRefId");
596 if (compareRoleId == null) 724 if (compareRoleId == null)
597 return false; 725 return false;
598 if (compareRoleId.equals(roleId)) 726 if (compareRoleId.equals(roleId))
599 return true; 727 return true;
600 return false; 728 return false;
601 }, targetNode, "element", "roleRefId"); 729 }, targetNode, "text-roleRefId",roleId);
602 730
603 for (; priorityIterator.hasNext();) { 731 for (; priorityIterator.hasNext();) {
604 Pair<TreeNode, NodePath> priorityPair = priorityIterator.next(); 732 Pair<TreeNode, NodePath> priorityPair = priorityIterator.next();
605 NodePath roleNodePath = priorityPair.right(); 733 NodePath roleNodePath = priorityPair.right();
606 Pair<Integer, NodePath> last = roleNodePath.last(); 734 Pair<Integer, NodePath> last = roleNodePath.last();
607 NodePath priorityNodePath = last.right().add(last.left() - 1); 735 NodePath priorityNodePath = last.right().add(last.left() - 1);
608 TreeNode priorityNode = getTarget(targetNode.left(), priorityNodePath); 736 TreeNode priorityNode = getTarget(personTree.getRootNode(), priorityNodePath);
609 if (priorityNode.getAttributes().getString("element").equals("priority")) 737 if (priorityNode.getAttributes().getString("element").equals("priority"))
610 return priorityNode.getAttributes().getString("text"); 738 return priorityNode.getAttributes().getString("text-priority");
611 } 739 }
612 return ""; 740 return "";
613 } 741 }
614 742
615 public Iterator<String> parentOrganizationIds(String orgId, LinkedList<String> filterIds) { 743 public Iterator<String> parentOrganizationIds(String orgId, LinkedList<String> filterIds) {
616 return _parentOrganizationIds(orgId, filterIds).iterator(); 744 return _parentOrganizationIds(orgId, filterIds);
617 } 745 }
618 746
619 public LinkedList<String> _parentOrganizationIds(String orgId, LinkedList<String> filterIds) { 747 public Iterator<String> _parentOrganizationIds(String orgId, LinkedList<String> filterIds) {
620 748
621 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 749 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
622 Iterator<Pair<TreeNode, NodePath>> orgIterator = orgTraverser.find((TreeNode node) -> { 750 Iterator<Pair<TreeNode, NodePath>> orgIterator = orgTraverser.find((TreeNode node) -> {
623 String element = node.getAttributes().getString("element"); 751 String element = node.getAttributes().getString("element");
624 if (element == null) 752 if (element == null)
625 return false; 753 return false;
626 if (!element.equals("Organization")) 754 if (!element.equals("Organization"))
627 return false; 755 return false;
628 String nodeId = node.getAttributes().getString("id"); 756 String nodeId = node.getAttributes().getString("Organization-id");
629 if (nodeId == null) 757 if (nodeId == null)
630 return false; 758 return false;
631 if (nodeId.equals(orgId)) 759 if (nodeId.equals(orgId))
632 return true; 760 return true;
633 return false; 761 return false;
634 }, "element", "Organization"); 762 }, "Organization-id", orgId);
635 763
636 if (!orgIterator.hasNext()) 764 if (!orgIterator.hasNext())
637 return new LinkedList<String>(); 765 return new NullIterator();
638 766
639 Pair<TreeNode, NodePath> orgNode = orgIterator.next(); 767 Pair<TreeNode, NodePath> orgNode = orgIterator.next();
640 768
641 Iterator<Pair<TreeNode, NodePath>> parentOrgIterator = orgTraverser.findInSubTree((TreeNode node) -> { 769 Iterator<Pair<TreeNode, NodePath>> parentOrgIterator = orgTraverser.findInSubTree((TreeNode node) -> {
642 String element = node.getAttributes().getString("element"); 770 String element = node.getAttributes().getString("element");
645 if (element.equals("parentOrganizations")) 773 if (element.equals("parentOrganizations"))
646 return true; 774 return true;
647 return false; 775 return false;
648 }, orgNode, "element", "parentOrganizations"); 776 }, orgNode, "element", "parentOrganizations");
649 777
650 LinkedList<String> parentIds = new LinkedList<String>(); 778 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd);
651 779
652 for (; parentOrgIterator.hasNext();) { 780 for (; parentOrgIterator.hasNext();) {
653 Pair<TreeNode, NodePath> parentOrgNode = parentOrgIterator.next(); 781 Pair<TreeNode, NodePath> parentOrgNode = parentOrgIterator.next();
654 782
655 Iterator<Pair<TreeNode, NodePath>> parentNodeIterator = orgTraverser.findInSubTree((TreeNode node) -> { 783 Iterator<Pair<TreeNode, NodePath>> parentNodeIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> {
656 String element = node.getAttributes().getString("element"); 784 String element = node.getAttributes().getString("element");
657 if (element == null) 785 if (element == null)
658 return false; 786 return false;
659 if (!element.equals("organizationRefId")) 787 if (!element.equals("organizationRefId"))
660 return false; 788 return false;
661 String parentId = node.getAttributes().getString("text"); 789 String parentId = node.getAttributes().getString("text-organizationRefId");
662 if (parentId != null) 790 if (parentId != null)
663 return true; 791 return true;
664 return false; 792 return false;
665 }, parentOrgNode, "element", "organizationRefId"); 793 }, parentOrgNode, "text-organizationRefId");
666 794
667 for (; parentNodeIterator.hasNext();) { 795 for (; parentNodeIterator.hasNext();) {
668 String parentId = parentNodeIterator.next().left().getAttributes().getString("text"); 796 String parentId = parentNodeIterator.next().left().getAttributes().getString("text-organizationRefId");
669 if (filter(parentId, filterIds)) 797 if (filter(parentId, filterIds))
670 parentIds.add(parentId); 798 parentIdsTreeMap = parentIdsTreeMap.set(parentId, parentId);
671 } 799 }
672 800
673 } 801 }
674 802
675 return parentIds; 803 Iterator<P2<String, String>> parentIds = parentIdsTreeMap.iterator();
804 if (parentIdsTreeMap.isEmpty())
805 return new NullIterator();
806 else
807 return new Iterator<String>() {
808
809 @Override
810 public boolean hasNext() {
811 if (parentIds.hasNext())
812 return true;
813 return false;
814 }
815
816 @Override
817 public String next() {
818 return parentIds.next()._1();
819 }
820
821 };
676 } 822 }
677 823
678 public Iterator<String> deepParentOrganizationIds(String orgId, LinkedList<String> filterIds) { 824 public Iterator<String> deepParentOrganizationIds(String orgId, LinkedList<String> filterIds) {
679 return _deepParentOrganizationIds(orgId, filterIds).iterator(); 825 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd);
680 } 826 Iterator<P2<String, String>> parentIds = _deepParentOrganizationIds(orgId, filterIds, parentIdsTreeMap).iterator();
681 827 return new Iterator<String>() {
682 public LinkedList<String> _deepParentOrganizationIds(String orgId, LinkedList<String> filterIds) { 828
829 @Override
830 public boolean hasNext() {
831 if (parentIds.hasNext())
832 return true;
833 return false;
834 }
835
836 @Override
837 public String next() {
838 return parentIds.next()._1();
839 }
840
841 };
842 }
843
844 public TreeMap<String, String> _deepParentOrganizationIds(String orgId, LinkedList<String> filterIds,
845 TreeMap<String, String> orgIds) {
683 846
684 Iterator<String> parentIds = parentOrganizationIds(orgId, filterIds); 847 Iterator<String> parentIds = parentOrganizationIds(orgId, filterIds);
685 if (!parentIds.hasNext()) 848 if (!parentIds.hasNext())
686 return new LinkedList<String>(); 849 return orgIds;
687
688 LinkedList<String> parentIdList = new LinkedList<String>();
689 850
690 for (; parentIds.hasNext();) { 851 for (; parentIds.hasNext();) {
691 String parentId = parentIds.next(); 852 String parentId = parentIds.next();
692 if (filter(parentId, filterIds)) 853 if (filter(parentId, filterIds))
693 parentIdList.add(parentId); 854 orgIds = orgIds.set(parentId, parentId);
694 parentIdList.addAll(_deepParentOrganizationIds(parentId, filterIds)); 855 orgIds = _deepParentOrganizationIds(parentId, filterIds, orgIds);
695 } 856 }
696 return parentIdList; 857 return orgIds;
697 } 858 }
698 859
699 public Iterator<String> deepParentOrganizationIdsPlus(String id, LinkedList<String> filterIds) { 860 public Iterator<String> deepParentOrganizationIdsPlus(String id, LinkedList<String> filterIds) {
700 LinkedList<String> parentIds = new LinkedList<String>(); 861 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd);
701 if (filter(id, filterIds)) 862 if (filter(id, filterIds))
702 parentIds.add(id); 863 parentIdsTreeMap = parentIdsTreeMap.set(id, id);
703 parentIds.addAll(_deepParentOrganizationIds(id, filterIds)); 864 parentIdsTreeMap = _deepParentOrganizationIds(id, filterIds, parentIdsTreeMap);
704 return parentIds.iterator(); 865
866 if (parentIdsTreeMap.isEmpty())
867 return new NullIterator();
868
869 Iterator<P2<String, String>> personIds = parentIdsTreeMap.iterator();
870 return new Iterator<String>() {
871
872 @Override
873 public boolean hasNext() {
874 if (personIds.hasNext())
875 return true;
876 return false;
877 }
878
879 @Override
880 public String next() {
881 return personIds.next()._1();
882 }
883
884 };
705 } 885 }
706 886
707 public String stringPathToId(String args) { 887 public String stringPathToId(String args) {
708 String[] splitPath = args.split(":"); 888 String[] splitPath = args.split(":");
709 889
714 894
715 final String StrPath = str; 895 final String StrPath = str;
716 896
717 InterfaceTraverser traverser = null; 897 InterfaceTraverser traverser = null;
718 TreeNode root = null; 898 TreeNode root = null;
899 String elementName = null;
719 if (splitPath[0].equals("r")) { 900 if (splitPath[0].equals("r")) {
720 traverser = roleTree.getTraverser(); 901 traverser = roleTree.getTraverser();
721 root = roleTree.getRootNode(); 902 root = roleTree.getRootNode();
903 elementName = "Role";
722 } 904 }
723 if (splitPath[0].equals("rde")) { 905 if (splitPath[0].equals("rde")) {
724 traverser = rdeTree.getTraverser(); 906 traverser = rdeTree.getTraverser();
725 root = rdeTree.getRootNode(); 907 root = rdeTree.getRootNode();
908 elementName = "RoleDescriptionElement";
726 } 909 }
727 910
728 Iterator<Pair<TreeNode, NodePath>> idIterator = traverser.find((TreeNode node) -> { 911 Iterator<Pair<TreeNode, NodePath>> idIterator = traverser.find((TreeNode node) -> {
729 String element = node.getAttributes().getString("element"); 912 String element = node.getAttributes().getString("element");
730 if (element == null) 913 if (element == null)
731 return false; 914 return false;
732 if (!element.equals("path")) 915 if (!element.equals("path"))
733 return false; 916 return false;
734 String pathString = node.getAttributes().getString("text"); 917 String pathString = node.getAttributes().getString("text-path");
735 if (pathString == null) 918 if (pathString == null)
736 return false; 919 return false;
737 if (pathString.equals(StrPath)) 920 if (pathString.equals(StrPath))
738 return true; 921 return true;
739 return false; 922 return false;
740 }, "text", "StrPath"); 923 }, "text-path", StrPath);
741 924
742 if (!idIterator.hasNext()) 925 if (!idIterator.hasNext())
743 return ""; 926 return "";
744 927
745 Pair<TreeNode, NodePath> nodePair = idIterator.next(); 928 Pair<TreeNode, NodePath> nodePair = idIterator.next();
746 NodePath path = nodePair.right(); 929 NodePath path = nodePair.right();
747 NodePath targetPath = path.last().right(); 930 NodePath targetPath = path.last().right();
748 931
749 TreeNode targetNode = getTarget(root, targetPath); 932 TreeNode targetNode = getTarget(root, targetPath);
750 String targetId = targetNode.getAttributes().getString("id"); 933 String targetId = targetNode.getAttributes().getString(elementName + "-id");
751 return targetId; 934 return targetId;
752 } 935 }
753 936
754 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) { 937 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) {
755 938
756 Iterator<String> orgIds = deepParentOrganizationIdsPlus(id, filterIds); 939 Iterator<String> orgIds = deepParentOrganizationIdsPlus(id, filterIds);
757 940
758 LinkedList<String> rdeIds = new LinkedList<String>(); 941 TreeMap<String,String> rdeIdsTreeMap = TreeMap.empty(Ord.stringOrd);
759 942
760 for (; orgIds.hasNext();) { 943 for (; orgIds.hasNext();) {
761 String orgId = orgIds.next(); 944 String orgId = orgIds.next();
762 Iterator<String> roleIds = roleIds(orgId); 945 Iterator<String> roleIds = roleIds(orgId);
763 for (; roleIds.hasNext();) { 946 for (; roleIds.hasNext();) {
764 String roleId = roleIds.next(); 947 String roleId = roleIds.next();
765 String rdeId = getRde(roleId); 948 Iterator<String> rdeIds = getRde(roleId);
766 String[] rdeSplit = rdeId.split(" "); 949 for (;rdeIds.hasNext();) {
767 for (String rde : rdeSplit) { 950 String rdeId = rdeIds.next();
768 if (!rde.equals("")) 951 rdeIdsTreeMap = rdeIdsTreeMap.set(rdeId,rdeId);
769 rdeIds.add(rde);
770 } 952 }
771 } 953 }
772 } 954 }
773 955 if (rdeIdsTreeMap.isEmpty())
774 return rdeIds.iterator(); 956 return new NullIterator();
775 } 957
776 958 Iterator<P2<String, String>> rdeIds = rdeIdsTreeMap.iterator();
777 private String getRde(String roleId) { 959 return new Iterator<String>() {
960
961 @Override
962 public boolean hasNext() {
963 if (rdeIds.hasNext())
964 return true;
965 return false;
966 }
967
968 @Override
969 public String next() {
970 return rdeIds.next()._1();
971 }
972 };
973 }
974
975 private Iterator<String> getRde(String roleId) {
778 976
779 InterfaceTraverser traverser = roleTree.getTraverser(); 977 InterfaceTraverser traverser = roleTree.getTraverser();
780 978
781 Iterator<Pair<TreeNode, NodePath>> roleIterator = traverser.find((TreeNode node) -> { 979 Iterator<Pair<TreeNode, NodePath>> roleIterator = traverser.find((TreeNode node) -> {
782 String element = node.getAttributes().getString("element"); 980 String element = node.getAttributes().getString("element");
783 if (element == null) 981 if (element == null)
784 return false; 982 return false;
785 if (!element.equals("Role")) 983 if (!element.equals("Role"))
786 return false; 984 return false;
787 String id = node.getAttributes().getString("id"); 985 String id = node.getAttributes().getString("Role-id");
788 if (id == null) 986 if (id == null)
789 return false; 987 return false;
790 if (id.equals(roleId)) 988 if (id.equals(roleId))
791 return true; 989 return true;
792 return false; 990 return false;
793 }, "id", roleId); 991 }, "Role-id", roleId);
794 992
795 if (!roleIterator.hasNext()) 993 if (!roleIterator.hasNext())
796 return ""; 994 return new NullIterator();
797 995
798 Pair<TreeNode, NodePath> roleNode = roleIterator.next(); 996 Pair<TreeNode, NodePath> roleNode = roleIterator.next();
799 997
800 Iterator<Pair<TreeNode, NodePath>> rdeIterator = traverser.findInSubTree((TreeNode node) -> { 998 Iterator<Pair<TreeNode, NodePath>> rdeIterator = traverser.findInSubTreeAllValue((TreeNode node) -> {
801 String element = node.getAttributes().getString("element"); 999 String element = node.getAttributes().getString("element");
802 if (element == null) 1000 if (element == null)
803 return false; 1001 return false;
804 if (!element.equals("roleDescriptionElementRefIds")) 1002 if (!element.equals("roleDescriptionElementRefIds"))
805 return false; 1003 return false;
806 String rde = node.getAttributes().getString("text"); 1004 String rde = node.getAttributes().getString("text-roleDescriptionElementRefIds");
807 if (rde != null) 1005 if (rde != null)
808 return true; 1006 return true;
809 return false; 1007 return false;
810 }, roleNode, "element", "roleDescriptionElementRefIds"); 1008 }, roleNode, "text-roleDescriptionElementRefIds");
811 1009
812 if (!rdeIterator.hasNext()) 1010 if (!rdeIterator.hasNext())
813 return ""; 1011 return new NullIterator();
814 1012
815 return rdeIterator.next().left().getAttributes().getString("text"); 1013 return new Iterator<String>() {
1014
1015 @Override
1016 public boolean hasNext() {
1017 if (rdeIterator.hasNext())
1018 return true;
1019 return false;
1020 }
1021
1022 @Override
1023 public String next() {
1024 return rdeIterator.next().left().getAttributes().getString("text-roleDescriptionElementRefIds");
1025 }
1026 };
1027
816 } 1028 }
817 1029
818 } 1030 }