View Javadoc

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.gwui.taskframework;
7   
8   import java.util.*;
9   import javax.swing.*;
10  
11  import net.kwfgrid.gwui.gui.*;
12  import net.kwfgrid.gwui.*;
13  import net.kwfgrid.gwui.workflow.*;
14  import net.kwfgrid.gworkflowdl.structure.*;
15  import net.kwfgrid.gworkflowdl.protocol.structure.*;
16  
17  public class InputTask4Decision implements UserTask {
18      protected String _title;
19      protected String _tooltip;
20      protected Form _form;
21      protected Place _place;
22      protected Transition[] _transitions;
23      protected UAA _uaa;
24      protected InputTaskProducer4Decision _producer;
25      protected boolean _valid;
26      protected boolean _done;
27      protected String _decisionkey;
28  
29      public InputTask4Decision(InputTaskProducer4Decision producer,
30  			      String title, 
31  			      String tooltip, 
32  			      Form form, 
33  			      String decisionkey,
34  			      Place place,			      
35  			      Transition[] transitions,
36  			      UAA uaa) {
37  	_producer = producer;
38  	_title = title;
39  	_tooltip = tooltip;
40  	_form = form;
41  	_place = place;
42  	_transitions = transitions;
43  	_uaa = uaa;
44  	_valid = true;
45  	_done = false;
46  	_decisionkey = decisionkey;
47      }
48  
49      protected Transition[] getTransitions() {
50  	return _transitions;
51      }
52  
53      protected Place getPlace() {
54  	return _place;
55      }
56  
57      private void setValid(boolean valid) {
58  	_valid = valid;
59  	if (!valid) _producer.setTaskInvalid(this);
60      }
61  
62      private void setDone(boolean done) {
63  	_done = done;
64  	if (done) _producer.setTaskDone(this);
65      }
66  
67      private boolean containsOneOf(Collection container, Object[] objects) {
68  	for (int i=0; i<objects.length; i++) {
69  	    if (container.contains(objects[i])) return true;
70  	}
71  	return false;
72      }
73  
74      public boolean isValid() {
75  	return _valid;
76      }
77      
78      public boolean isDone() {
79  	return _done;
80      }
81  
82      public void execute() {
83  	_form.show();
84      }
85  
86      public String getTitle() {
87  	return _title;
88      }
89  
90      public Icon getIcon() {
91  	return InputTaskProducer4Decision.TASK_ICON;
92      }
93  
94      public String getToolTipText() {
95  	return _tooltip;
96      }
97  
98      public void dispose() {
99  	if (_form != null) _form.dispose();
100 	_form = null;
101     }
102 
103     // CONTINUE HERE FIXME
104 
105     // task is done if the workflow property "decision.x" has been removed.
106     // task is invalid if one of the transitions or the place has been removed.
107 
108     public void objectsAdded(IStructureObject parent, String namespace, String name, List objects) {
109     }
110 
111     public void objectsRemoved(IStructureObject parent, String namespace, String name, List objects) {
112 	Workflow wf = (Workflow)parent.getRoot();
113 	String dprop = wf.getProperties().get(_decisionkey);
114 	setDone(dprop == null || "".equals(dprop.trim()));
115 	setValid(isValid() && !objects.contains(_place));
116 	if (isValid() &&
117 	    ProtocolTransition.NAME.equals(name) &&
118 	    XMLUtilities.equalNamespace(namespace, ProtocolTransition.NAMESPACE)) {
119 	    setValid(!containsOneOf(objects, _transitions));
120 	}
121     }
122 
123     public void propertyChanged(IStructureObject parent, String namespace, String name, Object newvalue) {
124 	Workflow wf = (Workflow)parent.getRoot();
125 	String dprop = wf.getProperties().get(_decisionkey);
126 	setDone(dprop == null || "".equals(dprop.trim()));
127     }
128 }
129