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.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  	// set the global properties.
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  	//_gui.getExecutor(this).execute(new Runnable() {
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  	// Build the GUI.
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 	// Applet is initiated.
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 	// Set th workflow ID.
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 }