1
2
3
4
5
6 package net.kwfgrid.gwui.applet;
7
8 import net.kwfgrid.gwui.*;
9 import net.kwfgrid.gwui.graphview.*;
10 import net.kwfgrid.gwui.taskframework.*;
11 import org.apache.log4j.Logger;
12 import org.glassbox.Theme;
13 import org.glassbox.graphview.DefaultCursor;
14 import org.glassbox.gui.Group;
15 import org.glassbox.gui.LayoutLayer;
16 import org.glassbox.gui.LayoutLayerDecorator;
17 import org.glassbox.gui.VisibleGroup;
18 import org.glassbox.widgets.VisibleExecutor;
19
20 import javax.swing.*;
21 import java.awt.*;
22 import java.net.URL;
23 import java.security.Permission;
24
25 /***
26 The GWUI Applet.
27 */
28 public class MainApplet extends JApplet implements Browser, WorkflowApplet {
29
30 private static final Logger logger = Logger.getLogger(MainApplet.class);
31
32 final static class MySecurityManager extends SecurityManager {
33
34 public void checkPermission(Permission perm) {}
35 public void checkPermission(Permission perm, Object context) {}
36 }
37
38 static {
39 System.setSecurityManager(new MySecurityManager());
40 }
41
42 private static final String DRAGGING_MANIPULATOR_CURSOR_KEY = "glassbox.graphview.DraggingManipulator.cursor";
43 private static final String DEFAULT_CURSOR_KEY = "glassbox.graphview.GGraphPane.cursor";
44
45
46 private VisibleWorkflowGroup _gui;
47
48 public MainApplet() {
49
50 }
51
52 public void init() {
53
54 GWUI.setLoggerLevel(GWUI.SERVICESTUBS_PACKAGE,getParameter(GWUI.SERVICESTUBS_LOGGER_LEVEL_KEY));
55 GWUI.setLoggerLevel(GWUI.GWESCLIENT_PACKAGE,getParameter(GWUI.GWESCLIENT_LOGGER_LEVEL_KEY));
56
57
58 GWUI.getInstance().setProperty(GWUI.GWES_URI_KEY, getParameter(GWUI.GWES_URI_KEY));
59 GWUI.getInstance().setProperty(GWUI.GRAPHVIZ_URI_KEY, getParameter(GWUI.GRAPHVIZ_URI_KEY));
60 GWUI.getInstance().setProperty(GWUI.USER_ID_KEY, getParameter(GWUI.USER_ID_KEY));
61 GWUI.getInstance().setProperty(GWUI.UAA_FRAME_KEY, getParameter(GWUI.UAA_FRAME_KEY));
62 GWUI.getInstance().setProperty(GWUI.UAA_PORTLET_URL_KEY, getParameter(GWUI.UAA_PORTLET_URL_KEY));
63 GWUI.getInstance().setProperty(GWUI.FORM_SELECTION_SERVLET_URL_KEY, getParameter(GWUI.FORM_SELECTION_SERVLET_URL_KEY));
64 GWUI.getInstance().setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
65 if (getParameter(GWUI.XSD_PATH) != null) System.setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
66
67
68 WorkflowStatusMonitor monitor = new WorkflowStatusMonitor();
69 WorkflowStatusView statusview = new WorkflowStatusView();
70 VisibleExecutor executor = new VisibleExecutor(statusview);
71 WorkflowInstanceManager instancemanager = new SingleClientWorkflowInstanceManager();
72
73 _gui = new VisibleWorkflowGroup(instancemanager);
74
75 TransitionNodePainter2 transitionnodepainter = new TransitionNodePainter2();
76 PlaceNodePainter placenodepainter = new PlaceNodePainter();
77 ArcEdgePainter arcedgepainter = new ArcEdgePainter();
78
79 WorkflowGraphAnalyzer analyzer = new DefaultWorkflowGraphAnalyzer();
80 LensManager lensmanager = new LensManager();
81 LayoutFactory layoutfactory = new DOTLayoutFactory(executor, lensmanager);
82 WorkflowGraphManager graphmanager = new WorkflowGraphManager(analyzer, layoutfactory);
83 lensmanager.setGraphPane(graphmanager.getGraphPane());
84 lensmanager.addMember(arcedgepainter);
85 lensmanager.addMember(transitionnodepainter);
86 lensmanager.addMember(placenodepainter);
87 WorkflowController controller = null;
88 WorkflowLoader loader = null;
89 try {
90 controller = new WorkflowController(executor);
91 loader = new WorkflowLoader(executor, _gui);
92 } catch (Exception e) {
93 logger.error("exception during Applet.init(): " + e, e);
94 }
95 WorkflowDocumentInspector inspector = new WorkflowDocumentInspector(executor);
96 UAA uaa = new UAA(this);
97
98 transitionnodepainter.addButton(new TransitionStatusIcon(graphmanager.getGraphPane()));
99
100 PlaceInspector tokenmanipulator = new PlaceInspector(executor, uaa);
101 TransitionInspector conditionmanipulator = new TransitionInspector(executor, uaa);
102 UserTaskList tasklist = new UserTaskList();
103 InputTaskProducer4WCTRefinementFailed datainputproducer = new GraphInputTaskProducer4WCTRefinementFailed(graphmanager.getGraphPane(), executor, uaa, this);
104 InputTaskProducer4Decision decisionproducer = new GraphInputTaskProducer4Decision(graphmanager.getGraphPane(), executor, uaa, this);
105 tasklist.addUserTaskProducer(decisionproducer);
106 tasklist.addUserTaskProducer(datainputproducer);
107
108 transitionnodepainter.addButton(new NodeButton4Decision(decisionproducer));
109 placenodepainter.addButton(new NodeButton4WCTRefinementFailed(datainputproducer));
110
111 statusview.setUserTaskHandler(tasklist);
112
113 graphmanager.getGraphPane().setNodePainter(TransitionNode.class, transitionnodepainter);
114 graphmanager.getGraphPane().setNodePainter(PlaceNode.class, placenodepainter);
115 graphmanager.getGraphPane().setEdgePainter(ReadEdge.class, arcedgepainter);
116 graphmanager.getGraphPane().setEdgePainter(InEdge.class, arcedgepainter);
117 graphmanager.getGraphPane().setEdgePainter(OutEdge.class, arcedgepainter);
118 graphmanager.getGraphPane().addManipulator(transitionnodepainter.getGraphManipulator());
119 graphmanager.getGraphPane().addManipulator(placenodepainter.getGraphManipulator());
120 graphmanager.getGraphPane().addManipulator(tokenmanipulator.getManipulator());
121 graphmanager.getGraphPane().addManipulator(conditionmanipulator.getManipulator());
122
123
124
125
126
127
128
129 graphmanager.getGraphPane().addManipulator(new DefaultCursor(Theme.getCursor(DEFAULT_CURSOR_KEY)));
130
131
132 LayoutLayer toppane = new LayoutLayer(new GridBagLayout(),
133 "kwfgrid.GWUI.transparent-pane",
134 false);
135 LayoutLayer d_toppane = new LayoutLayerDecorator(new BorderLayout(),
136 "kwfgrid.GWUI.widget-pane",
137 false,
138 toppane,
139 BorderLayout.NORTH);
140
141 _gui.addLayer(9, d_toppane);
142
143 _gui.addLayer(0, new LayoutLayer(new BorderLayout(),
144 "kwfgrid.GWUI.transparent-pane",
145 false));
146
147 _gui.addMember(graphmanager, 0);
148
149 LayoutLayer bottompane = new LayoutLayer(new GridBagLayout(),
150 "kwfgrid.GWUI.transparent-pane",
151 false);
152 LayoutLayer d_bottompane = new LayoutLayerDecorator(new BorderLayout(),
153 "kwfgrid.GWUI.widget-pane",
154 false,
155 bottompane,
156 BorderLayout.SOUTH);
157
158
159 _gui.addLayer(10, d_bottompane);
160
161 GridBagConstraints c = new GridBagConstraints();
162
163 c.weightx = 0.0;
164 c.fill = GridBagConstraints.NONE;
165 _gui.addMember(loader, 10, c);
166
167 _gui.addMember(controller, 10, c);
168
169 c.weightx = 1.0;
170 c.fill = GridBagConstraints.BOTH;
171 _gui.addMember(executor, 10, c);
172
173 c.weightx = 0.0;
174 c.fill = GridBagConstraints.NONE;
175 _gui.addMember(lensmanager, 10, c);
176
177 c.gridwidth = GridBagConstraints.REMAINDER;
178 _gui.addMember(inspector, 10, c);
179
180 LayoutLayer sidepane = new LayoutLayer(new GridBagLayout(),
181 "kwfgrid.GWUI.transparent-pane",
182 false);
183 LayoutLayer d_sidepane = new LayoutLayerDecorator(new BorderLayout(),
184 "kwfgrid.GWUI.widget-pane",
185 false,
186 sidepane,
187 BorderLayout.WEST);
188
189 _gui.addLayer(11, d_sidepane);
190
191 c.weighty = 1.0;
192 c.weightx = 1.0;
193 c.fill = GridBagConstraints.NONE;
194 c.anchor = GridBagConstraints.NORTH;
195 c.insets = new Insets(3, 3, 30, 3);
196 c.gridx = 0;
197 c.gridy = 0;
198 c.gridwidth = 1;
199 c.gridheight = GridBagConstraints.REMAINDER;
200
201 _gui.addMember(tasklist, 11, c);
202
203 _gui.addMember(conditionmanipulator);
204 _gui.addMember(tokenmanipulator);
205 _gui.addMember(monitor);
206 _gui.addMember(statusview);
207
208 _gui.setProperty(VisibleGroup.VIEWPORT_SIZE_KEY, getContentPane().getSize());
209
210 GWUI.getInstance().addMember(_gui);
211 getContentPane().setLayout(new BorderLayout());
212 getContentPane().add(_gui.getView(), BorderLayout.CENTER);
213 getContentPane().validate();
214
215
216 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.INITIATED);
217
218 setWorkflowID(getParameter(GWUI.WORKFLOW_ID_KEY));
219 }
220
221
222 public void start() {
223 if (!Group.RUNNING.equals(GWUI.getInstance().getProperty(Group.APPLICATION_STATUS_KEY)))
224 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.RUNNING);
225 }
226
227 public void stop() {
228 if (Group.RUNNING.equals(GWUI.getInstance().getProperty(Group.APPLICATION_STATUS_KEY)))
229 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.PAUSED);
230 }
231
232 public void destroy() {
233 if (!Group.EXITING.equals(GWUI.getInstance().getProperty(Group.APPLICATION_STATUS_KEY)))
234 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.EXITING);
235 }
236
237 public void showDocument(URL url) {
238 getAppletContext().showDocument(url);
239 }
240
241 public void showDocument(URL url, String target) {
242 getAppletContext().showDocument(url, target);
243 }
244
245 public void setWorkflowID(String workflowid) {
246 if ("".equals(workflowid)) workflowid = null;
247 _gui.setWorkflowID(workflowid);
248 }
249 }