1
2
3
4
5
6 package net.kwfgrid.gwui;
7
8 import net.kwfgrid.gwui.gui.*;
9 import net.kwfgrid.gworkflowdl.protocol.structure.*;
10
11 import org.glassbox.gui.*;
12 import org.glassbox.Theme;
13 import org.glassbox.SwingFactory;
14 import org.glassbox.SwingThread;
15 import org.glassbox.widgets.VisibleExecutor;
16 import org.glassbox.executor.Executor;
17
18 import javax.swing.*;
19 import java.awt.*;
20 import java.awt.event.ActionEvent;
21 import java.awt.event.ActionListener;
22
23 import org.apache.log4j.Logger;
24
25 /***
26 A widget to inspect the current workflow document.
27 This widget has the following properties which can be configured in the application's theme:<br>
28 <ul>
29 <li>kwfgrid.WorkflowDocumentInspector.button.icon</li>
30 <li>kwfgrid.Toolbar.background.color</li>
31 <li>kwfgrid.Toolbar.border.color</li>
32 <li>kwfgrid.Toolbar.insets</li>
33 <li>kwfgrid.Toolbar.layout-gap.size</li>
34 <li>kwfgrid.Toolbar.button.background.color</li>
35 <li>kwfgrid.Toolbar.button.border.color</li>
36 <li>kwfgrid.Toolbar.button.insets</li>
37 </ul>
38 */
39 public class WorkflowDocumentInspector extends AbstractMember implements VisibleMember {
40 public static final String IDENTIFIER = "net.kwfgrid.gwui.WorkflowDocumentInspector";
41
42 private static final String TASK_THEME_PREFIX = "kwfgrid.WorkflowDocumentInspector.task";
43 private static final String BUTTON_THEME_PREFIX = "kwfgrid.Toolbar.button";
44 private static final String PANEL_THEME_PREFIX = "kwfgrid.Toolbar";
45 private static final String ICON_KEY = "kwfgrid.WorkflowDocumentInspector.button.icon";
46 private static final Icon ICON = Theme.getIcon(ICON_KEY);
47 private static final String LAYOUT_GAP_KEY = "kwfgrid.Toolbar.layout-gap.size";
48 private static final Dimension LAYOUT_GAP = Theme.getSize(LAYOUT_GAP_KEY);
49
50 private static Logger logger = Logger.getLogger(WorkflowDocumentInspector.class);
51
52 private class OpenAction extends AbstractAction {
53 public OpenAction(Icon icon) {
54 super(null, icon);
55 }
56
57 public void actionPerformed(ActionEvent e) {
58 getFrame().setWorkflow(getWorkflow());
59 }
60 }
61
62 private Executor _executor;
63 private JPanel _view;
64 private JButton _button;
65 private WorkflowInspectorFrame _frame;
66 private ProtocolWorkflow _workflow;
67
68 public WorkflowDocumentInspector(Executor executor) {
69 _executor = executor;
70 _view = null;
71 _frame = null;
72 _workflow = null;
73 }
74
75 protected ProtocolWorkflow getWorkflow() {
76 return _workflow;
77 }
78
79 protected WorkflowInspectorFrame getFrame() {
80 if (_frame==null) {
81 _frame = new WorkflowInspectorFrame(_workflow, _executor);
82 }
83 return _frame;
84 }
85
86 protected void updateState() {
87 if (getGroup()!=null && _view!=null) {
88 Object modalmember = getGroup().getProperty(VisibleGroup.MODAL_MEMBER_KEY);
89 Object status = getGroup().getProperty(WorkflowGroup.WORKFLOW_STATUS_KEY);
90 Object appstatus = getGroup().getProperty(Group.APPLICATION_STATUS_KEY);
91
92 if (status==null) status = WorkflowGroup.STATUS_UNDEFINED;
93
94 if (Group.EXITING.equals(appstatus) || status.equals(WorkflowGroup.STATUS_UNDEFINED)) {
95 _view.setVisible(false);
96 getFrame().dispose();
97 } else {
98 _view.setVisible(true);
99 if (modalmember!=null || status.equals(WorkflowGroup.STATUS_UNDEFINED)) {
100 _button.setEnabled(false);
101 _button.setToolTipText(null);
102 getFrame().setEnabled(false);
103 } else {
104 getFrame().setEnabled(true);
105 _button.setEnabled(true);
106 _button.setToolTipText("Open Workflow Document Inspector");
107 }
108 }
109 }
110 }
111
112 public JComponent getView() {
113 if (_view==null) {
114 _button = SwingFactory.createButton(BUTTON_THEME_PREFIX);
115 _button.setAction(new OpenAction(ICON));
116 _view = SwingFactory.createPanel(PANEL_THEME_PREFIX);
117 _view.setLayout(new FlowLayout(FlowLayout.LEFT, LAYOUT_GAP.width, LAYOUT_GAP.height));
118 _view.add(_button);
119 _view.setSize(_view.getLayout().preferredLayoutSize(_view));
120 _view.validate();
121 updateState();
122 }
123 return _view;
124 }
125
126
127 public String getIdentifier() {
128 return IDENTIFIER;
129 }
130
131 public void groupPropertyChanged(String name, Object oldvalue, Object newvalue) {
132 logger.debug("groupPropertyChanged("+name+", "+oldvalue+", "+newvalue+")");
133
134 if (name.equals(Group.APPLICATION_STATUS_KEY)) {
135 updateState();
136 } else if (name.equals(VisibleGroup.MODAL_MEMBER_KEY)) {
137 updateState();
138 } else if (name.equals(WorkflowGroup.WORKFLOW_STATUS_KEY)) {
139 Object status = getGroup().getProperty(WorkflowGroup.WORKFLOW_STATUS_KEY);
140
141
142
143
144
145
146
147
148
149
150 updateState();
151 } else if (name.equals(WorkflowGroup.ACTIVE_WORKFLOW_DOCUMENT_KEY)) {
152 getFrame().setWorkflow(null);
153 _workflow = (ProtocolWorkflow)newvalue;
154 updateState();
155 }
156
157 logger.debug("groupPropertyChanged.exit");
158 }
159
160 /***
161 Set the group of this member.
162 */
163 public void setGroup(Group g) {
164 super.setGroup(g);
165
166 getFrame().setWorkflow(null);
167
168 if (g!=null) {
169 _workflow = (ProtocolWorkflow)g.getProperty(WorkflowGroup.ACTIVE_WORKFLOW_DOCUMENT_KEY);
170 }
171 }
172 }