1   /*
2    * Copyright (c) 2005, The K-Wf Grid Consortium
3    * Fraunhofer Institute for Computer Architecture and Software Technology
4    * See http://www.kwfgrid.eu and http://www.first.fraunhofer.de for more details.
5    */
6   package net.kwfgrid.gworkflowdl.protocol.calls;
7   
8   import junit.framework.TestCase;
9   import net.kwfgrid.gworkflowdl.protocol.structure.*;
10  import net.kwfgrid.gworkflowdl.structure.*;
11  import net.kwfgrid.gworkflowdl.OperationCandidateTest;
12  import org.apache.log4j.Logger;
13  import org.jdom.Element;
14  
15  import java.util.LinkedList;
16  import java.util.List;
17  
18  /***
19   * Test for the method calls.
20   */
21  public class TestCalls extends TestCase {
22      protected class Event {
23          public static final String ADD = "ADD";
24          public static final String REMOVE = "REMOVE";
25          public static final String CHANGE = "CHANGE";
26  
27          public String type = null;
28          public Object value;
29          public Object[] objects;
30          public String name;
31          public String namespace;
32          public IStructureObject parent;
33  
34          public Event(IStructureObject parent, String namespace, String name, Object[] objects, String type) {
35              this(parent, namespace, name, type);
36              this.objects = objects;
37          }
38  
39          public Event(IStructureObject parent, String namespace, String name, Object value) {
40              this(parent, namespace, name, CHANGE);
41              this.value = value;
42          }
43  
44          private Event(IStructureObject parent, String namespace, String name, String type) {
45              this.parent = parent;
46              this.namespace = namespace;
47              this.name = name;
48              this.type = type;
49              this.value = null;
50              this.objects = null;
51          }
52  
53          public String toString() {
54              return "Event [" + type + "] {" + namespace + "}" + name + " " + (type.equals(CHANGE) ? value : "" + objects.length);
55          }
56      }
57  
58      protected class EventChecker implements IStructureListener {
59          public LinkedList events = new LinkedList();
60  
61          public Event getEvent(int i) {
62              return (Event) events.get(i);
63          }
64  
65          public void reset() {
66              events.clear();
67          }
68  
69          public void objectsAdded(IStructureObject parent, String namespace, String name, List objects) {
70              events.add(new Event(parent, namespace, name, objects.toArray(), Event.ADD));
71          }
72  
73          public void objectsRemoved(IStructureObject parent, String namespace, String name, List objects) {
74              events.add(new Event(parent, namespace, name, objects.toArray(), Event.REMOVE));
75          }
76  
77          public void propertyChanged(IStructureObject parent, String namespace, String name, Object newvalue) {
78              events.add(new Event(parent, namespace, name, newvalue));
79          }
80      }
81  
82      protected static final Logger logger = Logger.getLogger(TestCalls.class);
83      protected EventChecker checker;
84      protected Creator creator;
85  
86      public TestCalls() {
87          creator = new DefaultProtocolCreator(new DefaultCreator());
88          initializeFactory();
89          checker = new EventChecker();
90      }
91  
92      protected void initializeFactory() {
93          Factory.setCreator(creator);
94      }
95  
96      protected Object executeCall(IMethodCall call) throws Exception {
97          Object ret = call.execute();
98          assertTrue("Call is not executed.", call.isExecuted());
99          return ret;
100     }
101 
102     protected void executeCall(IMethodCall call, Object returnvalue) throws Exception {
103         Object ret = executeCall(call);
104         assertEquals("Wrong return value.", returnvalue, ret);
105     }
106 
107     protected void checkNumberOfEvents(EventChecker thechecker, int num) {
108         assertEquals("Wrong number of events.", num, thechecker.events.size());
109     }
110 
111     protected void checkPropertyChangeEvent(Event event, IStructureObject parent, String namespace, String name, Object newvalue) {
112         assertEquals("Wrong type of event.", Event.CHANGE, event.type);
113         assertEquals("Wrong parent in event.", parent, event.parent);
114         assertEquals("Wrong namespace of updated property in event.", namespace, event.namespace);
115         assertEquals("Wrong name of updated property in event.", name, event.name);
116         assertEquals("Wrong new value of updated property in event.", newvalue, event.value);
117     }
118 
119     protected void checkObjectsAddedEvent(Event event, IStructureObject parent, String namespace, String name, Object[] obs) {
120         assertEquals("Wrong type of event.", Event.ADD, event.type);
121         assertEquals("Wrong parent in event.", parent, event.parent);
122         assertEquals("Wrong namespace of added objects in event.", namespace, event.namespace);
123         assertEquals("Wrong name of added objects in event.", name, event.name);
124         assertEquals("Wrong number of added objects in event.", obs.length, event.objects.length);
125         for (int i = 0; i < obs.length; i++) {
126             assertSame("Wrong added object in event.", obs[i], event.objects[i]);
127             if (obs[i] instanceof IChildObject) {
128                 assertSame("Parent not set correctly.", parent, ((IChildObject) obs[i]).getParent());
129             }
130         }
131     }
132 
133     protected void checkObjectsRemovedEvent(Event event, IStructureObject parent, String namespace, String name, Object[] obs) {
134         assertEquals("Wrong type of event.", Event.REMOVE, event.type);
135         assertEquals("Wrong parent in event.", parent, event.parent);
136         assertEquals("Wrong namespace of removed objects in event.", namespace, event.namespace);
137         assertEquals("Wrong name of removed objects in event.", name, event.name);
138         assertEquals("Wrong number of removed objects in event.", obs.length, event.objects.length);
139         for (int i = 0; i < obs.length; i++) {
140             assertSame("Wrong removed object in event.", obs[i], event.objects[i]);
141             if (obs[i] instanceof IChildObject) {
142                 assertNotSame("Parent not unset correctly.", parent, ((IChildObject) obs[i]).getParent());
143             }
144         }
145     }
146 
147     /// ----------------------------------------------------------------------------------------------------
148     /// Edge
149     /// ----------------------------------------------------------------------------------------------------
150 
151     public void testEdgeSetExpression() throws Exception {
152         ProtocolEdge edge = (ProtocolEdge) creator.newEdge();
153         checker.reset();
154         edge.getRoot().addStructureListener(checker);
155         executeCall(new EdgeSetExpression(edge, "expression"));
156         assertEquals("Edge's expression wrong.", "expression", edge.getExpression());
157         checkNumberOfEvents(checker, 1);
158         checkPropertyChangeEvent(checker.getEvent(0), edge, ProtocolEdge.NAMESPACE_PROPERTIES, ProtocolEdge.NAME_EDGEEXPRESSION, "expression");
159     }
160 
161     public void testEdgeSetPlace() throws Exception {
162         ProtocolEdge edge = (ProtocolEdge) creator.newEdge();
163         edge.getRoot().addStructureListener(checker);
164 
165         ProtocolPlace place = (ProtocolPlace) creator.newPlace();
166         place.setID("theplace");
167 
168         checker.reset();
169         executeCall(new EdgeSetPlace(edge, place));
170         assertEquals("Edge's place wrong.", place, edge.getPlace());
171         checkNumberOfEvents(checker, 1);
172         checkPropertyChangeEvent(checker.getEvent(0), edge, ProtocolEdge.NAMESPACE_PROPERTIES, ProtocolEdge.NAME_PLACEID, "theplace");
173     }
174 
175     /// ----------------------------------------------------------------------------------------------------
176     /// Property
177     /// ----------------------------------------------------------------------------------------------------
178 
179     public void testPropertySetKey() throws Exception {
180         ProtocolProperty p = (ProtocolProperty) creator.newProperty();
181         checker.reset();
182         p.getRoot().addStructureListener(checker);
183         executeCall(new PropertySetKey(p, "thekey"));
184         assertEquals("Property's key wrong.", "thekey", p.getKey());
185         checkNumberOfEvents(checker, 1);
186         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE_PROPERTIES, ProtocolProperty.NAME_KEY, "thekey");
187     }
188 
189     public void testPropertySetValue() throws Exception {
190         ProtocolProperty p = (ProtocolProperty) creator.newProperty();
191         checker.reset();
192         p.getRoot().addStructureListener(checker);
193         executeCall(new PropertySetValue(p, "thevalue"));
194         assertEquals("Property's key wrong.", "thevalue", p.getValue());
195         checkNumberOfEvents(checker, 1);
196         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, "thevalue");
197     }
198 
199     /// ----------------------------------------------------------------------------------------------------
200     /// GenericProperties
201     /// ----------------------------------------------------------------------------------------------------
202 
203     public void testGenericPropertiesPut() throws Exception {
204         ProtocolProperties p = (ProtocolProperties) creator.newProperties();
205         p.getRoot().addStructureListener(checker);
206 
207         checker.reset();
208         executeCall(new GenericPropertiesPut(p, "thekey", "thevalue"));
209         assertEquals("Wrong number of properties.", 1, p.size());
210         assertEquals("Wrong value for key.", "thevalue", p.get("thekey"));
211         checkNumberOfEvents(checker, 1);
212         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, p.getProperties());
213 
214         checker.reset();
215         executeCall(new GenericPropertiesPut(p, "thekey", "thenewvalue"));
216         assertEquals("Wrong number of properties.", 1, p.size());
217         assertEquals("Wrong value for key.", "thenewvalue", p.get("thekey"));
218         checkNumberOfEvents(checker, 1);
219         checkPropertyChangeEvent(checker.getEvent(0), (IStructureObject) p.getProperty(0), ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, "thenewvalue");
220 
221         checker.reset();
222         executeCall(new GenericPropertiesPut(p, "thenewkey", "thevaluewhichisnew"));
223         assertEquals("Wrong number of properties.", 2, p.size());
224         assertEquals("Wrong value for key.", "thevaluewhichisnew", p.get("thenewkey"));
225         checkNumberOfEvents(checker, 1);
226         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{p.getProperty(1)});
227     }
228 
229     public void testGenericPropertiesRemove() throws Exception {
230         ProtocolProperties p = (ProtocolProperties) creator.newProperties();
231         p.getRoot().addStructureListener(checker);
232 
233         p.put("thekey", "thevalue");
234         Property old = p.getProperty(0);
235 
236         checker.reset();
237         executeCall(new GenericPropertiesRemove(p, "thekey"), "thevalue");
238         assertEquals("Wrong number of properties.", 0, p.size());
239         checkNumberOfEvents(checker, 1);
240         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{old});
241     }
242 
243     public void testGenericPropertiesSetProperty() throws Exception {
244         ProtocolProperties p = (ProtocolProperties) creator.newProperties();
245         p.getRoot().addStructureListener(checker);
246 
247         p.put("thekey1", "thevalue1");
248         p.put("thekey2", "thevalue2");
249         p.put("thekey3", "thevalue3");
250 
251         Property old = p.getProperty(1);
252 
253         ProtocolProperty prop = (ProtocolProperty) creator.newProperty();
254         prop.setKey("thenewkey");
255         prop.setValue("thenewvalue");
256 
257         checker.reset();
258         executeCall(new GenericPropertiesSetProperty(p, 1, prop));
259         assertEquals("Wrong number of properties.", 3, p.size());
260         checkNumberOfEvents(checker, 2);
261         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{old});
262         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{prop});
263     }
264 
265     public void testGenericPropertiesSetProperties() throws Exception {
266         ProtocolProperties p = (ProtocolProperties) creator.newProperties();
267         p.getRoot().addStructureListener(checker);
268 
269         ProtocolProperty p1 = (ProtocolProperty) creator.newProperty("key1", "value");
270         ProtocolProperty p2 = (ProtocolProperty) creator.newProperty("key2", "value");
271         ProtocolProperty p3 = (ProtocolProperty) creator.newProperty("key3", "value");
272 
273         checker.reset();
274         executeCall(new GenericPropertiesSetProperties(p, new ProtocolProperty[]{p1}));
275         assertEquals("Wrong number of properties.", 1, p.size());
276         checkNumberOfEvents(checker, 1);
277         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{p1});
278 
279         checker.reset();
280         executeCall(new GenericPropertiesSetProperties(p, new ProtocolProperty[]{p3, p2}));
281         assertEquals("Wrong number of properties.", 2, p.size());
282         checkNumberOfEvents(checker, 2);
283         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{p1});
284         ;
285         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolProperty.NAMESPACE, ProtocolProperty.NAME, new Object[]{p3, p2});
286     }
287 
288     /// ----------------------------------------------------------------------------------------------------
289     /// Owls
290     /// ----------------------------------------------------------------------------------------------------
291 
292     public void testOwlsAddOwl() throws Exception {
293         ProtocolOwls owl = (ProtocolOwls) creator.newWorkflow();
294         owl.getRoot().addStructureListener(checker);
295 
296         String newowl = "ooowwwlll";
297 
298         checker.reset();
299         executeCall(new OwlsAddOwl(owl, newowl));
300         assertEquals("Wrong number of owls.", 1, owl.owlsCount());
301         checkNumberOfEvents(checker, 1);
302         checkObjectsAddedEvent(checker.getEvent(0), owl, ProtocolWorkflow.NAMESPACE, ProtocolWorkflow.NAME_OWL, new Object[]{newowl});
303     }
304 
305     public void testOwlsRemoveOwl() throws Exception {
306         ProtocolOwls owl = (ProtocolOwls) creator.newWorkflow();
307         owl.getRoot().addStructureListener(checker);
308 
309         String newowl = "ooowwwlll";
310         String newowl2 = "ooowwwllll";
311         owl.addOwl(newowl);
312         owl.addOwl(newowl2);
313 
314         checker.reset();
315         executeCall(new OwlsRemoveOwl(owl, newowl));
316         assertEquals("Wrong number of owls.", 1, owl.owlsCount());
317         executeCall(new OwlsRemoveOwl(owl, 0));
318         assertEquals("Wrong number of owls.", 0, owl.owlsCount());
319         checkNumberOfEvents(checker, 2);
320         checkObjectsRemovedEvent(checker.getEvent(0), owl, ProtocolWorkflow.NAMESPACE, ProtocolWorkflow.NAME_OWL, new Object[]{newowl});
321         checkObjectsRemovedEvent(checker.getEvent(1), owl, ProtocolWorkflow.NAMESPACE, ProtocolWorkflow.NAME_OWL, new Object[]{newowl2});
322     }
323 
324     public void testOwlsSetOwls() throws Exception {
325         ProtocolOwls owl = (ProtocolOwls) creator.newWorkflow();
326         owl.getRoot().addStructureListener(checker);
327 
328         String o1 = "oo11";
329         String o2 = "oo22";
330         String o3 = "oo33";
331 
332         checker.reset();
333         executeCall(new OwlsSetOwls(owl, new String[]{o1}));
334         assertEquals("Wrong number of owls.", 1, owl.owlsCount());
335         checkNumberOfEvents(checker, 1);
336         checkObjectsAddedEvent(checker.getEvent(0), owl, ProtocolWorkflow.NAMESPACE, ProtocolWorkflow.NAME_OWL, new Object[]{o1});
337 
338         checker.reset();
339         executeCall(new OwlsSetOwls(owl, new String[]{o2, o3}));
340         assertEquals("Wrong number of owls.", 2, owl.owlsCount());
341         checkNumberOfEvents(checker, 2);
342         checkObjectsRemovedEvent(checker.getEvent(0), owl, ProtocolWorkflow.NAMESPACE, ProtocolWorkflow.NAME_OWL, new Object[]{o1});
343         checkObjectsAddedEvent(checker.getEvent(1), owl, ProtocolWorkflow.NAMESPACE, ProtocolWorkflow.NAME_OWL, new Object[]{o2, o3});
344     }
345 
346     /// ----------------------------------------------------------------------------------------------------
347     /// Token
348     /// ----------------------------------------------------------------------------------------------------
349 
350     /// ----------------------------------------------------------------------------------------------------
351     /// Data
352     /// ----------------------------------------------------------------------------------------------------
353 
354     /// ----------------------------------------------------------------------------------------------------
355     /// Operation
356     /// ----------------------------------------------------------------------------------------------------
357 
358     public void testOperationSetOperationClass() throws Exception {
359         ProtocolOperation o = (ProtocolOperation) creator.newOperation();
360         o.getRoot().addStructureListener(checker);
361         ProtocolOperationClass co = (ProtocolOperationClass) creator.newOperationClass();
362         checker.reset();
363         executeCall(new OperationSetOperationClass(o, co));
364         assertEquals("Operation has wrong class operation.", co.getClass().getName(), o.get().getClass().getName());
365         checkNumberOfEvents(checker, 1);
366         checkObjectsAddedEvent(checker.getEvent(0), o, ProtocolOperationClass.NAMESPACE, ProtocolOperationClass.NAME, new Object[]{co});
367     }
368 
369     /// ----------------------------------------------------------------------------------------------------
370     /// OperationClass
371     /// ----------------------------------------------------------------------------------------------------
372 
373     ///ToDo: Test setName()
374 
375     public void testOperationClassSetOperationCandidates() throws Exception {
376         ProtocolOperationClass o = (ProtocolOperationClass) creator.newOperationClass();
377         o.getRoot().addStructureListener(checker);
378 
379         ProtocolOperationCandidate o1 = (ProtocolOperationCandidate) creator.newOperationCandidate();
380         ProtocolOperationCandidate o2 = (ProtocolOperationCandidate) creator.newOperationCandidate();
381         ProtocolOperationCandidate no = (ProtocolOperationCandidate) creator.newOperationCandidate();
382 
383         checker.reset();
384         executeCall(new OperationClassSetOperationCandidates(o, new ProtocolOperationCandidate[]{o1, o2}));
385         assertEquals("OperationClass has wrong number of OperationCandidates.", 2, o.getOperationCandidates().length);
386         checkNumberOfEvents(checker, 1);
387         checkObjectsAddedEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME, new Object[]{o1, o2});
388 
389         checker.reset();
390         executeCall(new OperationClassSetOperationCandidates(o, new ProtocolOperationCandidate[]{no}));
391         assertEquals("OperationClass has wrong number of OperationCandidates.", 1, o.getOperationCandidates().length);
392         checkNumberOfEvents(checker, 2);
393         checkObjectsRemovedEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME, new Object[]{o1, o2});
394         checkObjectsAddedEvent(checker.getEvent(1), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME, new Object[]{no});
395     }
396 
397     public void testOperationClassRemoveOperationCandidate() throws Exception {
398         ProtocolOperationClass o = (ProtocolOperationClass) creator.newOperationClass();
399         o.getRoot().addStructureListener(checker);
400 
401         ProtocolOperationCandidate o1 = (ProtocolOperationCandidate) creator.newOperationCandidate();
402         o.setOperationCandidates(new OperationCandidate[]{o1});
403 
404         checker.reset();
405         executeCall(new OperationClassRemoveOperationCandidate(o, 0));
406         assertTrue("OperationClass has wrong number of OperationCandidates.", o.getOperationCandidates() == null || 0 == o.getOperationCandidates().length);
407         checkNumberOfEvents(checker, 1);
408         checkObjectsRemovedEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME, new Object[]{o1});
409     }
410 
411     /// ----------------------------------------------------------------------------------------------------
412     /// OperationCandidate
413     /// ----------------------------------------------------------------------------------------------------
414 
415     public void testOperationCandidateSetType() throws Exception {
416         ProtocolOperationCandidate o = (ProtocolOperationCandidate) creator.newOperationCandidate();
417         o.getRoot().addStructureListener(checker);
418 
419         checker.reset();
420         executeCall(new OperationCandidateSetType(o, "test.type"));
421         assertEquals("OperationCandidate has wrong type value.", "test.type", o.getType());
422         checkNumberOfEvents(checker, 1);
423         checkPropertyChangeEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME_TYPE, "test.type");
424     }
425 
426     public void testOperationCandidateSetOperationName() throws Exception {
427         ProtocolOperationCandidate o = (ProtocolOperationCandidate) creator.newOperationCandidate();
428         o.getRoot().addStructureListener(checker);
429 
430         checker.reset();
431         executeCall(new OperationCandidateSetOperationName(o, "test.exe"));
432         assertEquals("OperationCandidate has wrong operationName value.", "test.exe", o.getOperationName());
433         checkNumberOfEvents(checker, 1);
434         checkPropertyChangeEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME_OPERATIONNAME, "test.exe");
435     }
436 
437     public void testOperationCandidateSetResourceName() throws Exception {
438         ProtocolOperationCandidate o = (ProtocolOperationCandidate) creator.newOperationCandidate();
439         o.getRoot().addStructureListener(checker);
440 
441         checker.reset();
442         executeCall(new OperationCandidateSetResourceName(o, "dollerrechner"));
443         assertEquals("OperationCandidate has wrong resourceName value.", "dollerrechner", o.getResourceName());
444         checkNumberOfEvents(checker, 1);
445         checkPropertyChangeEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME_RESOURCENAME, "dollerrechner");
446     }
447 
448     public void testOperationCandidateSetQuality() throws Exception {
449         ProtocolOperationCandidate o = (ProtocolOperationCandidate) creator.newOperationCandidate();
450         o.getRoot().addStructureListener(checker);
451 
452         checker.reset();
453         executeCall(new OperationCandidateSetQuality(o, 0.5f));
454         assertEquals("OperationCandidate has wrong quality.", 0.5f, o.getQuality(), 0f);
455         checkNumberOfEvents(checker, 1);
456         checkPropertyChangeEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME_QUALITY, new Float(0.5f));
457     }
458 
459     public void testOperationCandidateSetSelected() throws Exception {
460         ProtocolOperationCandidate o = (ProtocolOperationCandidate) creator.newOperationCandidate();
461         o.getRoot().addStructureListener(checker);
462 
463         checker.reset();
464         executeCall(new OperationCandidateSetSelected(o, true));
465         assertEquals("OperationCandidate has wrong selected value.", true, o.isSelected());
466         checkNumberOfEvents(checker, 1);
467         checkPropertyChangeEvent(checker.getEvent(0), o, ProtocolOperationCandidate.NAMESPACE, ProtocolOperationCandidate.NAME_SELECTED, new Boolean(true));
468     }
469 
470     /// ----------------------------------------------------------------------------------------------------
471     /// Place
472     /// ----------------------------------------------------------------------------------------------------
473 
474     public void testPlaceAddToken() throws Exception {
475         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
476         p.getRoot().addStructureListener(checker);
477 
478         ProtocolToken token = (ProtocolToken) creator.newToken();
479 
480         checker.reset();
481         executeCall(new PlaceAddToken(p, token));
482         assertEquals("Wrong number of tokens.", 1, p.getTokens().length);
483         checkNumberOfEvents(checker, 1);
484         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{token});
485     }
486 
487     public void testPlaceSetTokens() throws Exception {
488         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
489         p.getRoot().addStructureListener(checker);
490 
491         ProtocolToken te = (ProtocolToken) creator.newToken();
492         ProtocolToken t1 = (ProtocolToken) creator.newToken();
493         ProtocolToken t2 = (ProtocolToken) creator.newToken();
494 
495         checker.reset();
496         executeCall(new PlaceSetTokens(p, new ProtocolToken[]{te}));
497         checkNumberOfEvents(checker, 1);
498         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{te});
499 
500         checker.reset();
501         executeCall(new PlaceSetTokens(p, new ProtocolToken[]{t1, t2}));
502         checkNumberOfEvents(checker, 2);
503         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{te});
504         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{t1, t2});
505     }
506 
507     public void testPlaceRemoveAllTokens() throws Exception {
508         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
509         p.getRoot().addStructureListener(checker);
510 
511         ProtocolToken token1 = (ProtocolToken) creator.newToken();
512         p.addToken(token1);
513         ProtocolToken token2 = (ProtocolToken) creator.newToken();
514         p.addToken(token2);
515 
516         checker.reset();
517         executeCall(new PlaceRemoveAllTokens(p));
518         assertEquals("Wrong number of tokens.", 0, p.getTokens().length);
519         checkNumberOfEvents(checker, 1);
520         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{token1, token2});
521     }
522 
523     public void testPlaceRemoveToken() throws Exception {
524         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
525         p.getRoot().addStructureListener(checker);
526 
527         ProtocolToken token1 = (ProtocolToken) creator.newToken();
528         p.addToken(token1);
529         ProtocolToken token2 = (ProtocolToken) creator.newToken();
530         p.addToken(token2);
531 
532         checker.reset();
533         executeCall(new PlaceRemoveToken(p, 1));
534         assertEquals("Wrong number of tokens.", 1, p.getTokens().length);
535         checkNumberOfEvents(checker, 1);
536         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{token2});
537 
538         checker.reset();
539         executeCall(new PlaceRemoveToken(p, token1));
540         assertEquals("Wrong number of tokens.", 0, p.getTokens().length);
541         checkNumberOfEvents(checker, 1);
542         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolToken.NAMESPACE, ProtocolToken.NAME, new Object[]{token1});
543     }
544 
545     public void testPlaceSetCapacity() throws Exception {
546         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
547         p.getRoot().addStructureListener(checker);
548 
549         checker.reset();
550         executeCall(new PlaceSetCapacity(p, 17));
551         assertEquals("Wrong capacity.", 17, p.getCapacity());
552         checkNumberOfEvents(checker, 1);
553         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE_PROPERTIES, ProtocolPlace.NAME_CAPACITY, new Integer(17));
554     }
555 
556     public void testPlaceSetDescription() throws Exception {
557         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
558         p.getRoot().addStructureListener(checker);
559 
560         checker.reset();
561         executeCall(new PlaceSetDescription(p, "desc"));
562         assertEquals("Wrong description.", "desc", p.getDescription());
563         checkNumberOfEvents(checker, 1);
564         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE_PROPERTIES, ProtocolPlace.NAME_DESCRIPTION, "desc");
565     }
566 
567     public void testPlaceSetID() throws Exception {
568         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
569         p.getRoot().addStructureListener(checker);
570 
571         checker.reset();
572         executeCall(new PlaceSetID(p, "ID"));
573         assertEquals("Wrong ID.", "ID", p.getID());
574         checkNumberOfEvents(checker, 1);
575         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE_PROPERTIES, ProtocolPlace.NAME_ID, "ID");
576     }
577 
578     public void testPlaceSetTokenType() throws Exception {
579         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
580         p.getRoot().addStructureListener(checker);
581 
582         checker.reset();
583         executeCall(new PlaceSetTokenType(p, "tokty"));
584         assertEquals("Wrong tokenType.", "tokty", p.getTokenType());
585         checkNumberOfEvents(checker, 1);
586         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE_PROPERTIES, ProtocolPlace.NAME_TOKENTYPE, "tokty");
587     }
588 
589     public void testPlaceSetProperties() throws Exception {
590         ProtocolPlace p = (ProtocolPlace) creator.newPlace();
591         p.getRoot().addStructureListener(checker);
592 
593         ProtocolProperties props = (ProtocolProperties) creator.newProperties();
594         Property np1 = creator.newProperty("key1", "value1");
595         Property np2 = creator.newProperty("key2", "value1");
596         props.setProperties(new Property[]{np1, np2});
597         p.getProperties().put("kk", "vv");
598         Property op = p.getProperties().getProperty(0);
599         ProtocolProperties oprops = (ProtocolProperties) p.getProperties();
600 
601         checker.reset();
602         executeCall(new PlaceSetProperties(p, props));
603         assertEquals("Wrong GenericProperties instance.", props, p.getProperties());
604         checkNumberOfEvents(checker, 2);
605         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolProperties.NAMESPACE, ProtocolProperties.NAME, new Object[]{oprops});
606         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolProperties.NAMESPACE, ProtocolProperties.NAME, new Object[]{props});
607     }
608 
609     /// ----------------------------------------------------------------------------------------------------
610     /// Transition
611     /// ----------------------------------------------------------------------------------------------------
612 
613     public void testTransitionSetID() throws Exception {
614         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
615         p.getRoot().addStructureListener(checker);
616 
617         checker.reset();
618         executeCall(new TransitionSetID(p, "ID"));
619         assertEquals("Wrong ID.", "ID", p.getID());
620         checkNumberOfEvents(checker, 1);
621         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE_PROPERTIES, ProtocolTransition.NAME_ID, "ID");
622     }
623 
624     public void testTransitionSetDescription() throws Exception {
625         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
626         p.getRoot().addStructureListener(checker);
627 
628         checker.reset();
629         executeCall(new TransitionSetDescription(p, "desc"));
630         assertEquals("Wrong description.", "desc", p.getDescription());
631         checkNumberOfEvents(checker, 1);
632         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE_PROPERTIES, ProtocolTransition.NAME_DESCRIPTION, "desc");
633     }
634 
635     public void testTransitionSetProperties() throws Exception {
636         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
637         p.getRoot().addStructureListener(checker);
638 
639         ProtocolProperties props = (ProtocolProperties) creator.newProperties();
640         Property np1 = creator.newProperty("key1", "value1");
641         Property np2 = creator.newProperty("key2", "value1");
642         props.setProperties(new Property[]{np1, np2});
643         p.getProperties().put("kk", "vv");
644         Property op = p.getProperties().getProperty(0);
645         ProtocolProperties oprops = (ProtocolProperties) p.getProperties();
646 
647         checker.reset();
648         executeCall(new TransitionSetProperties(p, props));
649         assertEquals("Wrong GenericProperties instance.", props, p.getProperties());
650         checkNumberOfEvents(checker, 2);
651         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolProperties.NAMESPACE, ProtocolProperties.NAME, new Object[]{oprops});
652         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolProperties.NAMESPACE, ProtocolProperties.NAME, new Object[]{props});
653     }
654 
655     public void testTransitionAddCondition() throws Exception {
656         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
657         p.getRoot().addStructureListener(checker);
658 
659         String condition = "condition";
660 
661         checker.reset();
662         executeCall(new TransitionAddCondition(p, condition));
663         checkNumberOfEvents(checker, 1);
664         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME_CONDITION, new Object[]{condition});
665     }
666 
667     public void testTransitionRemoveCondition() throws Exception {
668         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
669         p.getRoot().addStructureListener(checker);
670 
671         String condition = "condition";
672         p.addCondition(condition);
673 
674         checker.reset();
675         executeCall(new TransitionRemoveCondition(p, 0));
676         checkNumberOfEvents(checker, 1);
677         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME_CONDITION, new Object[]{condition});
678     }
679 
680     public void testTransitionSetConditions() throws Exception {
681         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
682         p.getRoot().addStructureListener(checker);
683 
684         String oc = "condition";
685         String c1 = "condition1";
686         String c2 = "condition2";
687 
688         checker.reset();
689         executeCall(new TransitionSetConditions(p, new String[]{oc}));
690         checkNumberOfEvents(checker, 1);
691         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME_CONDITION, new Object[]{oc});
692 
693         checker.reset();
694         executeCall(new TransitionSetConditions(p, new String[]{c1, c2}));
695         checkNumberOfEvents(checker, 2);
696         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME_CONDITION, new Object[]{oc});
697         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME_CONDITION, new Object[]{c1, c2});
698 
699     }
700 
701     public void testTransitionAddReadEdge() throws Exception {
702         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
703         p.getRoot().addStructureListener(checker);
704 
705         ProtocolEdge e = (ProtocolEdge) creator.newEdge();
706 
707         checker.reset();
708         executeCall(new TransitionAddReadEdge(p, e));
709         checkNumberOfEvents(checker, 1);
710         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_READPLACE, new Object[]{e});
711     }
712 
713     public void testTransitionRemoveReadEdge() throws Exception {
714         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
715         p.getRoot().addStructureListener(checker);
716 
717         Place p1 = creator.newPlace();
718         p1.setID("place1");
719         Edge e1 = creator.newEdge();
720         p.addReadEdge(e1);
721         Edge e2 = creator.newEdge();
722         e2.setPlace(p1);
723         p.addReadEdge(e2);
724 
725         checker.reset();
726         executeCall(new TransitionRemoveReadEdge(p, 0));
727         checkNumberOfEvents(checker, 1);
728         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_READPLACE, new Object[]{e1});
729 
730         checker.reset();
731         executeCall(new TransitionRemoveReadEdge(p, "place1"));
732         checkNumberOfEvents(checker, 1);
733         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_READPLACE, new Object[]{e2});
734     }
735 
736     public void testTransitionSetReadEdges() throws Exception {
737         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
738         p.getRoot().addStructureListener(checker);
739 
740         ProtocolEdge oe = (ProtocolEdge) creator.newEdge();
741         ProtocolEdge e1 = (ProtocolEdge) creator.newEdge();
742         ProtocolEdge e2 = (ProtocolEdge) creator.newEdge();
743 
744         checker.reset();
745         executeCall(new TransitionSetReadEdges(p, new ProtocolEdge[]{oe}));
746         checkNumberOfEvents(checker, 1);
747         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_READPLACE, new Object[]{oe});
748 
749         checker.reset();
750         executeCall(new TransitionSetReadEdges(p, new ProtocolEdge[]{e1, e2}));
751         checkNumberOfEvents(checker, 2);
752         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_READPLACE, new Object[]{oe});
753         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_READPLACE, new Object[]{e1, e2});
754     }
755     
756     public void testTransitionAddInEdge() throws Exception {
757         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
758         p.getRoot().addStructureListener(checker);
759 
760         ProtocolEdge e = (ProtocolEdge) creator.newEdge();
761 
762         checker.reset();
763         executeCall(new TransitionAddInEdge(p, e));
764         checkNumberOfEvents(checker, 1);
765         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_INPUTPLACE, new Object[]{e});
766     }
767 
768     public void testTransitionRemoveInEdge() throws Exception {
769         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
770         p.getRoot().addStructureListener(checker);
771 
772         Place p1 = creator.newPlace();
773         p1.setID("place1");
774         Edge e1 = creator.newEdge();
775         p.addInEdge(e1);
776         Edge e2 = creator.newEdge();
777         e2.setPlace(p1);
778         p.addInEdge(e2);
779 
780         checker.reset();
781         executeCall(new TransitionRemoveInEdge(p, 0));
782         checkNumberOfEvents(checker, 1);
783         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_INPUTPLACE, new Object[]{e1});
784 
785         checker.reset();
786         executeCall(new TransitionRemoveInEdge(p, "place1"));
787         checkNumberOfEvents(checker, 1);
788         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_INPUTPLACE, new Object[]{e2});
789     }
790 
791     public void testTransitionSetInEdges() throws Exception {
792         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
793         p.getRoot().addStructureListener(checker);
794 
795         ProtocolEdge oe = (ProtocolEdge) creator.newEdge();
796         ProtocolEdge e1 = (ProtocolEdge) creator.newEdge();
797         ProtocolEdge e2 = (ProtocolEdge) creator.newEdge();
798 
799         checker.reset();
800         executeCall(new TransitionSetInEdges(p, new ProtocolEdge[]{oe}));
801         checkNumberOfEvents(checker, 1);
802         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_INPUTPLACE, new Object[]{oe});
803 
804         checker.reset();
805         executeCall(new TransitionSetInEdges(p, new ProtocolEdge[]{e1, e2}));
806         checkNumberOfEvents(checker, 2);
807         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_INPUTPLACE, new Object[]{oe});
808         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_INPUTPLACE, new Object[]{e1, e2});
809     }
810 
811     public void testTransitionAddWriteEdge() throws Exception {
812         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
813         p.getRoot().addStructureListener(checker);
814 
815         ProtocolEdge e = (ProtocolEdge) creator.newEdge();
816 
817         checker.reset();
818         executeCall(new TransitionAddWriteEdge(p, e));
819         checkNumberOfEvents(checker, 1);
820         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_WRITEPLACE, new Object[]{e});
821     }
822 
823     public void testTransitionRemoveWriteEdge() throws Exception {
824         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
825         p.getRoot().addStructureListener(checker);
826 
827         Place p1 = creator.newPlace();
828         p1.setID("place1");
829         Edge e1 = creator.newEdge();
830         p.addWriteEdge(e1);
831         Edge e2 = creator.newEdge();
832         e2.setPlace(p1);
833         p.addWriteEdge(e2);
834 
835         checker.reset();
836         executeCall(new TransitionRemoveWriteEdge(p, 0));
837         checkNumberOfEvents(checker, 1);
838         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_WRITEPLACE, new Object[]{e1});
839 
840         checker.reset();
841         executeCall(new TransitionRemoveWriteEdge(p, "place1"));
842         checkNumberOfEvents(checker, 1);
843         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_WRITEPLACE, new Object[]{e2});
844     }
845 
846     public void testTransitionSetWriteEdges() throws Exception {
847         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
848         p.getRoot().addStructureListener(checker);
849 
850         ProtocolEdge oe = (ProtocolEdge) creator.newEdge();
851         ProtocolEdge e1 = (ProtocolEdge) creator.newEdge();
852         ProtocolEdge e2 = (ProtocolEdge) creator.newEdge();
853 
854         checker.reset();
855         executeCall(new TransitionSetWriteEdges(p, new ProtocolEdge[]{oe}));
856         checkNumberOfEvents(checker, 1);
857         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_WRITEPLACE, new Object[]{oe});
858 
859         checker.reset();
860         executeCall(new TransitionSetWriteEdges(p, new ProtocolEdge[]{e1, e2}));
861         checkNumberOfEvents(checker, 2);
862         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_WRITEPLACE, new Object[]{oe});
863         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_WRITEPLACE, new Object[]{e1, e2});
864     }
865 
866     public void testTransitionAddOutEdge() throws Exception {
867         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
868         p.getRoot().addStructureListener(checker);
869 
870         ProtocolEdge e = (ProtocolEdge) creator.newEdge();
871 
872         checker.reset();
873         executeCall(new TransitionAddOutEdge(p, e));
874         checkNumberOfEvents(checker, 1);
875         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_OUTPUTPLACE, new Object[]{e});
876     }
877 
878     public void testTransitionRemoveOutEdge() throws Exception {
879         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
880         p.getRoot().addStructureListener(checker);
881 
882         Place p1 = creator.newPlace();
883         p1.setID("place1");
884         Edge e1 = creator.newEdge();
885         p.addOutEdge(e1);
886         Edge e2 = creator.newEdge();
887         e2.setPlace(p1);
888         p.addOutEdge(e2);
889 
890         checker.reset();
891         executeCall(new TransitionRemoveOutEdge(p, 0));
892         checkNumberOfEvents(checker, 1);
893         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_OUTPUTPLACE, new Object[]{e1});
894 
895         checker.reset();
896         executeCall(new TransitionRemoveOutEdge(p, "place1"));
897         checkNumberOfEvents(checker, 1);
898         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_OUTPUTPLACE, new Object[]{e2});
899     }
900 
901     public void testTransitionSetOutEdges() throws Exception {
902         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
903         p.getRoot().addStructureListener(checker);
904 
905         ProtocolEdge oe = (ProtocolEdge) creator.newEdge();
906         ProtocolEdge e1 = (ProtocolEdge) creator.newEdge();
907         ProtocolEdge e2 = (ProtocolEdge) creator.newEdge();
908 
909         checker.reset();
910         executeCall(new TransitionSetOutEdges(p, new ProtocolEdge[]{oe}));
911         checkNumberOfEvents(checker, 1);
912         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_OUTPUTPLACE, new Object[]{oe});
913 
914         checker.reset();
915         executeCall(new TransitionSetOutEdges(p, new ProtocolEdge[]{e1, e2}));
916         checkNumberOfEvents(checker, 2);
917         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_OUTPUTPLACE, new Object[]{oe});
918         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolEdge.NAMESPACE, ProtocolEdge.NAME_OUTPUTPLACE, new Object[]{e1, e2});
919     }
920 
921     public void testTransitionSetOperation() throws Exception {
922         ProtocolTransition p = (ProtocolTransition) creator.newTransition();
923         p.getRoot().addStructureListener(checker);
924 
925         Operation oo = creator.newOperation();
926         ProtocolOperation o = (ProtocolOperation) creator.newOperation();
927         p.setOperation(oo);
928 
929         checker.reset();
930         executeCall(new TransitionSetOperation(p, o));
931         checkNumberOfEvents(checker, 2);
932         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolOperation.NAMESPACE, ProtocolOperation.NAME, new Object[]{oo});
933         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolOperation.NAMESPACE, ProtocolOperation.NAME, new Object[]{o});
934     }
935 
936     /// ----------------------------------------------------------------------------------------------------
937     /// Workflow
938     /// ----------------------------------------------------------------------------------------------------
939 
940     /*
941       public void testWorkflowSetID() throws Exception {
942       ProtocolWorkflow p = (ProtocolWorkflow)creator.newWorkflow();
943       p.getRoot().addStructureListener(checker);
944       
945       checker.reset();
946       executeCall(new WorkflowSetID(p, "ID"));
947       assertEquals("Wrong ID.", "ID", p.getID());
948       checkNumberOfEvents(checker, 1);
949       checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolWorkflow.NAMESPACE_PROPERTIES, ProtocolWorkflow.NAME_ID, "ID");
950       }
951     */
952 
953     public void testWorkflowFromXML() throws Exception {
954         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
955         p.getRoot().addStructureListener(checker);
956 
957         String xml =
958                 "<workflow xmlns=\"http://www.gridworkflow.org/gworkflowdl\" ID=\"theWorkflow\">\n" +
959                         "  <owl>OhWehElle</owl>\n" +
960                         "  <description>ich bin ein grid workflow</description>\n" +
961                         "  <property name=\"prop\">juhu!</property>\n" +
962                         "  <place ID=\"Place\"/>\n" +
963                         "  <place ID=\"daPlace\"/>\n" +
964                         "  <place ID=\"wrPlace\"/>\n" +
965                         "  <place ID=\"daPlace2\"/>\n" +
966                         "  <transition ID=\"daTransition\">\n" +
967                         "    <readPlace placeID=\"Place\" edgeExpression=\"exp\"/>\n" +
968                         "    <inputPlace placeID=\"daPlace\" edgeExpression=\"exp\"/>\n" +
969                         "    <writePlace placeID=\"wrPlace\" edgeExpression=\"exp\"/>\n" +
970                         "    <outputPlace placeID=\"daPlace2\"/>\n" +
971                         "  </transition>\n" +
972                         "</workflow>";
973 
974         checker.reset();
975         executeCall(new WorkflowFromXML(p, xml));
976         logger.info("got " + checker.events.size() + " events.");
977         for (int i = 0; i < checker.events.size(); i++) {
978             logger.info(checker.getEvent(i));
979         }
980         assertEquals("Wrong number of owls.", 1, p.owlsCount());
981         assertEquals("Wrong owl at index 0.", "OhWehElle", p.getOwls()[0]);
982         assertEquals("Wrong description.", "ich bin ein grid workflow", p.getDescription());
983         assertEquals("Wrong number of properties.", 1, p.getProperties().size());
984         assertEquals("Wrong property key at index 0.", "prop", p.getProperties().getProperty(0).getKey());
985         assertEquals("Wrong property value at index 0.", "juhu!", p.getProperties().getProperty(0).getValue());
986         assertEquals("Wrong number of places.", 4, p.getPlaces().length);
987         assertEquals("Wrong number of transitions.", 1, p.getTransitions().length);
988     }
989 
990     public void testWorkflowSetDescription() throws Exception {
991         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
992         p.getRoot().addStructureListener(checker);
993 
994         checker.reset();
995         executeCall(new WorkflowSetDescription(p, "desc"));
996         assertEquals("Wrong description.", "desc", p.getDescription());
997         checkNumberOfEvents(checker, 1);
998         checkPropertyChangeEvent(checker.getEvent(0), p, ProtocolWorkflow.NAMESPACE_PROPERTIES, ProtocolWorkflow.NAME_DESCRIPTION, "desc");
999     }
1000 
1001     public void testWorkflowSetProperties() throws Exception {
1002         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1003         p.getRoot().addStructureListener(checker);
1004 
1005         ProtocolProperties props = (ProtocolProperties) creator.newProperties();
1006         Property np1 = creator.newProperty("key1", "value1");
1007         Property np2 = creator.newProperty("key2", "value1");
1008         props.setProperties(new Property[]{np1, np2});
1009         p.getProperties().put("kk", "vv");
1010         Property op = p.getProperties().getProperty(0);
1011         ProtocolProperties oprops = (ProtocolProperties) p.getProperties();
1012 
1013         checker.reset();
1014         executeCall(new WorkflowSetProperties(p, props));
1015         assertEquals("Wrong GenericProperties instance.", props, p.getProperties());
1016         checkNumberOfEvents(checker, 2);
1017         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolProperties.NAMESPACE, ProtocolProperties.NAME, new Object[]{oprops});
1018         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolProperties.NAMESPACE, ProtocolProperties.NAME, new Object[]{props});
1019     }
1020 
1021     public void testWorkflowAddPlace() throws Exception {
1022         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1023         p.getRoot().addStructureListener(checker);
1024 
1025         ProtocolPlace pl = (ProtocolPlace) creator.newPlace();
1026 
1027         checker.reset();
1028         executeCall(new WorkflowAddPlace(p, pl));
1029         assertEquals("Wrong number of places.", 1, p.getPlaces().length);
1030         checkNumberOfEvents(checker, 1);
1031         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE, ProtocolPlace.NAME, new Object[]{pl});
1032     }
1033 
1034     public void testWorkflowAddTransition() throws Exception {
1035         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1036         p.getRoot().addStructureListener(checker);
1037 
1038         ProtocolTransition pl = (ProtocolTransition) creator.newTransition();
1039 
1040         checker.reset();
1041         executeCall(new WorkflowAddTransition(p, pl));
1042         assertEquals("Wrong number of transitions.", 1, p.getTransitions().length);
1043         checkNumberOfEvents(checker, 1);
1044         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME, new Object[]{pl});
1045     }
1046 
1047     public void testWorkflowRemovePlace() throws Exception {
1048         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1049         p.getRoot().addStructureListener(checker);
1050 
1051         ProtocolPlace pl = (ProtocolPlace) creator.newPlace();
1052         p.addPlace(pl);
1053 
1054         checker.reset();
1055         executeCall(new WorkflowRemovePlace(p, 0));
1056         assertEquals("Wrong number of places.", 0, p.getPlaces().length);
1057         checkNumberOfEvents(checker, 1);
1058         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE, ProtocolPlace.NAME, new Object[]{pl});
1059     }
1060 
1061     public void testWorkflowRemoveTransition() throws Exception {
1062         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1063         p.getRoot().addStructureListener(checker);
1064 
1065         ProtocolTransition pl = (ProtocolTransition) creator.newTransition();
1066         p.addTransition(pl);
1067 
1068         checker.reset();
1069         executeCall(new WorkflowRemoveTransition(p, 0));
1070         assertEquals("Wrong number of transitions.", 0, p.getTransitions().length);
1071         checkNumberOfEvents(checker, 1);
1072         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME, new Object[]{pl});
1073     }
1074 
1075     public void testWorkflowSetTransitions() throws Exception {
1076         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1077         p.getRoot().addStructureListener(checker);
1078 
1079         ProtocolTransition oe = (ProtocolTransition) creator.newTransition();
1080         ProtocolTransition e1 = (ProtocolTransition) creator.newTransition();
1081         ProtocolTransition e2 = (ProtocolTransition) creator.newTransition();
1082 
1083         checker.reset();
1084         executeCall(new WorkflowSetTransitions(p, new ProtocolTransition[]{oe}));
1085         checkNumberOfEvents(checker, 1);
1086         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME, new Object[]{oe});
1087 
1088         checker.reset();
1089         executeCall(new WorkflowSetTransitions(p, new ProtocolTransition[]{e1, e2}));
1090         checkNumberOfEvents(checker, 2);
1091         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME, new Object[]{oe});
1092         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolTransition.NAMESPACE, ProtocolTransition.NAME, new Object[]{e1, e2});
1093     }
1094 
1095     public void testWorkflowSetPlaces() throws Exception {
1096         ProtocolWorkflow p = (ProtocolWorkflow) creator.newWorkflow();
1097         p.getRoot().addStructureListener(checker);
1098 
1099         ProtocolPlace oe = (ProtocolPlace) creator.newPlace();
1100         ProtocolPlace e1 = (ProtocolPlace) creator.newPlace();
1101         ProtocolPlace e2 = (ProtocolPlace) creator.newPlace();
1102 
1103         checker.reset();
1104         executeCall(new WorkflowSetPlaces(p, new ProtocolPlace[]{oe}));
1105         checkNumberOfEvents(checker, 1);
1106         checkObjectsAddedEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE, ProtocolPlace.NAME, new Object[]{oe});
1107 
1108         checker.reset();
1109         executeCall(new WorkflowSetPlaces(p, new ProtocolPlace[]{e1, e2}));
1110         checkNumberOfEvents(checker, 2);
1111         checkObjectsRemovedEvent(checker.getEvent(0), p, ProtocolPlace.NAMESPACE, ProtocolPlace.NAME, new Object[]{oe});
1112         checkObjectsAddedEvent(checker.getEvent(1), p, ProtocolPlace.NAMESPACE, ProtocolPlace.NAME, new Object[]{e1, e2});
1113     }
1114 }