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.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 }