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.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          // Permission overriding methods..
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          // set special logger levels
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          // set the global properties.
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          // Build the GUI.
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         // GWUI is initiated.
175         GWUI.getInstance().setProperty(Group.APPLICATION_STATUS_KEY, Group.INITIATED);
176         // Set th workflow ID.
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 }