comparison src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 41:037731e99d6e

fit JungleCore 144
author one
date Mon, 17 Nov 2014 18:47:10 +0900
parents 22edfb7f47ad
children 1bdd50e26fac
comparison
equal deleted inserted replaced
40:59a7d2cffc86 41:037731e99d6e
2 2
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
8 import javax.lang.model.element.Element;
7 9
8 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.LoadXml; 10 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.LoadXml;
9 import fj.Ord; 11 import fj.Ord;
10 import fj.P2; 12 import fj.P2;
11 import fj.data.TreeMap; 13 import fj.data.TreeMap;
43 45
44 } catch (Exception e) { 46 } catch (Exception e) {
45 e.printStackTrace(); 47 e.printStackTrace();
46 } 48 }
47 } 49 }
50
48 public boolean isActive(String id) { 51 public boolean isActive(String id) {
49 52
50 InterfaceTraverser personTraverser = personTree.getTraverser(); 53 InterfaceTraverser personTraverser = personTree.getTraverser();
51 Iterator<Pair<TreeNode, NodePath>> personIdpairIterator = personTraverser.find((TreeNode node) -> { 54 Iterator<Pair<TreeNode, NodePath>> personIdpairIterator = personTraverser.find((TreeNode node) -> {
52 String personId = node.getAttributes().getString("Person-id"); 55 Iterator<String> personIdIterator = node.getAttributes().getString("Person-id");
53 if (personId == null) 56 if (personIdIterator.hasNext()) {
54 return false; 57 if (personIdIterator.next().equals(id))
55 if (personId.equals(id)) 58 return true;
56 return true; 59 }
57 return false; 60 return false;
58 }, "Person-id", id); 61 }, "Person-id", id);
59 62
60 if (personIdpairIterator.hasNext()) 63 if (personIdpairIterator.hasNext())
61 return true; 64 return true;
62 return false; 65 return false;
63 66
64 } 67 }
65
66 68
67 public Iterator<String> personIds(String orgId, LinkedList<String> roleIds) { 69 public Iterator<String> personIds(String orgId, LinkedList<String> roleIds) {
68 70
69 Iterator<String> parentOrgIdIterator = parentOrganizationIds(orgId, roleIds); 71 Iterator<String> parentOrgIdIterator = parentOrganizationIds(orgId, roleIds);
70 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd); 72 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd);
71 73
72 if (filter(orgId, roleIds)) 74 if (filter(orgId, roleIds))
73 personIdsTreeMap = personIdsSearch(orgId, personIdsTreeMap); 75 personIdsTreeMap = personIdsSearch(orgId, personIdsTreeMap);
74 76
75 for (; parentOrgIdIterator.hasNext();) { 77 for (; parentOrgIdIterator.hasNext();) {
76 personIdsTreeMap = personIdsSearch(parentOrgIdIterator.next(), personIdsTreeMap); 78 personIdsTreeMap = personIdsSearch(parentOrgIdIterator.next(), personIdsTreeMap);
95 } 97 }
96 98
97 }; 99 };
98 } 100 }
99 101
100
101 public Iterator<String> personIds(LinkedList<String> orgIds, LinkedList<String> roleIds) { 102 public Iterator<String> personIds(LinkedList<String> orgIds, LinkedList<String> roleIds) {
102 103
103 TreeMap<String, String> personIds = TreeMap.empty(Ord.stringOrd); 104 TreeMap<String, String> personIds = TreeMap.empty(Ord.stringOrd);
104 for (String orgId : orgIds) { 105 for (String orgId : orgIds) {
105 personIds = personIdsSearch(orgId, personIds); 106 personIds = personIdsSearch(orgId, personIds);
128 return personId; 129 return personId;
129 } 130 }
130 131
131 }; 132 };
132 } 133 }
133 134
134 private TreeMap<String, String> personIdsSearch(String orgId, TreeMap<String, String> orgIdsTreeMap) { 135 private TreeMap<String, String> personIdsSearch(String orgId, TreeMap<String, String> orgIdsTreeMap) {
135 136
136 InterfaceTraverser personTraverser = personTree.getTraverser(); 137 InterfaceTraverser personTraverser = personTree.getTraverser();
137 138
138 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.findAll((TreeNode node) -> { 139 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.findAll((TreeNode node) -> {
139 String personId = node.getAttributes().getString("element"); 140 Iterator<String> personIdIterator = node.getAttributes().getString("element");
140 if (personId == null) 141 for (; personIdIterator.hasNext();) {
141 return false; 142 if (personIdIterator.next().equals("Person"))
142 if (personId.equals("Person")) 143 return true;
143 return true; 144 }
144 return false; 145 return false;
145 }, "Person-id"); 146 }, "Person-id");
146 147
147 for (; personIdPairIterator.hasNext();) { 148 for (; personIdPairIterator.hasNext();) {
148 149
149 Pair<TreeNode, NodePath> personIdPair = personIdPairIterator.next(); 150 Pair<TreeNode, NodePath> personIdPair = personIdPairIterator.next();
150 151
151 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = personTraverser.findInSubTree((TreeNode node) -> { 152 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = personTraverser.findInSubTree((TreeNode node) -> {
152 String personId = node.getAttributes().getString("text-organizationRefId"); 153 Iterator<String> personIdIterator = node.getAttributes().getString("text-organizationRefId");
153 if (personId == null) 154 for (; personIdIterator.hasNext();) {
154 return false; 155 if (personIdIterator.next().equals(orgId))
155 if (personId.equals(orgId)) 156 return true;
156 return true; 157 }
157 return false; 158 return false;
158 }, personIdPair, "text-organizationRefId", orgId); 159 }, personIdPair, "text-organizationRefId", orgId);
159 160
160 if (orgIdPairIterator.hasNext()) { 161 if (orgIdPairIterator.hasNext()) {
161 String personId = personIdPair.left().getAttributes().getString("Person-id"); 162 Iterator<String> personIdIterator = personIdPair.left().getAttributes().getString("Person-id");
162 if (personId != null) 163 if (personIdIterator.hasNext()) {
164 String personId = personIdIterator.next();
163 orgIdsTreeMap = orgIdsTreeMap.set(personId, personId); 165 orgIdsTreeMap = orgIdsTreeMap.set(personId, personId);
166 }
164 } 167 }
165 } 168 }
166 return orgIdsTreeMap; 169 return orgIdsTreeMap;
167 } 170 }
168 171
169
170
171
172 public boolean filter(String orgId, LinkedList<String> roleIds) { 172 public boolean filter(String orgId, LinkedList<String> roleIds) {
173 173
174 if (roleIds == null) 174 if (roleIds == null)
175 return true; 175 return true;
176 176
177 if (roleIds.isEmpty()) 177 if (roleIds.isEmpty())
178 return true; 178 return true;
179 179
180 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 180 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
181 181
182 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> { 182 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> {
183 String personId = node.getAttributes().getString("element"); 183 Iterator<String> personIdIterator = node.getAttributes().getString("element");
184 if (personId == null) 184 for (; personIdIterator.hasNext();) {
185 return false; 185 if (!personIdIterator.next().equals("Organization"))
186 if (!personId.equals("Organization")) 186 continue;
187 return false; 187 Iterator<String> compareOrgIdIterator = node.getAttributes().getString("Organization-id");
188 String compareOrgId = node.getAttributes().getString("Organization-id"); 188 for (; compareOrgIdIterator.hasNext();) {
189 if (compareOrgId == null) 189 if (compareOrgIdIterator.next().equals(orgId))
190 return false; 190 return true;
191 if (compareOrgId.equals(orgId)) 191 }
192 return true; 192 }
193 return false; 193 return false;
194 }, "Organization-id", orgId); 194 }, "Organization-id", orgId);
195 195
196 if (!orgIdPairIterator.hasNext()) 196 if (!orgIdPairIterator.hasNext())
197 return false; 197 return false;
213 return false; 213 return false;
214 } 214 }
215 } 215 }
216 return true; 216 return true;
217 } 217 }
218 218
219 private boolean rdeFilter(String filterRdeId, Pair<TreeNode, NodePath> searchNodePair) { 219 private boolean rdeFilter(String filterRdeId, Pair<TreeNode, NodePath> searchNodePair) {
220 220
221 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 221 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
222 222
223 Iterator<Pair<TreeNode, NodePath>> orgRoleIdPairIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> { 223 Iterator<Pair<TreeNode, NodePath>> orgRoleIdPairIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> {
224 String element = node.getAttributes().getString("element"); 224 Iterator<String> element = node.getAttributes().getString("element");
225 if (element == null) 225 if (!element.hasNext())
226 return false; 226 return false;
227 if (!element.equals("roleRefId")) 227 if (!element.next().equals("roleRefId"))
228 return false; 228 return false;
229 String roleId = node.getAttributes().getString("text-roleRefId"); 229 Iterator<String> roleId = node.getAttributes().getString("text-roleRefId");
230 if (roleId != null) 230 if (roleId.hasNext())
231 return true; 231 return true;
232 return false; 232 return false;
233 }, searchNodePair, "text-roleRefId"); 233 }, searchNodePair, "text-roleRefId");
234 234
235 TreeMap<String, String> orgRoleIdMap = TreeMap.empty(Ord.stringOrd); 235 TreeMap<String, String> orgRoleIdMap = TreeMap.empty(Ord.stringOrd);
236 236
237 for (; orgRoleIdPairIterator.hasNext();) { 237 for (; orgRoleIdPairIterator.hasNext();) {
238 String roleId = orgRoleIdPairIterator.next().left().getAttributes().getString("text-roleRefId"); 238 Iterator<String> roleIdIterator = orgRoleIdPairIterator.next().left().getAttributes().getString("text-roleRefId");
239 orgRoleIdMap = orgRoleIdMap.set(roleId, roleId); 239 for (; roleIdIterator.hasNext();) {
240 String roleId = roleIdIterator.next();
241 orgRoleIdMap = orgRoleIdMap.set(roleId, roleId);
242 }
240 } 243 }
241 244
242 Iterator<P2<String, String>> orgRoleIdP2Iterator = orgRoleIdMap.iterator(); 245 Iterator<P2<String, String>> orgRoleIdP2Iterator = orgRoleIdMap.iterator();
243 InterfaceTraverser roleTraverser = roleTree.getTraverser(); 246 InterfaceTraverser roleTraverser = roleTree.getTraverser();
244 247
245 for (; orgRoleIdP2Iterator.hasNext();) { 248 for (; orgRoleIdP2Iterator.hasNext();) {
246 String orgRoleId = orgRoleIdP2Iterator.next()._1(); 249 String orgRoleId = orgRoleIdP2Iterator.next()._1();
247 250
248 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = roleTraverser.find((TreeNode node) -> { 251 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = roleTraverser.find((TreeNode node) -> {
249 String element = node.getAttributes().getString("element"); 252 Iterator<String> element = node.getAttributes().getString("element");
250 if (element == null) 253 if (!element.hasNext())
251 return false; 254 return false;
252 if (!element.equals("Role")) 255 if (!element.next().equals("Role"))
253 return false; 256 return false;
254 String compareRoleId = node.getAttributes().getString("Role-id"); 257 Iterator<String> compareRoleIdIterator = node.getAttributes().getString("Role-id");
255 if (compareRoleId == null) 258 for (; compareRoleIdIterator.hasNext();) {
256 return false; 259 if (compareRoleIdIterator.next().equals(orgRoleId))
257 if (compareRoleId.equals(orgRoleId)) 260 return true;
258 return true; 261 }
259 return false; 262 return false;
260 }, "Role-id", orgRoleId); 263 }, "Role-id", orgRoleId);
261 264
262 for (; roleIdPairIterator.hasNext();) { 265 for (; roleIdPairIterator.hasNext();) {
263 266
264 Pair<TreeNode, NodePath> rolePair = roleIdPairIterator.next(); 267 Pair<TreeNode, NodePath> rolePair = roleIdPairIterator.next();
265 Iterator<Pair<TreeNode, NodePath>> rdeIdPairIterator = roleTraverser.findInSubTree((TreeNode node) -> { 268 Iterator<Pair<TreeNode, NodePath>> rdeIdPairIterator = roleTraverser.findInSubTree((TreeNode node) -> {
266 String elementName = node.getAttributes().getString("element"); 269 Iterator<String> element = node.getAttributes().getString("element");
267 if (elementName == null) 270 if (!element.hasNext())
268 return false; 271 return false;
269 if (!elementName.equals("roleDescriptionElementRefIds")) 272 if (!element.next().equals("roleDescriptionElementRefIds"))
270 return false; 273 return false;
271 String rdeId = node.getAttributes().getString("text-roleDescriptionElementRefIds"); 274 Iterator<String> rdeIdIterator = node.getAttributes().getString("text-roleDescriptionElementRefIds");
272 if (rdeId == null) 275 for (; rdeIdIterator.hasNext();) {
273 return false; 276 if (rdeIdIterator.next().equals(filterRdeId))
274 if (rdeId.equals(filterRdeId)) 277 return true;
275 return true; 278 }
276 return false; 279 return false;
277 }, rolePair, "text-roleDescriptionElementRefIds", filterRdeId); 280 }, rolePair, "text-roleDescriptionElementRefIds", filterRdeId);
278 281
279 if (!rdeIdPairIterator.hasNext()) 282 if (!rdeIdPairIterator.hasNext())
280 return false; 283 return false;
281 } 284 }
282 285
283 } 286 }
284 return true; 287 return true;
285 } 288 }
286 289
287 public boolean roleFilter(String id, Pair<TreeNode, NodePath> searchNodePair) { 290 public boolean roleFilter(String id, Pair<TreeNode, NodePath> searchNodePair) {
288 // System.out.println(searchNodePair.getAttributes().getString("id")); 291 // System.out.println(searchNodePair.getAttributes().getString("id"));
289 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 292 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
290 293
291 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = orgTraverser.findInSubTree((TreeNode node) -> { 294 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = orgTraverser.findInSubTree((TreeNode node) -> {
292 String elementName = node.getAttributes().getString("element"); 295 Iterator<String> elementName = node.getAttributes().getString("element");
293 if (elementName == null) 296 if (!elementName.hasNext())
294 return false; 297 return false;
295 if (!elementName.equals("roleRefIds")) 298 if (!elementName.next().equals("roleRefIds"))
296 return false; 299 return false;
297 String roleId = node.getAttributes().getString("text-roleRefIds"); 300 Iterator<String> roleId = node.getAttributes().getString("text-roleRefIds");
298 if (roleId == null) 301 for (; roleId.hasNext();) {
299 return false; 302 if (roleId.next().equals(id))
300 if (roleId.equals(id)) 303 return true;
301 return true; 304 }
302 return false; 305 return false;
303 }, searchNodePair, "text-roleRefIds", id); 306 }, searchNodePair, "text-roleRefIds", id);
304 307
305 if (roleIdPairIterator.hasNext()) { 308 if (roleIdPairIterator.hasNext()) {
306 return false; 309 return false;
307 } 310 }
308 return true; 311 return true;
309 } 312 }
310 313
311 public Iterator<String> roleIds(String id) { 314 public Iterator<String> roleIds(String id) {
312 Pattern personPattern = Pattern.compile("p:"); 315 Pattern personPattern = Pattern.compile("p:");
313 Matcher personMacher = personPattern.matcher(id); 316 Matcher personMacher = personPattern.matcher(id);
314 if (personMacher.find()) { 317 if (personMacher.find()) {
315 return searchRoleIds(personTree, id, "Person"); 318 return searchRoleIds(personTree, id, "Person");
321 return searchRoleIds(organizationTree, id, "Organization"); 324 return searchRoleIds(organizationTree, id, "Organization");
322 } 325 }
323 326
324 return new NullIterator(); 327 return new NullIterator();
325 } 328 }
326
327 329
328 public Iterator<String> searchRoleIds(JungleTree tree, String id, String element) { 330 public Iterator<String> searchRoleIds(JungleTree tree, String id, String element) {
329 331
330 InterfaceTraverser traverser = tree.getTraverser(); 332 InterfaceTraverser traverser = tree.getTraverser();
331 333
332 Iterator<Pair<TreeNode, NodePath>> idPairIterator = traverser.find((TreeNode node) -> { 334 Iterator<Pair<TreeNode, NodePath>> idPairIterator = traverser.find((TreeNode node) -> {
333 String nodeElement = node.getAttributes().getString("element"); 335 Iterator<String> nodeElement = node.getAttributes().getString("element");
334 if (nodeElement == null) 336 if (!nodeElement.hasNext())
335 return false; 337 return false;
336 if (!nodeElement.equals(element)) 338 if (!nodeElement.next().equals(element))
337 return false; 339 return false;
338 String nodeId = node.getAttributes().getString(element + "-id"); 340 Iterator<String> nodeIdIterator = node.getAttributes().getString(element + "-id");
339 if (nodeId == null) 341 for (; nodeIdIterator.hasNext();) {
340 return false; 342 if (nodeIdIterator.next().equals(id))
341 if (nodeId.equals(id)) 343 return true;
342 return true; 344 }
343 return false; 345 return false;
344 }, element + "-id", id); 346 }, element + "-id", id);
345 347
346 TreeMap<String, String> idsTreeMap = TreeMap.empty(Ord.stringOrd); 348 TreeMap<String, String> idsTreeMap = TreeMap.empty(Ord.stringOrd);
347 ;
348 349
349 for (; idPairIterator.hasNext();) { 350 for (; idPairIterator.hasNext();) {
350 351
351 Pair<TreeNode, NodePath> targetPair = idPairIterator.next(); 352 Pair<TreeNode, NodePath> targetPair = idPairIterator.next();
352 353
353 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = traverser.findInSubTreeAllValue((TreeNode node) -> { 354 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = traverser.findInSubTreeAllValue((TreeNode node) -> {
354 String nodeElement = node.getAttributes().getString("element"); 355 Iterator<String> nodeElement = node.getAttributes().getString("element");
355 if (nodeElement == null) 356 if (!nodeElement.hasNext())
356 return false; 357 return false;
357 if (!nodeElement.equals("roleRefId")) 358 if (!nodeElement.next().equals("roleRefId"))
358 return false; 359 return false;
359 String nodeId = node.getAttributes().getString("text-roleRefId"); 360 Iterator<String> nodeIdIterator = node.getAttributes().getString("text-roleRefId");
360 if (nodeId != null) 361 if (nodeIdIterator.hasNext())
361 return true; 362 return true;
362 return false; 363 return false;
363 }, targetPair, "text-roleRefId"); 364 }, targetPair, "text-roleRefId");
364 365
365 for (; roleIdPairIterator.hasNext();) { 366 for (; roleIdPairIterator.hasNext();) {
366 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next(); 367 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next();
367 String roleId = roleIdPair.left().getAttributes().getString("text-roleRefId"); 368 Iterator<String> roleIdIterator = roleIdPair.left().getAttributes().getString("text-roleRefId");
368 idsTreeMap = idsTreeMap.set(roleId, roleId); 369 for (; roleIdIterator.hasNext();) {
370 String roleId = roleIdIterator.next();
371 idsTreeMap = idsTreeMap.set(roleId, roleId);
372 }
369 } 373 }
370 } 374 }
371 375
372 if (idsTreeMap.isEmpty()) 376 if (idsTreeMap.isEmpty())
373 return new NullIterator(); 377 return new NullIterator();
387 return ids.next()._1(); 391 return ids.next()._1();
388 } 392 }
389 393
390 }; 394 };
391 } 395 }
392
393 396
394 public Iterator<String> competentRoleId(String personId) { 397 public Iterator<String> competentRoleId(String personId) {
395 398
396 InterfaceTraverser personTraverser = personTree.getTraverser(); 399 InterfaceTraverser personTraverser = personTree.getTraverser();
397 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> { 400 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> {
398 String nodeElement = node.getAttributes().getString("element"); 401 Iterator<String> nodeElement = node.getAttributes().getString("element");
399 if (nodeElement == null) 402 if (!nodeElement.hasNext())
400 return false; 403 return false;
401 if (!nodeElement.equals("Person")) 404 if (!nodeElement.next().equals("Person"))
402 return false; 405 return false;
403 String nodeId = node.getAttributes().getString("Person-id"); 406 Iterator<String> nodeIdIterator = node.getAttributes().getString("Person-id");
404 if (nodeId == null) 407 if (!nodeIdIterator.hasNext())
405 return false; 408 return false;
406 if (nodeId.equals(personId)) 409 if (nodeIdIterator.next().equals(personId))
407 return true; 410 return true;
408 return false; 411 return false;
409 }, "Person-id", personId); 412 }, "Person-id", personId);
410 413
411 if (!personIdPairIterator.hasNext()) 414 if (!personIdPairIterator.hasNext())
412 return new NullIterator(); 415 return new NullIterator();
413 416
414 Pair<TreeNode, NodePath> personIdPair = personIdPairIterator.next(); 417 Pair<TreeNode, NodePath> personIdPair = personIdPairIterator.next();
415 418
416 Iterator<Pair<TreeNode, NodePath>> priorityPairIterator = personTraverser.findInSubTree((TreeNode node) -> { 419 Iterator<Pair<TreeNode, NodePath>> priorityPairIterator = personTraverser.findInSubTree((TreeNode node) -> {
417 String nodeElement = node.getAttributes().getString("element"); 420 Iterator<String> nodeElement = node.getAttributes().getString("element");
418 if (nodeElement == null) 421 if (!nodeElement.hasNext())
419 return false; 422 return false;
420 if (!nodeElement.equals("priority")) 423 if (!nodeElement.next().equals("priority"))
421 return false; 424 return false;
422 String priority = node.getAttributes().getString("text-priority"); 425 Iterator<String> priorityIterator = node.getAttributes().getString("text-priority");
423 if (priority == null) 426 for (; priorityIterator.hasNext();) {
424 return false; 427 if (priorityIterator.next().equals("0"))
425 if (priority.equals("0")) 428 return true;
426 return true; 429 }
427 return false; 430 return false;
428 }, personIdPair, "text-priority", "0"); 431 }, personIdPair, "text-priority", "0");
429 432
430 TreeMap<String, String> roleIdTreeMap = TreeMap.empty(Ord.stringOrd); 433 TreeMap<String, String> roleIdTreeMap = TreeMap.empty(Ord.stringOrd);
431 434
434 Pair<TreeNode, NodePath> priorityPair = priorityPairIterator.next(); 437 Pair<TreeNode, NodePath> priorityPair = priorityPairIterator.next();
435 NodePath priorityPath = priorityPair.right(); 438 NodePath priorityPath = priorityPair.right();
436 Pair<Integer, NodePath> removeLastPair = priorityPath.last(); 439 Pair<Integer, NodePath> removeLastPair = priorityPath.last();
437 NodePath roleIdNodePath = removeLastPair.right().add(removeLastPair.left() + 1); 440 NodePath roleIdNodePath = removeLastPair.right().add(removeLastPair.left() + 1);
438 TreeNode roleIdNode = getTarget(personTree.getRootNode(), roleIdNodePath); 441 TreeNode roleIdNode = getTarget(personTree.getRootNode(), roleIdNodePath);
439 String roleId = roleIdNode.getAttributes().getString("text-roleRefId"); 442 Iterator<String> roleIdIterator = roleIdNode.getAttributes().getString("text-roleRefId");
440 roleIdTreeMap = roleIdTreeMap.set(roleId, roleId); 443 for (; roleIdIterator.hasNext();) {
444 String roleId = roleIdIterator.next();
445 roleIdTreeMap = roleIdTreeMap.set(roleId, roleId);
446 }
441 } 447 }
442 Iterator<P2<String, String>> roleIdP2Iterator = roleIdTreeMap.iterator(); 448 Iterator<P2<String, String>> roleIdP2Iterator = roleIdTreeMap.iterator();
443 return new Iterator<String>() { 449 return new Iterator<String>() {
444 450
445 @Override 451 @Override
453 public String next() { 459 public String next() {
454 return roleIdP2Iterator.next()._1(); 460 return roleIdP2Iterator.next()._1();
455 } 461 }
456 }; 462 };
457 } 463 }
458 464
459 public Iterator<String> concurrentRoleIds(String personId) { 465 public Iterator<String> concurrentRoleIds(String personId) {
460 466
461 InterfaceTraverser personTraverser = personTree.getTraverser(); 467 InterfaceTraverser personTraverser = personTree.getTraverser();
462 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> { 468 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> {
463 String nodeElement = node.getAttributes().getString("element"); 469 Iterator<String> nodeElement = node.getAttributes().getString("element");
464 if (nodeElement == null) 470 if (!nodeElement.hasNext())
465 return false; 471 return false;
466 if (!nodeElement.equals("Person")) 472 if (!nodeElement.next().equals("Person"))
467 return false; 473 return false;
468 String nodeId = node.getAttributes().getString("Person-id"); 474 Iterator<String> nodeId = node.getAttributes().getString("Person-id");
469 if (nodeId == null) 475 for (; nodeId.hasNext();) {
470 return false; 476 if (nodeId.next().equals(personId))
471 if (nodeId.equals(personId)) 477 return true;
472 return true; 478 }
473 return false; 479 return false;
474 }, "Person-id", personId); 480 }, "Person-id", personId);
475 481
476 if (!personIdPairIterator.hasNext()) 482 if (!personIdPairIterator.hasNext())
477 return new NullIterator(); 483 return new NullIterator();
478 484
479 Pair<TreeNode, NodePath> personidPair = personIdPairIterator.next(); 485 Pair<TreeNode, NodePath> personidPair = personIdPairIterator.next();
480 486
481 Iterator<Pair<TreeNode, NodePath>> priorityPairIterator = personTraverser.findInSubTreeAllValue( 487 Iterator<Pair<TreeNode, NodePath>> priorityPairIterator = personTraverser.findInSubTreeAllValue(
482 (TreeNode node) -> { 488 (TreeNode node) -> {
483 String nodeElement = node.getAttributes().getString("element"); 489 Iterator<String> nodeElement = node.getAttributes().getString("element");
484 if (nodeElement == null) 490 if (!nodeElement.hasNext())
485 return false; 491 return false;
486 if (!nodeElement.equals("priority")) 492 if (!nodeElement.next().equals("priority"))
487 return false; 493 return false;
488 String priority = node.getAttributes().getString("text-priority"); 494 Iterator<String> priorityIterator = node.getAttributes().getString("text-priority");
489 if (priority != null) 495 if (priorityIterator.hasNext())
490 return true; 496 return true;
491 return false; 497 return false;
492 }, personidPair, "text-priority"); 498 }, personidPair, "text-priority");
493 499
494 TreeMap<String, String> roleIdTreeMap = TreeMap.empty(Ord.stringOrd); 500 TreeMap<String, String> roleIdTreeMap = TreeMap.empty(Ord.stringOrd);
495 501
496 for (; priorityPairIterator.hasNext();) { 502 for (; priorityPairIterator.hasNext();) {
497 503
498 Pair<TreeNode, NodePath> priorityPair = priorityPairIterator.next(); 504 Pair<TreeNode, NodePath> priorityPair = priorityPairIterator.next();
499 TreeNode priorityNode = priorityPair.left(); 505 TreeNode priorityNode = priorityPair.left();
500 int priority = Integer.parseInt(priorityNode.getAttributes().getString("text-priority")); 506 Iterator<String> priorityIterator = priorityNode.getAttributes().getString("text-priority");
501 if (priority > 0) { 507 for (; priorityIterator.hasNext();) {
502 NodePath priorityPath = priorityPair.right(); 508 int priority = Integer.parseInt(priorityIterator.next());
503 Pair<Integer, NodePath> removeLastPair = priorityPath.last(); 509 if (priority > 0) {
504 NodePath roleIdNodePath = removeLastPair.right().add(removeLastPair.left() + 1); 510 NodePath priorityPath = priorityPair.right();
505 TreeNode roleIdNode = getTarget(personTree.getRootNode(), roleIdNodePath); 511 Pair<Integer, NodePath> removeLastPair = priorityPath.last();
506 String roleId = roleIdNode.getAttributes().getString("text-roleRefId"); 512 NodePath roleIdNodePath = removeLastPair.right().add(removeLastPair.left() + 1);
507 roleIdTreeMap = roleIdTreeMap.set(roleId, roleId); 513 TreeNode roleIdNode = getTarget(personTree.getRootNode(), roleIdNodePath);
508 } 514 Iterator<String> roleIdIterator = roleIdNode.getAttributes().getString("text-roleRefId");
509 } 515 for (; roleIdIterator.hasNext();) {
516 String roleId = roleIdIterator.next();
517 roleIdTreeMap = roleIdTreeMap.set(roleId, roleId);
518 }
519 }
520 }
521 }
522
510 Iterator<P2<String, String>> roleIdP2Iterator = roleIdTreeMap.iterator(); 523 Iterator<P2<String, String>> roleIdP2Iterator = roleIdTreeMap.iterator();
511 return new Iterator<String>() { 524 return new Iterator<String>() {
512 525
513 @Override 526 @Override
514 public boolean hasNext() { 527 public boolean hasNext() {
521 public String next() { 534 public String next() {
522 return roleIdP2Iterator.next()._1(); 535 return roleIdP2Iterator.next()._1();
523 } 536 }
524 }; 537 };
525 } 538 }
526 539
527 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) { 540 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) {
528 541
529 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd); 542 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd);
530 Iterator<String> childrensIterator = deepChildOrganizationIdsPlus(orgId, filterIds); 543 Iterator<String> childrensIterator = deepChildOrganizationIdsPlus(orgId, filterIds);
531 544
532
533 if (!childrensIterator.hasNext()) 545 if (!childrensIterator.hasNext())
534 return new NullIterator(); 546 return new NullIterator();
535 547
536 for (; childrensIterator.hasNext();) { 548 for (; childrensIterator.hasNext();) {
537 String id = childrensIterator.next(); 549 String id = childrensIterator.next();
555 public String next() { 567 public String next() {
556 return personIds.next()._1(); 568 return personIds.next()._1();
557 } 569 }
558 }; 570 };
559 } 571 }
560
561 572
562 public Iterator<String> deepChildOrganizationIdsPlus(String orgId, LinkedList<String> filterIds) { 573 public Iterator<String> deepChildOrganizationIdsPlus(String orgId, LinkedList<String> filterIds) {
563 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd); 574 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd);
564 575
565 orgIdsTreeMap = orgIdsTreeMap.set(orgId, orgId); 576 orgIdsTreeMap = orgIdsTreeMap.set(orgId, orgId);
587 public String next() { 598 public String next() {
588 return childOrgId; 599 return childOrgId;
589 } 600 }
590 }; 601 };
591 } 602 }
592 603
593 public Iterator<String> deepChildOrganizationIds(String orgId, LinkedList<String> filterIds) { 604 public Iterator<String> deepChildOrganizationIds(String orgId, LinkedList<String> filterIds) {
594 605
595 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd); 606 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd);
596 TreeMap<String, String> newOrgIdsTreeMap = _deepChildOrganizationIds(orgId, orgIdsTreeMap); 607 TreeMap<String, String> newOrgIdsTreeMap = _deepChildOrganizationIds(orgId, orgIdsTreeMap);
597 if (newOrgIdsTreeMap.isEmpty()) 608 if (newOrgIdsTreeMap.isEmpty())
616 } 627 }
617 return false; 628 return false;
618 } 629 }
619 }; 630 };
620 } 631 }
621 632
622 public TreeMap<String, String> _deepChildOrganizationIds(String orgId, TreeMap<String, String> orgIdsTreeMap) { 633 public TreeMap<String, String> _deepChildOrganizationIds(String orgId, TreeMap<String, String> orgIdsTreeMap) {
623 634
624 TreeMap<String, String> childrenIdTreeMap = _childOrganizationIds(orgId, TreeMap.empty(Ord.stringOrd)); 635 TreeMap<String, String> childrenIdTreeMap = _childOrganizationIds(orgId, TreeMap.empty(Ord.stringOrd));
625 636
626 if (childrenIdTreeMap.isEmpty()) 637 if (childrenIdTreeMap.isEmpty())
671 public TreeMap<String, String> _childOrganizationIds(String orgId, TreeMap<String, String> childOrgIdsTreeMap) { 682 public TreeMap<String, String> _childOrganizationIds(String orgId, TreeMap<String, String> childOrgIdsTreeMap) {
672 683
673 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 684 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
674 685
675 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> { 686 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> {
676 String nodeElement = node.getAttributes().getString("element"); 687 Iterator<String> nodeElement = node.getAttributes().getString("element");
677 if (nodeElement == null) 688 if (!nodeElement.hasNext())
678 return false; 689 return false;
679 if (!nodeElement.equals("Organization")) 690 if (!nodeElement.next().equals("Organization"))
680 return false; 691 return false;
681 String nodeId = node.getAttributes().getString("Organization-id"); 692 Iterator<String> nodeIdIterator = node.getAttributes().getString("Organization-id");
682 if (nodeId == null) 693 for (; nodeIdIterator.hasNext();) {
683 return false; 694 if (nodeIdIterator.next().equals(orgId))
684 if (nodeId.equals(orgId)) 695 return true;
685 return true; 696 }
686 return false; 697 return false;
687 }, "Organization-id", orgId); 698 }, "Organization-id", orgId);
688 699
689 if (!orgIdPairIterator.hasNext()) 700 if (!orgIdPairIterator.hasNext())
690 return childOrgIdsTreeMap; 701 return childOrgIdsTreeMap;
691 702
692 Pair<TreeNode, NodePath> orgIdPair = orgIdPairIterator.next(); 703 Pair<TreeNode, NodePath> orgIdPair = orgIdPairIterator.next();
693 704
694 Iterator<Pair<TreeNode, NodePath>> chilrenOrgPairIterator = orgTraverser.findInSubTree((TreeNode node) -> { 705 Iterator<Pair<TreeNode, NodePath>> chilrenOrgPairIterator = orgTraverser.findInSubTree((TreeNode node) -> {
695 String nodeElement = node.getAttributes().getString("element"); 706 Iterator<String> nodeElement = node.getAttributes().getString("element");
696 if (nodeElement == null) 707 if (!nodeElement.hasNext())
697 return false; 708 return false;
698 if (nodeElement.equals("childOrganizations")) 709 if (nodeElement.next().equals("childOrganizations"))
699 return true; 710 return true;
700 return false; 711 return false;
701 }, orgIdPair, "element", "childOrganizations"); 712 }, orgIdPair, "element", "childOrganizations");
702 713
703 if (!chilrenOrgPairIterator.hasNext()) 714 if (!chilrenOrgPairIterator.hasNext())
705 716
706 Pair<TreeNode, NodePath> chilerenOrg = chilrenOrgPairIterator.next(); 717 Pair<TreeNode, NodePath> chilerenOrg = chilrenOrgPairIterator.next();
707 718
708 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdPairIterator = orgTraverser.findInSubTreeAllValue( 719 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdPairIterator = orgTraverser.findInSubTreeAllValue(
709 (TreeNode node) -> { 720 (TreeNode node) -> {
710 String nodeElement = node.getAttributes().getString("element"); 721 Iterator<String> nodeElement = node.getAttributes().getString("element");
711 if (nodeElement == null) 722 if (!nodeElement.hasNext())
712 return false; 723 return false;
713 if (!nodeElement.equals("organizationRefIds")) 724 if (!nodeElement.next().equals("organizationRefIds"))
714 return false; 725 return false;
715 nodeElement = node.getAttributes().getString("text-organizationRefIds"); 726 Iterator<String> nodeText = node.getAttributes().getString("text-organizationRefIds");
716 if (nodeElement != null) 727 if (nodeText.hasNext())
717 return true; 728 return true;
718 return false; 729 return false;
719 }, chilerenOrg, "text-organizationRefIds"); 730 }, chilerenOrg, "text-organizationRefIds");
720 731
721 for (; chilrenOrgIdPairIterator.hasNext();) { 732 for (; chilrenOrgIdPairIterator.hasNext();) {
722 String childrenOrgId = chilrenOrgIdPairIterator.next().left().getAttributes() 733 Iterator<String> childrenOrgIdIterator = chilrenOrgIdPairIterator.next().left().getAttributes()
723 .getString("text-organizationRefIds"); 734 .getString("text-organizationRefIds");
724 childOrgIdsTreeMap = childOrgIdsTreeMap.set(childrenOrgId, childrenOrgId); 735 for (; childrenOrgIdIterator.hasNext();) {
725 736 String childrenOrgId = childrenOrgIdIterator.next();
737 childOrgIdsTreeMap = childOrgIdsTreeMap.set(childrenOrgId, childrenOrgId);
738 }
726 } 739 }
727 740
728 return childOrgIdsTreeMap; 741 return childOrgIdsTreeMap;
729 } 742 }
730 743
745 public String rolePriority(String personId, String roleId) { 758 public String rolePriority(String personId, String roleId) {
746 759
747 InterfaceTraverser personTraverser = personTree.getTraverser(); 760 InterfaceTraverser personTraverser = personTree.getTraverser();
748 761
749 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> { 762 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> {
750 String element = node.getAttributes().getString("element"); 763 Iterator<String> element = node.getAttributes().getString("element");
751 if (element == null) 764 if (!element.hasNext())
752 return false; 765 return false;
753 if (!element.equals("Person")) 766 if (!element.next().equals("Person"))
754 return false; 767 return false;
755 String nodePersonId = node.getAttributes().getString("Person-id"); 768 Iterator<String> nodePersonId = node.getAttributes().getString("Person-id");
756 if (nodePersonId == null) 769 for (; nodePersonId.hasNext();) {
757 return false; 770 if (nodePersonId.next().equals(personId))
758 if (nodePersonId.equals(personId)) 771 return true;
759 return true; 772 }
760 return false; 773 return false;
761 }, "Person-id", personId); 774 }, "Person-id", personId);
762 775
763 if (!personIdPairIterator.hasNext()) 776 if (!personIdPairIterator.hasNext())
764 return ""; 777 return "";
765 778
766 Pair<TreeNode, NodePath> targetPersonIdPair = personIdPairIterator.next(); 779 Pair<TreeNode, NodePath> targetPersonIdPair = personIdPairIterator.next();
767 780
768 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = personTraverser.findInSubTree((TreeNode node) -> { 781 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = personTraverser.findInSubTree((TreeNode node) -> {
769 String element = node.getAttributes().getString("element"); 782 Iterator<String> element = node.getAttributes().getString("element");
770 if (element == null) 783 if (!element.hasNext())
771 return false; 784 return false;
772 if (!element.equals("roleRefId")) 785 if (!element.next().equals("roleRefId"))
773 return false; 786 return false;
774 String compareRoleId = node.getAttributes().getString("text-roleRefId"); 787 Iterator<String> compareRoleId = node.getAttributes().getString("text-roleRefId");
775 if (compareRoleId == null) 788 for (; compareRoleId.hasNext();) {
776 return false; 789 if (compareRoleId.next().equals(roleId))
777 if (compareRoleId.equals(roleId)) 790 return true;
778 return true; 791 }
779 return false; 792 return false;
780 }, targetPersonIdPair, "text-roleRefId", roleId); 793 }, targetPersonIdPair, "text-roleRefId", roleId);
781 794
782 for (; roleIdPairIterator.hasNext();) { 795 for (; roleIdPairIterator.hasNext();) {
783 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next(); 796 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next();
784 NodePath roleIdNodePath = roleIdPair.right(); 797 NodePath roleIdNodePath = roleIdPair.right();
785 Pair<Integer, NodePath> removeLastPath = roleIdNodePath.last(); 798 Pair<Integer, NodePath> removeLastPath = roleIdNodePath.last();
786 NodePath priorityNodePath = removeLastPath.right().add(removeLastPath.left() - 1); 799 NodePath priorityNodePath = removeLastPath.right().add(removeLastPath.left() - 1);
787 TreeNode priorityNode = getTarget(personTree.getRootNode(), priorityNodePath); 800 TreeNode priorityNode = getTarget(personTree.getRootNode(), priorityNodePath);
788 if (priorityNode.getAttributes().getString("element").equals("priority")) 801 Iterator<String> element = priorityNode.getAttributes().getString("element");
789 return priorityNode.getAttributes().getString("text-priority"); 802 if (element.hasNext()) {
803 if (element.next().equals("priority")) {
804 Iterator<String> priority = priorityNode.getAttributes().getString("text-priority");
805 if (priority.hasNext())
806 return priority.next();
807 }
808 }
790 } 809 }
791 return ""; 810 return "";
792 } 811 }
793 812
794 public Iterator<String> parentOrganizationIds(String orgId, LinkedList<String> filterIds) { 813 public Iterator<String> parentOrganizationIds(String orgId, LinkedList<String> filterIds) {
821 840
822 public TreeMap<String, String> _parentOrganizationIds(String orgId) { 841 public TreeMap<String, String> _parentOrganizationIds(String orgId) {
823 842
824 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); 843 InterfaceTraverser orgTraverser = organizationTree.getTraverser();
825 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> { 844 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> {
826 String element = node.getAttributes().getString("element"); 845 Iterator<String> element = node.getAttributes().getString("element");
827 if (element == null) 846 if (!element.hasNext())
828 return false; 847 return false;
829 if (!element.equals("Organization")) 848 if (!element.next().equals("Organization"))
830 return false; 849 return false;
831 String nodeId = node.getAttributes().getString("Organization-id"); 850 Iterator<String> nodeIdIterator = node.getAttributes().getString("Organization-id");
832 if (nodeId == null) 851 for (; nodeIdIterator.hasNext();) {
833 return false; 852 if (nodeIdIterator.next().equals(orgId))
834 if (nodeId.equals(orgId)) 853 return true;
835 return true; 854 }
836 return false; 855 return false;
837 }, "Organization-id", orgId); 856 }, "Organization-id", orgId);
838 857
839 if (!orgIdPairIterator.hasNext()) 858 if (!orgIdPairIterator.hasNext())
840 return TreeMap.empty(Ord.stringOrd); 859 return TreeMap.empty(Ord.stringOrd);
841 860
842 Pair<TreeNode, NodePath> orgNode = orgIdPairIterator.next(); 861 Pair<TreeNode, NodePath> orgNode = orgIdPairIterator.next();
843 862
844 Iterator<Pair<TreeNode, NodePath>> parentOrgPairIterator = orgTraverser.findInSubTree((TreeNode node) -> { 863 Iterator<Pair<TreeNode, NodePath>> parentOrgPairIterator = orgTraverser.findInSubTree((TreeNode node) -> {
845 String element = node.getAttributes().getString("element"); 864 Iterator<String> element = node.getAttributes().getString("element");
846 if (element == null) 865 if (!element.hasNext())
847 return false; 866 return false;
848 if (element.equals("parentOrganizations")) 867 if (element.next().equals("parentOrganizations"))
849 return true; 868 return true;
850 return false; 869 return false;
851 }, orgNode, "element", "parentOrganizations"); 870 }, orgNode, "element", "parentOrganizations");
852 871
853 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd); 872 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd);
855 for (; parentOrgPairIterator.hasNext();) { 874 for (; parentOrgPairIterator.hasNext();) {
856 Pair<TreeNode, NodePath> parentOrgNode = parentOrgPairIterator.next(); 875 Pair<TreeNode, NodePath> parentOrgNode = parentOrgPairIterator.next();
857 876
858 Iterator<Pair<TreeNode, NodePath>> parentOrgIdPairIterator = orgTraverser.findInSubTreeAllValue( 877 Iterator<Pair<TreeNode, NodePath>> parentOrgIdPairIterator = orgTraverser.findInSubTreeAllValue(
859 (TreeNode node) -> { 878 (TreeNode node) -> {
860 String element = node.getAttributes().getString("element"); 879 Iterator<String> element = node.getAttributes().getString("element");
861 if (element == null) 880 if (!element.hasNext())
862 return false; 881 return false;
863 if (!element.equals("organizationRefId")) 882 if (!element.next().equals("organizationRefId"))
864 return false; 883 return false;
865 String parentId = node.getAttributes().getString("text-organizationRefId"); 884 Iterator<String> parentIdIterator = node.getAttributes().getString("text-organizationRefId");
866 if (parentId != null) 885 if (parentIdIterator.hasNext())
867 return true; 886 return true;
868 return false; 887 return false;
869 }, parentOrgNode, "text-organizationRefId"); 888 }, parentOrgNode, "text-organizationRefId");
870 889
871 for (; parentOrgIdPairIterator.hasNext();) { 890 for (; parentOrgIdPairIterator.hasNext();) {
872 String parentId = parentOrgIdPairIterator.next().left().getAttributes().getString("text-organizationRefId"); 891 Iterator<String> parentIdIterator = parentOrgIdPairIterator.next().left().getAttributes()
873 parentIdsTreeMap = parentIdsTreeMap.set(parentId, parentId); 892 .getString("text-organizationRefId");
893 for (; parentIdIterator.hasNext();) {
894 String parentId = parentIdIterator.next();
895 parentIdsTreeMap = parentIdsTreeMap.set(parentId, parentId);
896 }
874 } 897 }
875 898
876 } 899 }
877 900
878 return parentIdsTreeMap; 901 return parentIdsTreeMap;
980 root = rdeTree.getRootNode(); 1003 root = rdeTree.getRootNode();
981 elementName = "RoleDescriptionElement"; 1004 elementName = "RoleDescriptionElement";
982 } 1005 }
983 1006
984 Iterator<Pair<TreeNode, NodePath>> PathNameIterator = traverser.find((TreeNode node) -> { 1007 Iterator<Pair<TreeNode, NodePath>> PathNameIterator = traverser.find((TreeNode node) -> {
985 String element = node.getAttributes().getString("element"); 1008 Iterator<String> element = node.getAttributes().getString("element");
986 if (element == null) 1009 if (!element.hasNext())
987 return false; 1010 return false;
988 if (!element.equals("path")) 1011 if (!element.next().equals("path"))
989 return false; 1012 return false;
990 String pathString = node.getAttributes().getString("text-path"); 1013 Iterator<String> pathStringIterator = node.getAttributes().getString("text-path");
991 if (pathString == null) 1014 for (; pathStringIterator.hasNext();) {
992 return false; 1015 if (pathStringIterator.next().equals(StrPath))
993 if (pathString.equals(StrPath)) 1016 return true;
994 return true; 1017 }
995 return false; 1018 return false;
996 }, "text-path", StrPath); 1019 }, "text-path", StrPath);
997 1020
998 if (!PathNameIterator.hasNext()) 1021 if (!PathNameIterator.hasNext())
999 return ""; 1022 return "";
1001 Pair<TreeNode, NodePath> pathNamePair = PathNameIterator.next(); 1024 Pair<TreeNode, NodePath> pathNamePair = PathNameIterator.next();
1002 NodePath pathNamePath = pathNamePair.right(); 1025 NodePath pathNamePath = pathNamePair.right();
1003 NodePath pathNameIdPath = pathNamePath.last().right(); 1026 NodePath pathNameIdPath = pathNamePath.last().right();
1004 1027
1005 TreeNode pathNameIdNode = getTarget(root, pathNameIdPath); 1028 TreeNode pathNameIdNode = getTarget(root, pathNameIdPath);
1006 String pathNameId = pathNameIdNode.getAttributes().getString(elementName + "-id"); 1029 Iterator<String> pathNameIdIterator = pathNameIdNode.getAttributes().getString(elementName + "-id");
1007 return pathNameId; 1030 if (pathNameIdIterator.hasNext())
1031 return pathNameIdIterator.next();
1032 return "";
1008 } 1033 }
1009 1034
1010 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) { 1035 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) {
1011 1036
1012 Iterator<String> orgIdsIterator = deepParentOrganizationIdsPlus(id, filterIds); 1037 Iterator<String> orgIdsIterator = deepParentOrganizationIdsPlus(id, filterIds);
1048 private Iterator<String> getRde(String roleId) { 1073 private Iterator<String> getRde(String roleId) {
1049 1074
1050 InterfaceTraverser traverser = roleTree.getTraverser(); 1075 InterfaceTraverser traverser = roleTree.getTraverser();
1051 1076
1052 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = traverser.find((TreeNode node) -> { 1077 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = traverser.find((TreeNode node) -> {
1053 String element = node.getAttributes().getString("element"); 1078 Iterator<String> element = node.getAttributes().getString("element");
1054 if (element == null) 1079 if (!element.hasNext())
1055 return false; 1080 return false;
1056 if (!element.equals("Role")) 1081 if (!element.next().equals("Role"))
1057 return false; 1082 return false;
1058 String id = node.getAttributes().getString("Role-id"); 1083 Iterator<String> idIterator = node.getAttributes().getString("Role-id");
1059 if (id == null) 1084 for (; idIterator.hasNext();) {
1060 return false; 1085 if (idIterator.next().equals(roleId))
1061 if (id.equals(roleId)) 1086 return true;
1087 }
1088 return false;
1089 }, "Role-id", roleId);
1090
1091 if (!roleIdPairIterator.hasNext())
1092 return new NullIterator();
1093
1094 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next();
1095
1096 Iterator<Pair<TreeNode, NodePath>> rdeIdPairIterator = traverser.findInSubTreeAllValue((TreeNode node) -> {
1097 Iterator<String> element = node.getAttributes().getString("element");
1098 if (!element.hasNext())
1099 return false;
1100 if (!element.next().equals("roleDescriptionElementRefIds"))
1101 return false;
1102 Iterator<String> rdeIterator = node.getAttributes().getString("text-roleDescriptionElementRefIds");
1103 if (rdeIterator.hasNext())
1062 return true; 1104 return true;
1063 return false; 1105 return false;
1064 }, "Role-id", roleId);
1065
1066 if (!roleIdPairIterator.hasNext())
1067 return new NullIterator();
1068
1069 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next();
1070
1071 Iterator<Pair<TreeNode, NodePath>> rdeIdPairIterator = traverser.findInSubTreeAllValue((TreeNode node) -> {
1072 String element = node.getAttributes().getString("element");
1073 if (element == null)
1074 return false;
1075 if (!element.equals("roleDescriptionElementRefIds"))
1076 return false;
1077 String rde = node.getAttributes().getString("text-roleDescriptionElementRefIds");
1078 if (rde != null)
1079 return true;
1080 return false;
1081 }, roleIdPair, "text-roleDescriptionElementRefIds"); 1106 }, roleIdPair, "text-roleDescriptionElementRefIds");
1082 1107
1083 if (!rdeIdPairIterator.hasNext()) 1108 if (!rdeIdPairIterator.hasNext())
1084 return new NullIterator(); 1109 return new NullIterator();
1085 1110
1086 return new Iterator<String>() { 1111 Iterator<String> rdeIdIterator = rdeIdPairIterator.next().left().getAttributes().getString("text-roleDescriptionElementRefIds");
1087
1088 @Override
1089 public boolean hasNext() {
1090 if (rdeIdPairIterator.hasNext())
1091 return true;
1092 return false;
1093 }
1094
1095 @Override
1096 public String next() {
1097 return rdeIdPairIterator.next().left().getAttributes().getString("text-roleDescriptionElementRefIds");
1098 }
1099 };
1100
1101 }
1102 1112
1113 return new Iterator<String>() {
1114 String rdeId = "";
1115
1116 @Override
1117 public boolean hasNext() {
1118 if (rdeIdIterator.hasNext()) {
1119 rdeId = rdeIdIterator.next();
1120 return true;
1121 }
1122 return false;
1123 }
1124
1125 @Override
1126 public String next() {
1127 return rdeId;
1128 }
1129 };
1130
1131 }
1103 1132
1104 public TreeNode getTarget(TreeNode node, NodePath path) { 1133 public TreeNode getTarget(TreeNode node, NodePath path) {
1105 TreeNode target; 1134 TreeNode target;
1106 Pair<Integer, NodePath> popPath = path.pop(); 1135 Pair<Integer, NodePath> popPath = path.pop();
1107 int num = popPath.left(); 1136 int num = popPath.left();
1119 1148
1120 target = getTarget(child, popPath.right()); 1149 target = getTarget(child, popPath.right());
1121 return target; 1150 return target;
1122 } 1151 }
1123 1152
1124
1125 } 1153 }