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.GraphInputTaskProducer4Decision;
11 import net.kwfgrid.gwui.taskframework.InputTaskProducer4Decision;
12 import net.kwfgrid.gwui.taskframework.NodeButton4Decision;
13 import net.kwfgrid.gwui.taskframework.UserTaskHandler;
14 import org.apache.log4j.Logger;
15 import org.apache.log4j.Level;
16 import org.glassbox.Theme;
17 import org.glassbox.graphview.DefaultCursor;
18 import org.glassbox.gui.Group;
19 import org.glassbox.gui.LayoutLayer;
20 import org.glassbox.gui.LayoutLayerDecorator;
21 import org.glassbox.gui.VisibleGroup;
22 import org.glassbox.widgets.VisibleExecutor;
23
24 import javax.swing.*;
25 import java.awt.*;
26 import java.net.URL;
27 import java.security.Permission;
28
29 /***
30 The GWUI Applet for InstantGrid.
31 */
32 public class IGApplet extends JApplet implements Browser, WorkflowApplet {
33
34 private static final Logger logger = Logger.getLogger(IGApplet.class);
35
36
37 final static class MySecurityManager extends SecurityManager {
38
39 public void checkPermission(Permission perm) {}
40 public void checkPermission(Permission perm, Object context) {}
41 }
42
43 static {
44 System.setSecurityManager(new MySecurityManager());
45 }
46
47 private static final String DRAGGING_MANIPULATOR_CURSOR_KEY = "glassbox.graphview.DraggingManipulator.cursor";
48 private static final String DEFAULT_CURSOR_KEY = "glassbox.graphview.GGraphPane.cursor";
49
50
51 private VisibleWorkflowGroup _gui;
52
53 public IGApplet() {
54
55 }
56
57 public void init() {
58
59
60 GWUI.setLoggerLevel(GWUI.SERVICESTUBS_PACKAGE,getParameter(GWUI.SERVICESTUBS_LOGGER_LEVEL_KEY));
61 GWUI.setLoggerLevel(GWUI.GWESCLIENT_PACKAGE,getParameter(GWUI.GWESCLIENT_LOGGER_LEVEL_KEY));
62
63
64 GWUI.getInstance().setProperty(GWUI.GWES_URI_KEY, getParameter(GWUI.GWES_URI_KEY));
65 GWUI.getInstance().setProperty(GWUI.GRAPHVIZ_URI_KEY, getParameter(GWUI.GRAPHVIZ_URI_KEY));
66 GWUI.getInstance().setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
67 if (getParameter(GWUI.XSD_PATH) != null) System.setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
68 GWUI.getInstance().setProperty(GWUI.USER_ID_KEY, getParameter(GWUI.USER_ID_KEY));
69
70
71 WorkflowStatusMonitor monitor = new WorkflowStatusMonitor();
72 WorkflowStatusView statusview = new WorkflowStatusView();
73 VisibleExecutor executor = new VisibleExecutor(statusview);
74 WorkflowInstanceManager instancemanager = new SingleClientWorkflowInstanceManager();
75
76 _gui = new VisibleWorkflowGroup(instancemanager);
77
78 TransitionNodePainter2 transitionnodepainter = new TransitionNodePainter2();
79 PlaceNodePainter placenodepainter = new PlaceNodePainter();
80 ArcEdgePainter arcedgepainter = new ArcEdgePainter();
81
82 WorkflowGraphAnalyzer analyzer = new DefaultWorkflowGraphAnalyzer();
83 LensManager lensmanager = new LensManager();
84 LayoutFactory layoutfactory = new DOTLayoutFactory(executor, lensmanager);
85 WorkflowGraphManager graphmanager = new WorkflowGraphManager(analyzer, layoutfactory);
86 lensmanager.setGraphPane(graphmanager.getGraphPane());
87 lensmanager.addMember(arcedgepainter);
88 lensmanager.addMember(transitionnodepainter);
89 lensmanager.addMember(placenodepainter);
90 WorkflowController controller = null;
91 WorkflowLoader loader = null;
92 try {
93 controller = new WorkflowController(executor);
94 loader = new WorkflowLoader(executor, _gui);
95 } catch (Exception e) {
96 logger.error("exception during Applet.init(): " + e, e);
97 }
98 WorkflowDocumentInspector inspector = new WorkflowDocumentInspector(executor);
99 UAA uaa = new NullUAA();
100
101 UserTaskHandler taskhandler = new UserTaskHandler();
102 InputTaskProducer4Decision decisionproducer = new GraphInputTaskProducer4Decision(graphmanager.getGraphPane(), executor, uaa, this);
103 taskhandler.addUserTaskProducer(decisionproducer);
104
105 transitionnodepainter.addButton(new TransitionStatusIcon(graphmanager.getGraphPane()));
106 placenodepainter.addButton(new NodeButton4Decision(decisionproducer));
107
108 statusview.setUserTaskHandler(taskhandler);
109
110 PlaceInspector tokenmanipulator = new PlaceInspector(executor, null);
111 TransitionInspector conditionmanipulator = new TransitionInspector(executor, null);
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(placenodepainter.getGraphManipulator());
119 graphmanager.getGraphPane().addManipulator(tokenmanipulator.getManipulator());
120 graphmanager.getGraphPane().addManipulator(conditionmanipulator.getManipulator());
121 graphmanager.getGraphPane().addManipulator(new DefaultCursor(Theme.getCursor(DEFAULT_CURSOR_KEY)));
122
123 _gui.addLayer(0, new LayoutLayer(new BorderLayout(),
124 "kwfgrid.GWUI.transparent-pane",
125 false));
126
127 _gui.addMember(graphmanager, 0);
128
129 LayoutLayer bottompane = new LayoutLayer(new GridBagLayout(),
130 "kwfgrid.GWUI.transparent-pane",
131 false);
132 LayoutLayer d_bottompane = new LayoutLayerDecorator(new BorderLayout(),
133 "kwfgrid.GWUI.widget-pane",
134 false,
135 bottompane,
136 BorderLayout.SOUTH);
137
138
139 _gui.addLayer(10, d_bottompane);
140
141 GridBagConstraints c = new GridBagConstraints();
142
143 c.weightx = 0.0;
144 c.fill = GridBagConstraints.NONE;
145
146 _gui.addMember(loader, 10, c);
147
148 _gui.addMember(controller, 10, c);
149
150 c.weightx = 1.0;
151 c.fill = GridBagConstraints.BOTH;
152 _gui.addMember(executor, 10, c);
153
154 c.weightx = 0.0;
155 c.fill = GridBagConstraints.NONE;
156 _gui.addMember(inspector, 10, c);
157
158 c.gridwidth = GridBagConstraints.REMAINDER;
159 _gui.addMember(lensmanager, 10, c);
160
161 _gui.addMember(conditionmanipulator);
162 _gui.addMember(tokenmanipulator);
163 _gui.addMember(monitor);
164 _gui.addMember(statusview);
165 _gui.addMember(taskhandler);
166
167 _gui.setProperty(VisibleGroup.VIEWPORT_SIZE_KEY, getContentPane().getSize());
168
169 GWUI.getInstance().addMember(_gui);
170 getContentPane().setLayout(new BorderLayout());
171 getContentPane().add(_gui.getView(), BorderLayout.CENTER);
172 getContentPane().validate();
173
174
175 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.INITIATED);
176
177 setWorkflowID(getParameter(GWUI.WORKFLOW_ID_KEY));
178 }
179
180 public void start() {
181 if (!Group.RUNNING.equals(GWUI.getInstance().getProperty(Group.APPLICATION_STATUS_KEY)))
182 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.RUNNING);
183 }
184
185 public void stop() {
186 if (Group.RUNNING.equals(GWUI.getInstance().getProperty(Group.APPLICATION_STATUS_KEY)))
187 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.PAUSED);
188 }
189
190 public void destroy() {
191 if (!Group.EXITING.equals(GWUI.getInstance().getProperty(Group.APPLICATION_STATUS_KEY)))
192 GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.EXITING);
193 }
194
195 public void showDocument(URL url) {
196 getAppletContext().showDocument(url);
197 }
198
199 public void showDocument(URL url, String target) {
200 getAppletContext().showDocument(url, target);
201 }
202
203 public void setWorkflowID(String workflowid) {
204 if ("".equals(workflowid)) workflowid = null;
205 _gui.setWorkflowID(workflowid);
206 }
207 }