1
2
3
4
5
6 package net.kwfgrid.gwui.applet;
7
8 import net.kwfgrid.gwui.*;
9 import net.kwfgrid.gwui.taskframework.InputTaskProducer4Decision;
10 import net.kwfgrid.gwui.taskframework.InputTaskProducer4WCTRefinementFailed;
11 import net.kwfgrid.gwui.taskframework.UserTaskHandler;
12 import org.apache.log4j.Logger;
13 import org.glassbox.SwingThread;
14 import org.glassbox.executor.Executor;
15 import org.glassbox.gui.Group;
16 import org.glassbox.gui.JLayeredGroup;
17 import org.glassbox.gui.LayoutLayer;
18 import org.glassbox.gui.VisibleGroup;
19
20 import javax.swing.*;
21 import java.awt.*;
22 import java.net.URL;
23
24 /***
25 The Workflow Control Applet.
26 */
27 public class WorkflowControlApplet extends JApplet implements Browser, WorkflowApplet {
28 public static final String IDENTIFIER = "kwfgrid.WorkflowControlApplet";
29
30 private static final Logger logger = Logger.getLogger(WorkflowControlApplet.class);
31
32 private WorkflowAppletGroup _gui;
33 private JLayeredGroup _group;
34
35 public WorkflowControlApplet() {
36 logger.debug("WorkflowControlApplet 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.USER_ID_KEY, getParameter(GWUI.USER_ID_KEY));
45 GWUI.getInstance().setProperty(GWUI.UAA_FRAME_KEY, getParameter(GWUI.UAA_FRAME_KEY));
46 GWUI.getInstance().setProperty(GWUI.UAA_PORTLET_URL_KEY, getParameter(GWUI.UAA_PORTLET_URL_KEY));
47 GWUI.getInstance().setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
48 if (getParameter(GWUI.XSD_PATH) != null) System.setProperty(GWUI.XSD_PATH, getParameter(GWUI.XSD_PATH));
49
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 _group = new JLayeredGroup() {
66 public String getIdentifier() {
67 return WorkflowControlApplet.this.IDENTIFIER;
68 }
69 };
70 _gui.addMember(_group);
71
72 Executor executor = _gui.getExecutor(this);
73
74 UAA uaa = new UAA(this);
75
76 UserTaskHandler taskhandler = new UserTaskHandler();
77 InputTaskProducer4WCTRefinementFailed wctinputproducer = new InputTaskProducer4WCTRefinementFailed(executor, uaa, this);
78 InputTaskProducer4Decision decisionproducer = new InputTaskProducer4Decision(executor, uaa, this);
79 taskhandler.addUserTaskProducer(wctinputproducer);
80 taskhandler.addUserTaskProducer(decisionproducer);
81
82 WorkflowStatusView statusview = new WorkflowStatusView(taskhandler);
83 WorkflowController controller = new WorkflowController(executor);
84 WorkflowStatusMonitor monitor = new WorkflowStatusMonitor();
85
86 LayoutLayer bottompane = new LayoutLayer(new BorderLayout(),
87 "kwfgrid.GWUI.transparent-pane",
88 false);
89
90 _group.addLayer(10, bottompane);
91 _group.addMember(controller, 10, BorderLayout.WEST);
92
93
94 _group.addMember(taskhandler);
95 _group.addMember(monitor);
96 _group.addMember(statusview, 10, BorderLayout.CENTER);
97
98 _group.setProperty(VisibleGroup.VIEWPORT_SIZE_KEY, getContentPane().getSize());
99
100 getContentPane().setLayout(new BorderLayout());
101 getContentPane().add(_group.getView(), BorderLayout.CENTER);
102 getContentPane().validate();
103 getContentPane().repaint();
104
105
106 _gui.getExecutor(this).execute(new Runnable() {
107 public void run() {
108 _gui.setAppletStatus(WorkflowControlApplet.this, Group.RUNNING);
109 _group.setProperty(Group.APPLICATION_STATUS_KEY, Group.RUNNING);
110 }
111 });
112
113
114 setWorkflowID(getParameter(GWUI.WORKFLOW_ID_KEY));
115 }
116
117
118 public void destroy() {
119 _gui.setAppletStatus(WorkflowControlApplet.this, Group.EXITING);
120 _group.setProperty(Group.APPLICATION_STATUS_KEY, Group.EXITING);
121 }
122
123 public void showDocument(URL url) {
124 getAppletContext().showDocument(url);
125 }
126
127 public void showDocument(URL url, String target) {
128 getAppletContext().showDocument(url, target);
129 }
130
131 public void setWorkflowID(final String workflowid) {
132 _gui.getExecutor(this).execute(new Runnable() {
133 public void run() {
134 logger.debug("Setting workflow ID "+ workflowid);
135 _gui.setWorkflowID("".equals(workflowid) ? null : workflowid);
136 }
137 });
138 }
139 }