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.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  	// set the global properties.
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  	// Build the GUI.
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  	_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  	//_group.addMember(executor, 10, BorderLayout.CENTER);
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 	// Applet is initiated.
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 	// Set th workflow ID.
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 }