1
2
3
4
5
6 package net.kwfgrid.gwui.gui;
7
8 import net.kwfgrid.gwui.workflow.XMLUtilities;
9 import net.kwfgrid.gworkflowdl.protocol.structure.*;
10 import net.kwfgrid.gworkflowdl.structure.*;
11
12 import org.glassbox.executor.Executor;
13
14 import java.awt.BorderLayout;
15 import java.util.List;
16 import javax.swing.*;
17
18 /***
19 Generic editor for the operation of a transition.
20 This editor uses different delegates for different implementations of <code>ClassOperation</code>.
21 */
22 public class OperationEditor extends AbstractWorkflowElementEditor {
23 private JPanel _view;
24 private OperationEditorDelegateFactory _delegatefactory;
25 private AbstractWorkflowElementEditor _delegate;
26
27 public OperationEditor(OperationEditorDelegateFactory delegatefactory,
28 Executor executor,
29 ProtocolWorkflow workflow,
30 ProtocolTransition owner) {
31 super(executor, workflow, owner);
32 _delegatefactory = delegatefactory;
33 _view = null;
34 _delegate = _delegatefactory.createOperationEditorDelegate(executor, workflow, owner);
35 }
36
37 public void objectsAdded(IStructureObject parent, String namespace, String name, List objects) {
38 if (operationChanged(parent, namespace, name, objects)) updateDelegate();
39 }
40
41 public void objectsRemoved(IStructureObject parent, String namespace, String name, List objects) {
42 if (operationChanged(parent, namespace, name, objects)) updateDelegate();
43 }
44
45 public void propertyChanged(IStructureObject parent, String namespace, String name, Object newvalue) {
46 }
47
48 private boolean operationChanged(IStructureObject parent, String namespace, String name, List objects) {
49 Operation operation = ((Transition)getElement()).getOperation();
50 if (parent == operation) return true;
51
52 if ((parent == getElement() &&
53 ProtocolOperation.NAME.equals(name) &&
54 XMLUtilities.equalNamespace(ProtocolOperation.NAMESPACE, namespace))) return true;
55
56 return false;
57 }
58
59 private void updateDelegate() {
60 _delegate = _delegatefactory.createOperationEditorDelegate(getExecutor(), getWorkflow(), (ProtocolTransition)getElement());
61 _view.getParent().invalidate();
62 _view.removeAll();
63 _view.add(_delegate.getView(), BorderLayout.CENTER);
64 _view.getParent().setSize(_view.getParent().getLayout().preferredLayoutSize(_view.getParent()));
65 _view.getParent().doLayout();
66 _view.getParent().validate();
67 }
68
69 protected void updateState() {
70 }
71
72 protected void updateView() {
73 }
74
75 public void dispose() {
76 super.dispose();
77 _delegate.dispose();
78 }
79
80 public void setEnabled(boolean b) {
81 super.setEnabled(b);
82 _delegate.setEnabled(b);
83 }
84
85 public void setPerformingTask(boolean b) {
86 super.setPerformingTask(b);
87 _delegate.setPerformingTask(b);
88 }
89
90 public void setEditable(boolean b) {
91 super.setEditable(b);
92 _delegate.setEditable(b);
93 }
94
95 public void notifyTaskFinished() {
96 super.notifyTaskFinished();
97 _delegate.notifyTaskFinished();
98 }
99
100 public void notifyTaskFailed() {
101 super.notifyTaskFailed();
102 _delegate.notifyTaskFailed();
103 }
104
105 public JComponent getView() {
106 if (_view == null) {
107 _view = new JPanel();
108 _view.setLayout(new BorderLayout());
109 _view.add(_delegate.getView(), BorderLayout.CENTER);
110 }
111 return _view;
112 }
113 }