Merge lp:~danilovesky/workcraft/trunk-bug-1350399 into lp:workcraft

Proposed by Danil Sokolov
Status: Merged
Merged at revision: 532
Proposed branch: lp:~danilovesky/workcraft/trunk-bug-1350399
Merge into: lp:workcraft
Diff against target: 324 lines (+69/-96)
5 files modified
PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalityDeserialiser.java (+6/-2)
PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalitySerialiser.java (+5/-2)
WorkcraftCore/src/org/workcraft/dom/AbstractModel.java (+0/-2)
WorkcraftCore/src/org/workcraft/dom/hierarchy/NamespaceHelper.java (+1/-0)
WorkcraftCore/src/org/workcraft/dom/references/HierarchicalUniqueNameReferenceManager.java (+57/-90)
To merge this branch: bzr merge lp:~danilovesky/workcraft/trunk-bug-1350399
Reviewer Review Type Date Requested Status
Danil Sokolov Approve
Review via email: mp+228896@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Danil Sokolov (danilovesky) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalityDeserialiser.java'
2--- PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalityDeserialiser.java 2013-10-31 11:44:01 +0000
3+++ PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalityDeserialiser.java 2014-07-30 16:20:36 +0000
4@@ -22,14 +22,18 @@
5 ReferenceResolver externalReferenceResolver, NodeFinaliser nodeFinaliser) throws DeserialisationException
6 {
7 VisualLocality visualLocality = (VisualLocality)instance;
8- visualLocality.setLocality((Locality)externalReferenceResolver.getObject(element.getAttribute("ref")));
9+ String ref = element.getAttribute("ref");
10+ Locality locality = (Locality)externalReferenceResolver.getObject(ref);
11+ visualLocality.setLocality(locality);
12 }
13
14 @Override
15 public Object createInstance(Element element, ReferenceResolver externalReferenceResolver,
16 Object... constructorParameters)
17 {
18- return new VisualLocality((Locality)externalReferenceResolver.getObject(element.getAttribute("ref")));
19+ String ref = element.getAttribute("ref");
20+ Locality locality = (Locality)externalReferenceResolver.getObject(ref);
21+ return new VisualLocality(locality);
22 }
23
24 @Override
25
26=== modified file 'PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalitySerialiser.java'
27--- PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalitySerialiser.java 2013-10-07 09:51:12 +0000
28+++ PolicyNetPlugin/src/org/workcraft/plugins/policy/serialisation/VisualLocalitySerialiser.java 2014-07-30 16:20:36 +0000
29@@ -2,6 +2,7 @@
30
31 import org.w3c.dom.Element;
32 import org.workcraft.exceptions.SerialisationException;
33+import org.workcraft.plugins.policy.Locality;
34 import org.workcraft.plugins.policy.VisualLocality;
35 import org.workcraft.serialisation.ReferenceProducer;
36 import org.workcraft.serialisation.xml.CustomXMLSerialiser;
37@@ -19,8 +20,10 @@
38 public void serialise(Element element, Object object, ReferenceProducer internalReferences,
39 ReferenceProducer externalReferences, NodeSerialiser nodeSerialiser) throws SerialisationException
40 {
41- VisualLocality visualLocality = (VisualLocality) object;
42- element.setAttribute("ref", externalReferences.getReference(visualLocality.getLocality()));
43+ VisualLocality visualLocality = (VisualLocality)object;
44+ Locality locality = visualLocality.getLocality();
45+ String ref = externalReferences.getReference(locality);
46+ element.setAttribute("ref", ref);
47 }
48
49 }
50\ No newline at end of file
51
52=== modified file 'WorkcraftCore/src/org/workcraft/dom/AbstractModel.java'
53--- WorkcraftCore/src/org/workcraft/dom/AbstractModel.java 2014-07-28 13:32:42 +0000
54+++ WorkcraftCore/src/org/workcraft/dom/AbstractModel.java 2014-07-30 16:20:36 +0000
55@@ -155,7 +155,6 @@
56
57 @Override
58 public String getNodeReference(Node node) {
59-
60 return getNodeReference(null, node);
61 }
62
63@@ -166,7 +165,6 @@
64
65 @Override
66 public String getNodeReference(NamespaceProvider provider, Node node) {
67-
68 return referenceManager.getNodeReference(provider, node);
69 }
70
71
72=== modified file 'WorkcraftCore/src/org/workcraft/dom/hierarchy/NamespaceHelper.java'
73--- WorkcraftCore/src/org/workcraft/dom/hierarchy/NamespaceHelper.java 2014-07-28 13:32:42 +0000
74+++ WorkcraftCore/src/org/workcraft/dom/hierarchy/NamespaceHelper.java 2014-07-30 16:20:36 +0000
75@@ -17,6 +17,7 @@
76 public class NamespaceHelper {
77 final static String quoteType = "'";
78 final public static String hierarchySeparator = "/";
79+ final public static String hierarchyRoot = hierarchySeparator;
80 final public static String flatNameSeparator = "__";
81
82 // TODO: make it work with the embedded ' characters
83
84=== modified file 'WorkcraftCore/src/org/workcraft/dom/references/HierarchicalUniqueNameReferenceManager.java'
85--- WorkcraftCore/src/org/workcraft/dom/references/HierarchicalUniqueNameReferenceManager.java 2014-07-28 13:32:42 +0000
86+++ WorkcraftCore/src/org/workcraft/dom/references/HierarchicalUniqueNameReferenceManager.java 2014-07-30 16:20:36 +0000
87@@ -21,37 +21,23 @@
88 // every node belongs to some name space provider (except the main root node of the model)
89 final private HashMap<Node, NamespaceProvider> node2namespace = new HashMap<Node, NamespaceProvider>();
90 private NamespaceProvider topProvider; // namespace provided by root
91-
92 protected Func<Node, String> defaultName;
93 private References existing;
94
95 public HierarchicalUniqueNameReferenceManager(References existing, Func<Node, String> defaultName) {
96-
97 this.existing = existing;
98 this.defaultName = defaultName;
99-
100 }
101-
102-
103
104 public NamespaceProvider getNamespaceProvider(Node node) {
105-
106 NamespaceProvider provider = node2namespace.get(node);
107-
108- if (provider!=null) return provider;
109-
110- Node container = node.getParent();
111- if (container != null)
112- provider = Hierarchy.getNearestAncestor(container, NamespaceProvider.class);
113- else
114- // the root node does not have a provider
115- return null;
116- //provider = topProvider;
117-
118-
119- if (provider!=null)
120- node2namespace.put(node, provider);
121-
122+ if (provider == null) {
123+ Node container = node.getParent();
124+ if (container != null) {
125+ provider = Hierarchy.getNearestAncestor(container, NamespaceProvider.class);
126+ }
127+ }
128+ node2namespace.put(node, provider);
129 return provider;
130 }
131
132@@ -61,34 +47,32 @@
133 }
134
135 public void setNamespaceProvider(Node node, HierarchicalUniqueNameReferenceManager sourceReferenceManager, NamespaceProvider provider) {
136-
137- if (provider==null) provider = topProvider;
138-
139+ if (provider==null) {
140+ provider = topProvider;
141+ }
142 NamespaceProvider oldProvider = sourceReferenceManager.getNamespaceProvider(node);
143- if (oldProvider==null) return;
144-
145- String name = sourceReferenceManager.getName(node);
146-
147- // clear cached data in the local and the foreign reference manager
148- node2namespace.remove(node);
149- sourceReferenceManager.node2namespace.remove(node);
150-
151- // do not assign name if it wasn't assigned in the first place (eg. the implicit place)
152- if (name!=null&&(provider!=oldProvider||node2namespace!=sourceReferenceManager.node2namespace)) {
153- NameManager<Node> oldMan = sourceReferenceManager.getNameManager(oldProvider);
154- NameManager<Node> newMan = getNameManager(provider);
155-
156- oldMan.remove(node);
157-
158- Node checkNode = newMan.get(name);
159- // we must assign some name in any case, be it an old or a new one
160- if (checkNode == null)
161- newMan.setName(node, name);
162- else {
163- newMan.setDefaultNameIfUnnamed(node, name);
164- // the node was not added yet as a child of the target container, so using setName from the reference manager is not possible yet
165+ if (oldProvider != null) {
166+ String name = sourceReferenceManager.getName(node);
167+
168+ // Clear cached data in the local and the foreign reference manager
169+ node2namespace.remove(node);
170+ sourceReferenceManager.node2namespace.remove(node);
171+
172+ // Do not assign name if it wasn't assigned in the first place (eg. the implicit place)
173+ if (name!=null&&(provider!=oldProvider||node2namespace!=sourceReferenceManager.node2namespace)) {
174+ NameManager<Node> oldMan = sourceReferenceManager.getNameManager(oldProvider);
175+ NameManager<Node> newMan = getNameManager(provider);
176+ oldMan.remove(node);
177+ Node checkNode = newMan.get(name);
178+ // We must assign some name in any case, be it an old or a new one
179+ if (checkNode == null) {
180+ newMan.setName(node, name);
181+ } else {
182+ newMan.setDefaultNameIfUnnamed(node, name);
183+ // The node was not added yet as a child of the target container,
184+ // so using setName from the reference manager is not possible yet
185+ }
186 }
187-
188 }
189 }
190
191@@ -96,17 +80,12 @@
192 public void attach(Node root) {
193 // root must be a namespace provider
194 topProvider = (NamespaceProvider)root;
195-
196-
197 if (existing != null) {
198- //setExistingReference(root);
199-
200 for(Node n : Hierarchy.getDescendantsOfType(root, Node.class)) {
201 setExistingReference(n);
202 }
203 existing = null;
204 }
205-
206 super.attach(root);
207 }
208
209@@ -115,7 +94,9 @@
210 }
211
212 protected NameManager<Node> getNameManager(NamespaceProvider provider) {
213- if (provider==null) provider = topProvider;
214+ if (provider==null) {
215+ provider = topProvider;
216+ }
217 NameManager<Node> man = managers.get(provider);
218 if (man==null) {
219 man = createNameManager();
220@@ -145,8 +126,8 @@
221 if (provider==null) {
222 provider = topProvider;
223 }
224- if (reference.equals("")||reference.equals(NamespaceHelper.hierarchySeparator)) {
225- return (Node)provider;
226+ if (reference.equals("") || reference.equals(NamespaceHelper.hierarchySeparator)) {
227+ return provider;
228 }
229 String head = NamespaceHelper.getReferenceHead(reference);
230 String tail = NamespaceHelper.getReferenceTail(reference);
231@@ -161,44 +142,34 @@
232
233 @Override
234 public String getNodeReference(NamespaceProvider provider, Node node) {
235- if (provider==null) {
236+ if (node == topProvider) {
237+ return NamespaceHelper.hierarchyRoot;
238+ }
239+ if (provider == null) {
240 provider = topProvider;
241 }
242-
243- NamespaceProvider prov = null;
244- String ret= "";
245-
246+ NamespaceProvider component = null;
247+ String result = "";
248 do {
249- prov = getNamespaceProvider(node);
250-
251- if (prov==null) break; // we've just reached the root, do not add it's name
252-
253- if (!ret.equals(""))
254- ret= NamespaceHelper.hierarchySeparator+ret;
255-
256-
257- String name = getNameManager(prov).getName(node);
258- // the unnamed component just returns null
259- if (name==null) return null;
260-
261- // for now don't use quotes
262- ret= name+ret;
263- node = node.getParent();
264-
265- } while (prov!=null&&provider!=prov);
266-
267- return ret;
268- // uncomment if the absolute path begins with the separator
269- // return (provider==topProvider&&isAbsolutePath? HierarchicalNames.hierarchySeparator:"")+ret;
270+ component = getNamespaceProvider(node);
271+ if (component != null) {
272+ if (!result.equals("")) {
273+ result = NamespaceHelper.hierarchySeparator + result;
274+ }
275+ String name = getNameManager(component).getName(node);
276+ // The unnamed component just returns null
277+ if (name == null) return null;
278+ result = name + result;
279+ node = node.getParent();
280+ }
281+ } while ((node != null) && (component != null) && (component != provider));
282+ return result;
283 }
284
285-
286 @Override
287 public void handleEvent(HierarchyEvent e) {
288-
289 if (e instanceof NodesAddedEvent) {
290- for(Node node : e.getAffectedNodes()) {
291-
292+ for (Node node : e.getAffectedNodes()) {
293 if (node.getParent()!=null) {
294 // if it is not a root node
295 NamespaceProvider provider = getNamespaceProvider(node);
296@@ -208,21 +179,18 @@
297 // additional call to propagate the name data after calling setDefaultNameIfUnnamed
298 setName(node, name);
299 }
300-
301 for (Node node2 : Hierarchy.getDescendantsOfType(node, Node.class)) {
302 getNameManager(getNamespaceProvider(node2)).setDefaultNameIfUnnamed(node2, null);
303 // additional call to propagate the name data after calling setDefaultNameIfUnnamed
304 setName(node2, getNameManager(getNamespaceProvider(node2)).getName(node2));
305 }
306-
307 }
308 }
309
310- if(e instanceof NodesDeletedEvent) {
311+ if (e instanceof NodesDeletedEvent) {
312 for(Node node : e.getAffectedNodes()) {
313 getNameManager(getNamespaceProvider(node)).remove(node);
314 node2namespace.remove(node);
315-
316 for (Node node2 : Hierarchy.getDescendantsOfType(node, Node.class)) {
317 getNameManager(getNamespaceProvider(node2)).remove(node2);
318 node2namespace.remove(node2);
319@@ -247,5 +215,4 @@
320 return man.getName(node);
321 }
322
323-
324 }

Subscribers

People subscribed via source and target branches