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.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          // Permission overriding methods..
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          // set special logger levels
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          // set the global properties.
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          // Build the GUI.
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       graphmanager.getGraphPane().addManipulator(new DraggingManipulator(Theme.getCursor(DRAGGING_MANIPULATOR_CURSOR_KEY)) {
124           protected boolean isStartDraggingEvent(MouseEvent e) {
125               return true;
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         // GWUI is initiated.
216         GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.INITIATED);
217         // Set th workflow ID.
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 }