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.SwingThread;
13 import org.glassbox.Theme;
14 import org.glassbox.executor.Executor;
15 import org.glassbox.graphview.DefaultCursor;
16 import org.glassbox.gui.*;
17
18 import javax.swing.*;
19 import java.awt.*;
20 import java.net.URL;
21
22 /***
23 The GWUI Applet.
24 */
25 public class GWUIApplet extends JApplet implements Browser, WorkflowApplet {
26 public static final String IDENTIFIER = "kwfgrid.GWUIApplet";
27
28 private static final String DRAGGING_MANIPULATOR_CURSOR_KEY = "glassbox.graphview.DraggingManipulator.cursor";
29 private static final String DEFAULT_CURSOR_KEY = "glassbox.graphview.GGraphPane.cursor";
30 private static final Logger logger = Logger.getLogger(GWUIApplet.class);
31
32 private WorkflowAppletGroup _gui;
33 private JLayeredGroup _group;
34
35 public GWUIApplet() {
36 logger.debug("GWUIApplet instantiated.");
37 _gui = null;
38 _group = null;
39 }
40
41 public void init() {
42
43 GWUI.getInstance().setProperty(GWUI.GWES_URI_KEY, getParameter(GWUI.GWES_URI_KEY));
44 GWUI.getInstance().setProperty(GWUI.GRAPHVIZ_URI_KEY, getParameter(GWUI.GRAPHVIZ_URI_KEY));
45 GWUI.getInstance().setProperty(GWUI.USER_ID_KEY, getParameter(GWUI.USER_ID_KEY));
46 GWUI.getInstance().setProperty(GWUI.UAA_FRAME_KEY, getParameter(GWUI.UAA_FRAME_KEY));
47 GWUI.getInstance().setProperty(GWUI.UAA_PORTLET_URL_KEY, getParameter(GWUI.UAA_PORTLET_URL_KEY));
48 GWUI.getInstance().setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
49 if (getParameter(GWUI.XSD_PATH) != null) System.setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
50
51 _gui = WorkflowAppletGroup.getInstance(this);
52
53 SwingThread.invokeLater(new Runnable() {
54 public void run() {
55 try {
56 doInit();
57 } catch (Exception e) {
58 logger.error("Exception during doInit(): "+e, e);
59 }
60 }
61 });
62 }
63
64 private void doInit() throws Exception {
65
66 _group = new JLayeredGroup() {
67 public String getIdentifier() {
68 return GWUIApplet.this.IDENTIFIER;
69 }
70 };
71 _gui.addMember(_group);
72
73 Executor executor = _gui.getExecutor(this);
74 TransitionNodePainter2 transitionnodepainter = new TransitionNodePainter2();
75 PlaceNodePainter placenodepainter = new PlaceNodePainter();
76 ArcEdgePainter arcedgepainter = new ArcEdgePainter();
77
78 WorkflowGraphAnalyzer analyzer = new DefaultWorkflowGraphAnalyzer();
79 LensManager lensmanager = new LensManager();
80 LayoutFactory layoutfactory = new DOTLayoutFactory(executor, lensmanager);
81 WorkflowGraphManager graphmanager = new WorkflowGraphManager(analyzer, layoutfactory);
82 lensmanager.setGraphPane(graphmanager.getGraphPane());
83 lensmanager.addMember(arcedgepainter);
84 lensmanager.addMember(transitionnodepainter);
85 lensmanager.addMember(placenodepainter);
86 WorkflowLoader loader = new WorkflowLoader(executor, _gui);
87 WorkflowStatusMonitor monitor = new WorkflowStatusMonitor();
88 WorkflowDocumentInspector inspector = new WorkflowDocumentInspector(executor);
89 UAA uaa = new UAA(this);
90
91 UserTaskHandler taskhandler = new UserTaskHandler();
92 InputTaskProducer4WCTRefinementFailed wctinputproducer = new GraphInputTaskProducer4WCTRefinementFailed(graphmanager.getGraphPane(), executor, uaa, this);
93 InputTaskProducer4Decision decisionproducer = new GraphInputTaskProducer4Decision(graphmanager.getGraphPane(), executor, uaa, this);
94 taskhandler.addUserTaskProducer(decisionproducer);
95 taskhandler.addUserTaskProducer(wctinputproducer);
96
97 transitionnodepainter.addButton(new TransitionStatusIcon(graphmanager.getGraphPane()));
98 transitionnodepainter.addButton(new NodeButton4WCTRefinementFailed(wctinputproducer));
99 placenodepainter.addButton(new NodeButton4Decision(decisionproducer));
100
101 PlaceInspector tokenmanipulator = new PlaceInspector(executor, uaa);
102 TransitionInspector conditionmanipulator = new TransitionInspector(executor, uaa);
103
104 graphmanager.getGraphPane().setNodePainter(TransitionNode.class, transitionnodepainter);
105 graphmanager.getGraphPane().setNodePainter(PlaceNode.class, placenodepainter);
106 graphmanager.getGraphPane().setEdgePainter(ReadEdge.class, arcedgepainter);
107 graphmanager.getGraphPane().setEdgePainter(InEdge.class, arcedgepainter);
108 graphmanager.getGraphPane().setEdgePainter(OutEdge.class, arcedgepainter);
109 graphmanager.getGraphPane().addManipulator(transitionnodepainter.getGraphManipulator());
110 graphmanager.getGraphPane().addManipulator(placenodepainter.getGraphManipulator());
111 graphmanager.getGraphPane().addManipulator(tokenmanipulator.getManipulator());
112 graphmanager.getGraphPane().addManipulator(conditionmanipulator.getManipulator());
113 graphmanager.getGraphPane().addManipulator(new DefaultCursor(Theme.getCursor(DEFAULT_CURSOR_KEY)));
114
115 _group.addLayer(0, new LayoutLayer(new BorderLayout(),
116 "kwfgrid.GWUI.transparent-pane",
117 false));
118
119 _group.addMember(graphmanager, 0);
120
121 LayoutLayer bottompane = new LayoutLayer(new GridBagLayout(),
122 "kwfgrid.GWUI.transparent-pane",
123 false);
124 LayoutLayer d_bottompane = new LayoutLayerDecorator(new BorderLayout(),
125 "kwfgrid.GWUI.widget-pane",
126 false,
127 bottompane,
128 BorderLayout.SOUTH);
129
130
131 _group.addLayer(10, d_bottompane);
132
133 GridBagConstraints c = new GridBagConstraints();
134
135 c.weightx = 1.0;
136 c.gridx = 0;
137 c.anchor = GridBagConstraints.WEST;
138 c.fill = GridBagConstraints.NONE;
139 c.gridwidth = 1;
140 _group.addMember(loader, 10, c);
141
142 c.weightx = 0.0;
143 c.gridx = 1;
144 c.anchor = GridBagConstraints.WEST;
145 c.fill = GridBagConstraints.HORIZONTAL;
146 c.gridwidth = GridBagConstraints.RELATIVE;
147 _group.addMember(inspector, 10, c);
148
149 c.weightx = 0.0;
150 c.gridx = 2;
151 c.fill = GridBagConstraints.BOTH;
152 c.gridwidth = GridBagConstraints.REMAINDER;
153 _group.addMember(lensmanager, 10, c);
154
155 _group.addMember(conditionmanipulator);
156 _group.addMember(tokenmanipulator);
157 _group.addMember(monitor);
158 _group.addMember(taskhandler);
159
160 _group.setProperty(VisibleGroup.VIEWPORT_SIZE_KEY, getContentPane().getSize());
161
162 getContentPane().setLayout(new BorderLayout());
163 getContentPane().add(_group.getView(), BorderLayout.CENTER);
164 getContentPane().validate();
165 getContentPane().repaint();
166
167
168 _gui.getExecutor(this).execute(new Runnable() {
169 public void run() {
170 _gui.setAppletStatus(GWUIApplet.this, Group.RUNNING);
171 _group.setProperty(Group.APPLICATION_STATUS_KEY, Group.RUNNING);
172 }
173 });
174
175 setWorkflowID(getParameter(GWUI.WORKFLOW_ID_KEY));
176 }
177
178
179 public void destroy() {
180 _gui.setAppletStatus(GWUIApplet.this, Group.EXITING);
181 _group.setProperty(Group.APPLICATION_STATUS_KEY, Group.EXITING);
182 }
183
184 public void showDocument(URL url) {
185 getAppletContext().showDocument(url);
186 }
187
188 public void showDocument(URL url, String target) {
189 getAppletContext().showDocument(url, target);
190 }
191
192 public void setWorkflowID(final String workflowid) {
193 _gui.getExecutor(this).execute(new Runnable() {
194 public void run() {
195 logger.debug("Setting workflow ID "+ workflowid);
196 _gui.setWorkflowID("".equals(workflowid) ? null : workflowid);
197 }
198 });
199 }
200 }