Mercurial > hg > Members > tatsuki > JungleXMLReader
annotate src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 37:c6809d43da62
Merge with 0af5489d54064d1ecbdd5de5b58fae6a5cfef35d
author | one |
---|---|
date | Sun, 09 Nov 2014 23:01:40 +0900 |
parents | f467001679e5 0af5489d5406 |
children | 7e6f1f9b40a8 |
rev | line source |
---|---|
7 | 1 package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs; |
2 | |
3 import java.util.Iterator; | |
11 | 4 import java.util.LinkedList; |
8 | 5 import java.util.regex.Matcher; |
6 import java.util.regex.Pattern; | |
7 | 7 |
32 | 8 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.LoadXml; |
15 | 9 import fj.Ord; |
10 import fj.P2; | |
11 import fj.data.TreeMap; | |
7 | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; | |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; | |
9 | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
7 | 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; |
19 | |
20 public class JuGrix { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
21 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
22 JungleTree personTree; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
23 JungleTree organizationTree; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
24 JungleTree roleTree; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
25 JungleTree rdeTree; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
26 |
28 | 27 public JuGrix(boolean index) { |
28 | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
29 try { |
32 | 30 LoadXml reader = new LoadXml(); |
28 | 31 |
32 if (index == true) { | |
33 personTree = reader.loadTestDataCreateIndex("Person.xml"); | |
34 organizationTree = reader.loadTestDataCreateIndex("Organization.xml"); | |
35 roleTree = reader.loadTestDataCreateIndex("Role.xml"); | |
36 rdeTree = reader.loadTestDataCreateIndex("RoleDescriptionElement.xml"); | |
37 } else { | |
38 personTree = reader.loadTestData("Person.xml"); | |
39 organizationTree = reader.loadTestData("Organization.xml"); | |
40 roleTree = reader.loadTestData("Role.xml"); | |
41 rdeTree = reader.loadTestData("RoleDescriptionElement.xml"); | |
42 } | |
29 | 43 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
44 } catch (Exception e) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
45 e.printStackTrace(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
46 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
47 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
48 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
49 public boolean isActive(String id) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
50 |
33 | 51 InterfaceTraverser personTraverser = personTree.getTraverser(); |
34 | 52 Iterator<Pair<TreeNode, NodePath>> personIdpairIterator = personTraverser.find((TreeNode node) -> { |
30 | 53 String personId = node.getAttributes().getString("Person-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
54 if (personId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
55 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
56 if (personId.equals(id)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
57 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
58 return false; |
30 | 59 }, "Person-id", id); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
60 |
34 | 61 if (personIdpairIterator.hasNext()) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
62 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
63 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
64 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
65 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
66 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
67 public Iterator<String> personIds(String orgId, LinkedList<String> roleIds) { |
33 | 68 |
34 | 69 Iterator<String> parentOrgIdIterator = parentOrganizationIds(orgId, roleIds); |
70 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd); | |
71 | |
72 if (filter(orgId, roleIds)) | |
73 personIdsTreeMap = personIdsSearch(orgId, personIdsTreeMap); | |
33 | 74 |
34 | 75 for (; parentOrgIdIterator.hasNext();) { |
76 personIdsTreeMap = personIdsSearch(parentOrgIdIterator.next(), personIdsTreeMap); | |
33 | 77 } |
31 | 78 |
79 if (personIdsTreeMap.isEmpty()) | |
80 return new NullIterator(); | |
81 | |
82 Iterator<P2<String, String>> personIdsIterator = personIdsTreeMap.iterator(); | |
83 return new Iterator<String>() { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
84 |
31 | 85 @Override |
86 public boolean hasNext() { | |
87 if (personIdsIterator.hasNext()) | |
88 return true; | |
89 return false; | |
90 } | |
91 | |
92 @Override | |
93 public String next() { | |
94 return personIdsIterator.next()._1(); | |
95 } | |
96 | |
97 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
98 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
99 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
100 public Iterator<String> personIds(LinkedList<String> orgIds, LinkedList<String> roleIds) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
101 |
31 | 102 TreeMap<String, String> personIds = TreeMap.empty(Ord.stringOrd); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
103 for (String orgId : orgIds) { |
34 | 104 personIds = personIdsSearch(orgId, personIds); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
105 } |
31 | 106 |
107 if (personIds.isEmpty()) | |
108 return new NullIterator(); | |
109 | |
110 Iterator<P2<String, String>> personIdsIterator = personIds.iterator(); | |
34 | 111 |
31 | 112 return new Iterator<String>() { |
34 | 113 String personId; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
114 |
31 | 115 @Override |
116 public boolean hasNext() { | |
34 | 117 for (; personIdsIterator.hasNext();) { |
118 personId = personIdsIterator.next()._1(); | |
119 if (filter(personId, roleIds)) | |
120 return true; | |
121 } | |
31 | 122 return false; |
123 } | |
124 | |
125 @Override | |
126 public String next() { | |
34 | 127 return personId; |
31 | 128 } |
129 | |
130 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
131 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
132 |
34 | 133 private TreeMap<String, String> personIdsSearch(String orgId, TreeMap<String, String> orgIdsTreeMap) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
134 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
135 InterfaceTraverser personTraverser = personTree.getTraverser(); |
34 | 136 |
137 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.findAll((TreeNode node) -> { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
138 String personId = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
139 if (personId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
140 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
141 if (personId.equals("Person")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
142 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
143 return false; |
31 | 144 }, "Person-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
145 |
34 | 146 for (; personIdPairIterator.hasNext();) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
147 |
34 | 148 Pair<TreeNode, NodePath> personIdPair = personIdPairIterator.next(); |
149 | |
150 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = personTraverser.findInSubTree((TreeNode node) -> { | |
31 | 151 String personId = node.getAttributes().getString("text-organizationRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
152 if (personId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
153 return false; |
34 | 154 if (personId.equals(orgId)) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
155 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
156 return false; |
34 | 157 }, personIdPair, "text-organizationRefId", orgId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
158 |
34 | 159 if (orgIdPairIterator.hasNext()) { |
160 String personId = personIdPair.left().getAttributes().getString("Person-id"); | |
33 | 161 if (personId != null) |
162 orgIdsTreeMap = orgIdsTreeMap.set(personId, personId); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
163 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
164 } |
33 | 165 return orgIdsTreeMap; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
166 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
167 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
168 public boolean filter(String orgId, LinkedList<String> roleIds) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
169 if (roleIds == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
170 return true; |
29 | 171 |
28 | 172 if (roleIds.isEmpty()) |
173 return true; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
174 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
175 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
176 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
177 Iterator<Pair<TreeNode, NodePath>> orgNodeIterator = orgTraverser.find((TreeNode node) -> { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
178 String personId = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
179 if (personId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
180 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
181 if (!personId.equals("Organization")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
182 return false; |
31 | 183 String compareOrgId = node.getAttributes().getString("Organization-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
184 if (compareOrgId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
185 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
186 if (compareOrgId.equals(orgId)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
187 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
188 return false; |
31 | 189 }, "Organization-id", orgId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
190 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
191 if (!orgNodeIterator.hasNext()) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
192 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
193 |
28 | 194 Pair<TreeNode, NodePath> searchNodePair = orgNodeIterator.next(); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
195 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
196 for (String id : roleIds) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
197 Pattern personPattern = Pattern.compile("r:"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
198 Matcher personMacher = personPattern.matcher(id); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
199 if (personMacher.find()) { |
28 | 200 if (roleFilter(id, searchNodePair)) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
201 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
202 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
203 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
204 Pattern organizationPattern = Pattern.compile("rde:"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
205 Matcher organizationMacher = organizationPattern.matcher(id); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
206 if (organizationMacher.find()) { |
28 | 207 if (!rdeFilter(id, searchNodePair)) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
208 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
209 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
210 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
211 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
212 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
213 |
28 | 214 private boolean rdeFilter(String id, Pair<TreeNode, NodePath> searchNodePair) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
215 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
216 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); |
31 | 217 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTreeAllValue((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
218 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
219 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
220 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
221 if (!element.equals("roleRefId")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
222 return false; |
31 | 223 String roleId = node.getAttributes().getString("text-roleRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
224 if (roleId != null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
225 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
226 return false; |
31 | 227 }, searchNodePair, "text-roleRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
228 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
229 TreeMap<String, String> idMap = TreeMap.empty(Ord.stringOrd); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
230 for (; pairIdIterator.hasNext();) { |
31 | 231 String roleId = pairIdIterator.next().left().getAttributes().getString("text-roleRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
232 idMap = idMap.set(roleId, roleId); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
233 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
234 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
235 Iterator<P2<String, String>> ids = idMap.iterator(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
236 InterfaceTraverser roleTraverser = roleTree.getTraverser(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
237 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
238 for (; ids.hasNext();) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
239 String roleId = ids.next()._1(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
240 Iterator<Pair<TreeNode, NodePath>> roleNodeIterator = roleTraverser.find((TreeNode node) -> { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
241 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
242 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
243 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
244 if (!element.equals("Role")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
245 return false; |
31 | 246 String compareRoleId = node.getAttributes().getString("Role-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
247 if (compareRoleId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
248 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
249 if (compareRoleId.equals(roleId)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
250 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
251 return false; |
31 | 252 }, "Role-id", roleId); |
253 | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
254 for (; roleNodeIterator.hasNext();) { |
28 | 255 Pair<TreeNode, NodePath> rolePair = roleNodeIterator.next(); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
256 Iterator<Pair<TreeNode, NodePath>> rdeNodeIterator = roleTraverser.findInSubTree((TreeNode node) -> { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
257 String elementName = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
258 if (elementName == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
259 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
260 if (!elementName.equals("roleDescriptionElementRefIds")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
261 return false; |
31 | 262 String rdeId = node.getAttributes().getString("text-roleDescriptionElementRefIds"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
263 if (rdeId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
264 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
265 Pattern personPattern = Pattern.compile(id); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
266 Matcher personMacher = personPattern.matcher(rdeId); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
267 if (personMacher.find()) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
268 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
269 return false; |
31 | 270 }, rolePair, "text-roleDescriptionElementRefIds", id); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
271 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
272 if (!rdeNodeIterator.hasNext()) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
273 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
274 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
275 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
276 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
277 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
278 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
279 |
28 | 280 public boolean roleFilter(String id, Pair<TreeNode, NodePath> searchNodePair) { |
29 | 281 // System.out.println(searchNodePair.getAttributes().getString("id")); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
282 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
283 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
284 Iterator<Pair<TreeNode, NodePath>> pairIdIterator = orgTraverser.findInSubTree((TreeNode node) -> { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
285 String elementName = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
286 if (elementName == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
287 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
288 if (!elementName.equals("roleRefIds")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
289 return false; |
31 | 290 String roleId = node.getAttributes().getString("text-roleRefIds"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
291 if (roleId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
292 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
293 if (roleId.equals(id)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
294 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
295 return false; |
31 | 296 }, searchNodePair, "text-roleRefIds", id); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
297 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
298 if (pairIdIterator.hasNext()) { |
31 | 299 System.out.println(pairIdIterator.next().left().getAttributes().getString("text-roleRefIds")); |
28 | 300 return false; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
301 } |
28 | 302 return true; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
303 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
304 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
305 public Iterator<String> roleIds(String id) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
306 Pattern personPattern = Pattern.compile("p:"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
307 Matcher personMacher = personPattern.matcher(id); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
308 if (personMacher.find()) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
309 return searchRoleIds(personTree, id, "Person"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
310 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
311 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
312 Pattern organizationPattern = Pattern.compile("o:"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
313 Matcher organizationMacher = organizationPattern.matcher(id); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
314 if (organizationMacher.find()) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
315 return searchRoleIds(organizationTree, id, "Organization"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
316 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
317 |
34 | 318 return new NullIterator(); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
319 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
320 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
321 public Iterator<String> searchRoleIds(JungleTree tree, String id, String element) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
322 |
34 | 323 InterfaceTraverser traverser = tree.getTraverser(); |
324 | |
325 Iterator<Pair<TreeNode, NodePath>> idPairIterator = traverser.find((TreeNode node) -> { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
326 String nodeElement = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
327 if (nodeElement == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
328 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
329 if (!nodeElement.equals(element)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
330 return false; |
31 | 331 String nodeId = node.getAttributes().getString(element + "-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
332 if (nodeId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
333 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
334 if (nodeId.equals(id)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
335 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
336 return false; |
31 | 337 }, element + "-id", id); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
338 |
31 | 339 TreeMap<String, String> idsTreeMap = TreeMap.empty(Ord.stringOrd); |
340 ; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
341 |
34 | 342 for (; idPairIterator.hasNext();) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
343 |
34 | 344 Pair<TreeNode, NodePath> targetPair = idPairIterator.next(); |
345 | |
346 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = traverser.findInSubTreeAllValue((TreeNode node) -> { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
347 String nodeElement = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
348 if (nodeElement == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
349 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
350 if (!nodeElement.equals("roleRefId")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
351 return false; |
31 | 352 String nodeId = node.getAttributes().getString("text-roleRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
353 if (nodeId != null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
354 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
355 return false; |
34 | 356 }, targetPair, "text-roleRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
357 |
34 | 358 for (; roleIdPairIterator.hasNext();) { |
359 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next(); | |
360 String roleId = roleIdPair.left().getAttributes().getString("text-roleRefId"); | |
361 idsTreeMap = idsTreeMap.set(roleId, roleId); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
362 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
363 } |
31 | 364 |
365 if (idsTreeMap.isEmpty()) | |
366 return new NullIterator(); | |
367 | |
368 Iterator<P2<String, String>> ids = idsTreeMap.iterator(); | |
369 return new Iterator<String>() { | |
370 | |
371 @Override | |
372 public boolean hasNext() { | |
373 if (ids.hasNext()) | |
374 return true; | |
375 return false; | |
376 } | |
377 | |
378 @Override | |
379 public String next() { | |
380 return ids.next()._1(); | |
381 } | |
382 | |
383 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
384 } |
33 | 385 |
386 public Iterator<String> competentRoleId(String personId) { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
387 |
33 | 388 InterfaceTraverser personTraverser = personTree.getTraverser(); |
34 | 389 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
390 String nodeElement = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
391 if (nodeElement == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
392 return false; |
33 | 393 if (!nodeElement.equals("Person")) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
394 return false; |
33 | 395 String nodeId = node.getAttributes().getString("Person-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
396 if (nodeId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
397 return false; |
33 | 398 if (nodeId.equals(personId)) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
399 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
400 return false; |
33 | 401 }, "Person-id", personId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
402 |
34 | 403 if (!personIdPairIterator.hasNext()) |
33 | 404 return new NullIterator(); |
28 | 405 |
34 | 406 Pair<TreeNode, NodePath> personIdPair = personIdPairIterator.next(); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
407 |
33 | 408 Iterator<Pair<TreeNode, NodePath>> priorityPairIterator = personTraverser.findInSubTree((TreeNode node) -> { |
409 String nodeElement = node.getAttributes().getString("element"); | |
410 if (nodeElement == null) | |
411 return false; | |
412 if (!nodeElement.equals("priority")) | |
413 return false; | |
414 String priority = node.getAttributes().getString("text-priority"); | |
415 if (priority == null) | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
416 return false; |
33 | 417 if (priority.equals("0")) |
418 return true; | |
419 return false; | |
420 }, personIdPair, "text-priority", "0"); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
421 |
34 | 422 TreeMap<String, String> roleIdTreeMap = TreeMap.empty(Ord.stringOrd); |
423 | |
33 | 424 for (; priorityPairIterator.hasNext();) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
425 |
34 | 426 Pair<TreeNode, NodePath> priorityPair = priorityPairIterator.next(); |
427 NodePath priorityPath = priorityPair.right(); | |
428 Pair<Integer, NodePath> removeLastPair = priorityPath.last(); | |
429 NodePath roleIdNodePath = removeLastPair.right().add(removeLastPair.left() + 1); | |
33 | 430 TreeNode roleIdNode = getTarget(personTree.getRootNode(), roleIdNodePath); |
431 String roleId = roleIdNode.getAttributes().getString("text-roleRefId"); | |
34 | 432 roleIdTreeMap = roleIdTreeMap.set(roleId, roleId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
433 } |
34 | 434 Iterator<P2<String, String>> roleIdP2Iterator = roleIdTreeMap.iterator(); |
31 | 435 return new Iterator<String>() { |
436 | |
437 @Override | |
438 public boolean hasNext() { | |
34 | 439 if (roleIdP2Iterator.hasNext()) |
31 | 440 return true; |
441 return false; | |
442 } | |
443 | |
444 @Override | |
445 public String next() { | |
34 | 446 return roleIdP2Iterator.next()._1(); |
31 | 447 } |
448 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
449 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
450 |
33 | 451 public Iterator<String> concurrentRoleIds(String personId) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
452 |
33 | 453 InterfaceTraverser personTraverser = personTree.getTraverser(); |
34 | 454 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> { |
28 | 455 String nodeElement = node.getAttributes().getString("element"); |
456 if (nodeElement == null) | |
457 return false; | |
458 if (!nodeElement.equals("Person")) | |
459 return false; | |
460 String nodeId = node.getAttributes().getString("Person-id"); | |
461 if (nodeId == null) | |
462 return false; | |
463 if (nodeId.equals(personId)) | |
464 return true; | |
465 return false; | |
466 }, "Person-id", personId); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
467 |
34 | 468 if (!personIdPairIterator.hasNext()) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
469 return new NullIterator(); |
34 | 470 |
471 Pair<TreeNode, NodePath> personidPair = personIdPairIterator.next(); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
472 |
34 | 473 Iterator<Pair<TreeNode, NodePath>> priorityPairIterator = personTraverser.findInSubTreeAllValue( |
474 (TreeNode node) -> { | |
475 String nodeElement = node.getAttributes().getString("element"); | |
476 if (nodeElement == null) | |
477 return false; | |
478 if (!nodeElement.equals("priority")) | |
479 return false; | |
480 String priority = node.getAttributes().getString("text-priority"); | |
481 if (priority != null) | |
482 return true; | |
483 return false; | |
484 }, personidPair, "text-priority"); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
485 |
34 | 486 TreeMap<String, String> roleIdTreeMap = TreeMap.empty(Ord.stringOrd); |
487 | |
33 | 488 for (; priorityPairIterator.hasNext();) { |
34 | 489 |
33 | 490 Pair<TreeNode, NodePath> priorityPair = priorityPairIterator.next(); |
491 TreeNode priorityNode = priorityPair.left(); | |
492 int priority = Integer.parseInt(priorityNode.getAttributes().getString("text-priority")); | |
29 | 493 if (priority > 0) { |
34 | 494 NodePath priorityPath = priorityPair.right(); |
495 Pair<Integer, NodePath> removeLastPair = priorityPath.last(); | |
496 NodePath roleIdNodePath = removeLastPair.right().add(removeLastPair.left() + 1); | |
29 | 497 TreeNode roleIdNode = getTarget(personTree.getRootNode(), roleIdNodePath); |
33 | 498 String roleId = roleIdNode.getAttributes().getString("text-roleRefId"); |
34 | 499 roleIdTreeMap = roleIdTreeMap.set(roleId, roleId); |
29 | 500 } |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
501 } |
33 | 502 Iterator<P2<String, String>> roleIdP2Iterator = roleIdTreeMap.iterator(); |
31 | 503 return new Iterator<String>() { |
504 | |
505 @Override | |
506 public boolean hasNext() { | |
33 | 507 if (roleIdP2Iterator.hasNext()) |
31 | 508 return true; |
509 return false; | |
510 } | |
511 | |
512 @Override | |
513 public String next() { | |
33 | 514 return roleIdP2Iterator.next()._1(); |
515 } | |
516 }; | |
517 } | |
518 | |
519 public Iterator<String> deepPersonIds(String orgId, LinkedList<String> filterIds) { | |
34 | 520 |
33 | 521 TreeMap<String, String> personIdsTreeMap = TreeMap.empty(Ord.stringOrd); |
34 | 522 Iterator<String> childrensIterator = deepChildOrganizationIdsPlus(orgId, filterIds); |
33 | 523 |
31 | 524 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
525 if (!childrensIterator.hasNext()) |
33 | 526 return new NullIterator(); |
527 | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
528 for (; childrensIterator.hasNext();) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
529 String id = childrensIterator.next(); |
34 | 530 personIdsTreeMap = personIdsSearch(id, personIdsTreeMap); |
33 | 531 } |
532 | |
533 if (personIdsTreeMap.isEmpty()) | |
534 return new NullIterator(); | |
34 | 535 |
31 | 536 Iterator<P2<String, String>> personIds = personIdsTreeMap.iterator(); |
33 | 537 return new Iterator<String>() { |
538 | |
539 @Override | |
540 public boolean hasNext() { | |
31 | 541 if (personIds.hasNext()) |
33 | 542 return true; |
543 return false; | |
544 } | |
545 | |
546 @Override | |
547 public String next() { | |
31 | 548 return personIds.next()._1(); |
549 } | |
550 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
551 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
552 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
553 public Iterator<String> deepChildOrganizationIdsPlus(String orgId, LinkedList<String> filterIds) { |
31 | 554 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd); |
34 | 555 |
556 orgIdsTreeMap = orgIdsTreeMap.set(orgId, orgId); | |
557 orgIdsTreeMap = _deepChildOrganizationIds(orgId, orgIdsTreeMap); | |
31 | 558 |
559 if (orgIdsTreeMap.isEmpty()) | |
560 return new NullIterator(); | |
561 | |
34 | 562 Iterator<P2<String, String>> orgIdsP2Iterator = orgIdsTreeMap.iterator(); |
31 | 563 return new Iterator<String>() { |
564 | |
34 | 565 String childOrgId; |
566 | |
31 | 567 @Override |
568 public boolean hasNext() { | |
34 | 569 for (; orgIdsP2Iterator.hasNext();) { |
570 childOrgId = orgIdsP2Iterator.next()._1(); | |
571 if (filter(childOrgId, filterIds)) | |
572 return true; | |
573 } | |
31 | 574 return false; |
575 } | |
576 | |
577 @Override | |
578 public String next() { | |
34 | 579 return childOrgId; |
31 | 580 } |
581 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
582 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
583 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
584 public Iterator<String> deepChildOrganizationIds(String orgId, LinkedList<String> filterIds) { |
31 | 585 |
586 TreeMap<String, String> orgIdsTreeMap = TreeMap.empty(Ord.stringOrd); | |
34 | 587 TreeMap<String, String> newOrgIdsTreeMap = _deepChildOrganizationIds(orgId, orgIdsTreeMap); |
31 | 588 if (newOrgIdsTreeMap.isEmpty()) |
589 return new NullIterator(); | |
590 | |
34 | 591 Iterator<P2<String, String>> orgIdP2Iterator = newOrgIdsTreeMap.iterator(); |
592 | |
31 | 593 return new Iterator<String>() { |
34 | 594 String childOrgId; |
31 | 595 |
596 @Override | |
597 public String next() { | |
34 | 598 return childOrgId; |
31 | 599 } |
600 | |
601 @Override | |
602 public boolean hasNext() { | |
34 | 603 for (; orgIdP2Iterator.hasNext();) { |
604 childOrgId = orgIdP2Iterator.next()._1(); | |
605 if (filter(childOrgId, filterIds)) | |
606 return true; | |
607 } | |
31 | 608 return false; |
609 } | |
610 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
611 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
612 |
34 | 613 public TreeMap<String, String> _deepChildOrganizationIds(String orgId, TreeMap<String, String> orgIdsTreeMap) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
614 |
34 | 615 TreeMap<String, String> childrenIdTreeMap = _childOrganizationIds(orgId, TreeMap.empty(Ord.stringOrd)); |
616 | |
617 if (childrenIdTreeMap.isEmpty()) | |
31 | 618 return orgIdsTreeMap; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
619 |
34 | 620 Iterator<P2<String, String>> childrenIdIterator = childrenIdTreeMap.iterator(); |
621 | |
622 for (; childrenIdIterator.hasNext();) { | |
623 String childrenId = childrenIdIterator.next()._1(); | |
624 orgIdsTreeMap = orgIdsTreeMap.set(childrenId, childrenId); | |
625 orgIdsTreeMap = _deepChildOrganizationIds(childrenId, orgIdsTreeMap); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
626 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
627 |
31 | 628 return orgIdsTreeMap; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
629 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
630 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
631 public Iterator<String> childOrganizationIds(String orgId, LinkedList<String> filterIds) { |
31 | 632 TreeMap<String, String> childrenOrgIdTreeMap = TreeMap.empty(Ord.stringOrd); |
34 | 633 TreeMap<String, String> newChildrenOrgIdTreeMap = _childOrganizationIds(orgId, childrenOrgIdTreeMap); |
31 | 634 |
635 if (newChildrenOrgIdTreeMap.isEmpty()) | |
636 return new NullIterator(); | |
637 | |
638 Iterator<P2<String, String>> childrenOrgIdIterator = newChildrenOrgIdTreeMap.iterator(); | |
34 | 639 |
31 | 640 return new Iterator<String>() { |
34 | 641 String childOrgId; |
31 | 642 |
643 @Override | |
644 public boolean hasNext() { | |
34 | 645 |
646 if (childrenOrgIdIterator.hasNext()) { | |
647 childOrgId = childrenOrgIdIterator.next()._1(); | |
648 if (filter(childOrgId, filterIds)) | |
649 return true; | |
650 } | |
31 | 651 return false; |
652 } | |
653 | |
654 @Override | |
655 public String next() { | |
34 | 656 return childOrgId; |
31 | 657 } |
658 }; | |
659 | |
660 } | |
661 | |
34 | 662 public TreeMap<String, String> _childOrganizationIds(String orgId, TreeMap<String, String> childOrgIdsTreeMap) { |
28 | 663 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
664 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); |
28 | 665 |
34 | 666 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
667 String nodeElement = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
668 if (nodeElement == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
669 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
670 if (!nodeElement.equals("Organization")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
671 return false; |
28 | 672 String nodeId = node.getAttributes().getString("Organization-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
673 if (nodeId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
674 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
675 if (nodeId.equals(orgId)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
676 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
677 return false; |
28 | 678 }, "Organization-id", orgId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
679 |
34 | 680 if (!orgIdPairIterator.hasNext()) |
31 | 681 return childOrgIdsTreeMap; |
28 | 682 |
34 | 683 Pair<TreeNode, NodePath> orgIdPair = orgIdPairIterator.next(); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
684 |
34 | 685 Iterator<Pair<TreeNode, NodePath>> chilrenOrgPairIterator = orgTraverser.findInSubTree((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
686 String nodeElement = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
687 if (nodeElement == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
688 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
689 if (nodeElement.equals("childOrganizations")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
690 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
691 return false; |
34 | 692 }, orgIdPair, "element", "childOrganizations"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
693 |
34 | 694 if (!chilrenOrgPairIterator.hasNext()) |
31 | 695 return childOrgIdsTreeMap; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
696 |
34 | 697 Pair<TreeNode, NodePath> chilerenOrg = chilrenOrgPairIterator.next(); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
698 |
34 | 699 Iterator<Pair<TreeNode, NodePath>> chilrenOrgIdPairIterator = orgTraverser.findInSubTreeAllValue( |
700 (TreeNode node) -> { | |
701 String nodeElement = node.getAttributes().getString("element"); | |
702 if (nodeElement == null) | |
703 return false; | |
704 if (!nodeElement.equals("organizationRefIds")) | |
705 return false; | |
706 nodeElement = node.getAttributes().getString("text-organizationRefIds"); | |
707 if (nodeElement != null) | |
708 return true; | |
709 return false; | |
710 }, chilerenOrg, "text-organizationRefIds"); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
711 |
33 | 712 for (; chilrenOrgIdPairIterator.hasNext();) { |
34 | 713 String childrenOrgId = chilrenOrgIdPairIterator.next().left().getAttributes() |
714 .getString("text-organizationRefIds"); | |
715 childOrgIdsTreeMap = childOrgIdsTreeMap.set(childrenOrgId, childrenOrgId); | |
28 | 716 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
717 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
718 |
31 | 719 return childOrgIdsTreeMap; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
720 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
721 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
722 public TreeNode getTarget(TreeNode node, NodePath path) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
723 TreeNode target; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
724 Pair<Integer, NodePath> pathNode = path.pop(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
725 int num = pathNode.left(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
726 NodePath newPath = pathNode.right(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
727 if (num == -1 && newPath.size() != 0) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
728 return getTarget(node, newPath); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
729 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
730 Either<Error, TreeNode> either = node.getChildren().at(num); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
731 if (either.isA()) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
732 return node; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
733 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
734 TreeNode child = either.b(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
735 if (pathNode.right().size() == 0) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
736 return child; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
737 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
738 target = getTarget(child, pathNode.right()); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
739 return target; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
740 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
741 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
742 class NullIterator implements Iterator<String> { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
743 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
744 @Override |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
745 public boolean hasNext() { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
746 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
747 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
748 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
749 @Override |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
750 public String next() { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
751 return null; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
752 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
753 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
754 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
755 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
756 public String rolePriority(String personId, String roleId) { |
34 | 757 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
758 InterfaceTraverser personTraverser = personTree.getTraverser(); |
34 | 759 |
33 | 760 Iterator<Pair<TreeNode, NodePath>> personIdPairIterator = personTraverser.find((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
761 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
762 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
763 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
764 if (!element.equals("Person")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
765 return false; |
34 | 766 String nodePersonId = node.getAttributes().getString("Person-id"); |
767 if (nodePersonId == null) | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
768 return false; |
34 | 769 if (nodePersonId.equals(personId)) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
770 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
771 return false; |
31 | 772 }, "Person-id", personId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
773 |
33 | 774 if (!personIdPairIterator.hasNext()) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
775 return ""; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
776 |
34 | 777 Pair<TreeNode, NodePath> targetPersonIdPair = personIdPairIterator.next(); |
28 | 778 |
33 | 779 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = personTraverser.findInSubTree((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
780 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
781 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
782 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
783 if (!element.equals("roleRefId")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
784 return false; |
31 | 785 String compareRoleId = node.getAttributes().getString("text-roleRefId"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
786 if (compareRoleId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
787 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
788 if (compareRoleId.equals(roleId)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
789 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
790 return false; |
34 | 791 }, targetPersonIdPair, "text-roleRefId", roleId); |
11 | 792 |
33 | 793 for (; roleIdPairIterator.hasNext();) { |
794 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next(); | |
34 | 795 NodePath roleIdNodePath = roleIdPair.right(); |
796 Pair<Integer, NodePath> removeLastPath = roleIdNodePath.last(); | |
797 NodePath priorityNodePath = removeLastPath.right().add(removeLastPath.left() - 1); | |
31 | 798 TreeNode priorityNode = getTarget(personTree.getRootNode(), priorityNodePath); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
799 if (priorityNode.getAttributes().getString("element").equals("priority")) |
31 | 800 return priorityNode.getAttributes().getString("text-priority"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
801 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
802 return ""; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
803 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
804 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
805 public Iterator<String> parentOrganizationIds(String orgId, LinkedList<String> filterIds) { |
34 | 806 |
807 TreeMap<String, String> parentIdsTreeMap = _parentOrganizationIds(orgId); | |
808 if (parentIdsTreeMap.isEmpty()) | |
809 return new NullIterator(); | |
810 | |
811 Iterator<P2<String, String>> parentIdP2Iterator = parentIdsTreeMap.iterator(); | |
812 return new Iterator<String>() { | |
813 String parentId; | |
814 | |
815 @Override | |
816 public boolean hasNext() { | |
817 for (; parentIdP2Iterator.hasNext();) { | |
818 parentId = parentIdP2Iterator.next()._1(); | |
819 if (filter(parentId, filterIds)) | |
820 return true; | |
821 } | |
822 return false; | |
823 } | |
824 | |
825 @Override | |
826 public String next() { | |
827 return parentId; | |
828 } | |
829 | |
830 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
831 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
832 |
34 | 833 public TreeMap<String, String> _parentOrganizationIds(String orgId) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
834 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
835 InterfaceTraverser orgTraverser = organizationTree.getTraverser(); |
34 | 836 Iterator<Pair<TreeNode, NodePath>> orgIdPairIterator = orgTraverser.find((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
837 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
838 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
839 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
840 if (!element.equals("Organization")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
841 return false; |
31 | 842 String nodeId = node.getAttributes().getString("Organization-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
843 if (nodeId == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
844 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
845 if (nodeId.equals(orgId)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
846 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
847 return false; |
31 | 848 }, "Organization-id", orgId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
849 |
34 | 850 if (!orgIdPairIterator.hasNext()) |
851 return TreeMap.empty(Ord.stringOrd); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
852 |
34 | 853 Pair<TreeNode, NodePath> orgNode = orgIdPairIterator.next(); |
28 | 854 |
34 | 855 Iterator<Pair<TreeNode, NodePath>> parentOrgPairIterator = orgTraverser.findInSubTree((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
856 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
857 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
858 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
859 if (element.equals("parentOrganizations")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
860 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
861 return false; |
28 | 862 }, orgNode, "element", "parentOrganizations"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
863 |
31 | 864 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
865 |
34 | 866 for (; parentOrgPairIterator.hasNext();) { |
867 Pair<TreeNode, NodePath> parentOrgNode = parentOrgPairIterator.next(); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
868 |
34 | 869 Iterator<Pair<TreeNode, NodePath>> parentOrgIdPairIterator = orgTraverser.findInSubTreeAllValue( |
870 (TreeNode node) -> { | |
871 String element = node.getAttributes().getString("element"); | |
872 if (element == null) | |
873 return false; | |
874 if (!element.equals("organizationRefId")) | |
875 return false; | |
876 String parentId = node.getAttributes().getString("text-organizationRefId"); | |
877 if (parentId != null) | |
878 return true; | |
879 return false; | |
880 }, parentOrgNode, "text-organizationRefId"); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
881 |
34 | 882 for (; parentOrgIdPairIterator.hasNext();) { |
883 String parentId = parentOrgIdPairIterator.next().left().getAttributes().getString("text-organizationRefId"); | |
884 parentIdsTreeMap = parentIdsTreeMap.set(parentId, parentId); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
885 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
886 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
887 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
888 |
34 | 889 return parentIdsTreeMap; |
31 | 890 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
891 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
892 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
893 public Iterator<String> deepParentOrganizationIds(String orgId, LinkedList<String> filterIds) { |
31 | 894 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd); |
34 | 895 TreeMap<String, String> newParentIdsTreeMap = _deepParentOrganizationIds(orgId, parentIdsTreeMap); |
896 | |
897 if (newParentIdsTreeMap.isEmpty()) | |
898 return new NullIterator(); | |
899 | |
900 Iterator<P2<String, String>> parentIds = newParentIdsTreeMap.iterator(); | |
901 | |
31 | 902 return new Iterator<String>() { |
34 | 903 String parentOrgId; |
31 | 904 |
905 @Override | |
906 public boolean hasNext() { | |
34 | 907 for (; parentIds.hasNext();) { |
908 parentOrgId = parentIds.next()._1(); | |
909 if (filter(parentOrgId, filterIds)) | |
910 return true; | |
911 } | |
31 | 912 return false; |
913 } | |
914 | |
915 @Override | |
916 public String next() { | |
34 | 917 return parentOrgId; |
31 | 918 } |
919 | |
920 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
921 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
922 |
34 | 923 public TreeMap<String, String> _deepParentOrganizationIds(String orgId, TreeMap<String, String> orgIds) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
924 |
34 | 925 TreeMap<String, String> parentIdsTreeMap = _parentOrganizationIds(orgId); |
926 | |
927 if (parentIdsTreeMap.isEmpty()) | |
31 | 928 return orgIds; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
929 |
34 | 930 Iterator<P2<String, String>> parentIdsIterator = parentIdsTreeMap.iterator(); |
931 for (; parentIdsIterator.hasNext();) { | |
932 String parentId = parentIdsIterator.next()._1(); | |
933 orgIds = orgIds.set(parentId, parentId); | |
934 orgIds = _deepParentOrganizationIds(parentId, orgIds); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
935 } |
31 | 936 return orgIds; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
937 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
938 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
939 public Iterator<String> deepParentOrganizationIdsPlus(String id, LinkedList<String> filterIds) { |
34 | 940 |
31 | 941 TreeMap<String, String> parentIdsTreeMap = TreeMap.empty(Ord.stringOrd); |
34 | 942 |
943 parentIdsTreeMap = parentIdsTreeMap.set(id, id); | |
944 parentIdsTreeMap = _deepParentOrganizationIds(id, parentIdsTreeMap); | |
31 | 945 |
946 if (parentIdsTreeMap.isEmpty()) | |
947 return new NullIterator(); | |
948 | |
949 Iterator<P2<String, String>> personIds = parentIdsTreeMap.iterator(); | |
950 return new Iterator<String>() { | |
34 | 951 String parentOrgId; |
31 | 952 |
953 @Override | |
954 public boolean hasNext() { | |
34 | 955 for (; personIds.hasNext();) { |
956 parentOrgId = personIds.next()._1(); | |
957 if (filter(parentOrgId, filterIds)) | |
958 return true; | |
959 } | |
31 | 960 return false; |
961 } | |
962 | |
963 @Override | |
964 public String next() { | |
34 | 965 return parentOrgId; |
31 | 966 } |
967 | |
968 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
969 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
970 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
971 public String stringPathToId(String args) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
972 String[] splitPath = args.split(":"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
973 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
974 String str = splitPath[2]; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
975 for (int count = 3; count < splitPath.length; count++) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
976 str = str + ":" + splitPath[count]; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
977 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
978 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
979 final String StrPath = str; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
980 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
981 InterfaceTraverser traverser = null; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
982 TreeNode root = null; |
31 | 983 String elementName = null; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
984 if (splitPath[0].equals("r")) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
985 traverser = roleTree.getTraverser(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
986 root = roleTree.getRootNode(); |
31 | 987 elementName = "Role"; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
988 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
989 if (splitPath[0].equals("rde")) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
990 traverser = rdeTree.getTraverser(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
991 root = rdeTree.getRootNode(); |
31 | 992 elementName = "RoleDescriptionElement"; |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
993 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
994 |
34 | 995 Iterator<Pair<TreeNode, NodePath>> PathNameIterator = traverser.find((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
996 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
997 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
998 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
999 if (!element.equals("path")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1000 return false; |
31 | 1001 String pathString = node.getAttributes().getString("text-path"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1002 if (pathString == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1003 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1004 if (pathString.equals(StrPath)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1005 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1006 return false; |
31 | 1007 }, "text-path", StrPath); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1008 |
34 | 1009 if (!PathNameIterator.hasNext()) |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1010 return ""; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1011 |
34 | 1012 Pair<TreeNode, NodePath> pathNamePair = PathNameIterator.next(); |
1013 NodePath pathNamePath = pathNamePair.right(); | |
1014 NodePath pathNameIdPath = pathNamePath.last().right(); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1015 |
34 | 1016 TreeNode pathNameIdNode = getTarget(root, pathNameIdPath); |
1017 String pathNameId = pathNameIdNode.getAttributes().getString(elementName + "-id"); | |
1018 return pathNameId; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1019 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1020 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1021 public Iterator<String> roleDescriptionElementIds(String id, LinkedList<String> filterIds) { |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1022 |
34 | 1023 Iterator<String> orgIdsIterator = deepParentOrganizationIdsPlus(id, filterIds); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1024 |
34 | 1025 TreeMap<String, String> rdeIdsTreeMap = TreeMap.empty(Ord.stringOrd); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1026 |
34 | 1027 for (; orgIdsIterator.hasNext();) { |
1028 String orgId = orgIdsIterator.next(); | |
1029 Iterator<String> roleIdIteraotr = roleIds(orgId); | |
1030 for (; roleIdIteraotr.hasNext();) { | |
1031 String roleId = roleIdIteraotr.next(); | |
1032 Iterator<String> rdeIdIterator = getRde(roleId); | |
1033 for (; rdeIdIterator.hasNext();) { | |
1034 String rdeId = rdeIdIterator.next(); | |
1035 rdeIdsTreeMap = rdeIdsTreeMap.set(rdeId, rdeId); | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1036 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1037 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1038 } |
31 | 1039 if (rdeIdsTreeMap.isEmpty()) |
1040 return new NullIterator(); | |
34 | 1041 |
31 | 1042 Iterator<P2<String, String>> rdeIds = rdeIdsTreeMap.iterator(); |
1043 return new Iterator<String>() { | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1044 |
31 | 1045 @Override |
1046 public boolean hasNext() { | |
1047 if (rdeIds.hasNext()) | |
1048 return true; | |
1049 return false; | |
1050 } | |
1051 | |
1052 @Override | |
1053 public String next() { | |
1054 return rdeIds.next()._1(); | |
1055 } | |
1056 }; | |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1057 } |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1058 |
31 | 1059 private Iterator<String> getRde(String roleId) { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1060 |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1061 InterfaceTraverser traverser = roleTree.getTraverser(); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1062 |
34 | 1063 Iterator<Pair<TreeNode, NodePath>> roleIdPairIterator = traverser.find((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1064 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1065 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1066 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1067 if (!element.equals("Role")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1068 return false; |
31 | 1069 String id = node.getAttributes().getString("Role-id"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1070 if (id == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1071 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1072 if (id.equals(roleId)) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1073 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1074 return false; |
31 | 1075 }, "Role-id", roleId); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1076 |
34 | 1077 if (!roleIdPairIterator.hasNext()) |
31 | 1078 return new NullIterator(); |
12 | 1079 |
34 | 1080 Pair<TreeNode, NodePath> roleIdPair = roleIdPairIterator.next(); |
12 | 1081 |
34 | 1082 Iterator<Pair<TreeNode, NodePath>> rdeIdPairIterator = traverser.findInSubTreeAllValue((TreeNode node) -> { |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1083 String element = node.getAttributes().getString("element"); |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1084 if (element == null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1085 return false; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1086 if (!element.equals("roleDescriptionElementRefIds")) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1087 return false; |
31 | 1088 String rde = node.getAttributes().getString("text-roleDescriptionElementRefIds"); |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1089 if (rde != null) |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1090 return true; |
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1091 return false; |
34 | 1092 }, roleIdPair, "text-roleDescriptionElementRefIds"); |
7 | 1093 |
34 | 1094 if (!rdeIdPairIterator.hasNext()) |
31 | 1095 return new NullIterator(); |
1096 | |
1097 return new Iterator<String>() { | |
10 | 1098 |
31 | 1099 @Override |
1100 public boolean hasNext() { | |
34 | 1101 if (rdeIdPairIterator.hasNext()) |
31 | 1102 return true; |
1103 return false; | |
1104 } | |
1105 | |
1106 @Override | |
1107 public String next() { | |
34 | 1108 return rdeIdPairIterator.next().left().getAttributes().getString("text-roleDescriptionElementRefIds"); |
31 | 1109 } |
1110 }; | |
34 | 1111 |
26
ef3fae2e7f0c
add ReadXmlNodeCreateIndexJandler and ReadXmlPutAttributeCreate
one
parents:
25
diff
changeset
|
1112 } |
36 | 1113 |
1114 } | |
21 | 1115 |