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.taskframework;
7   
8   import java.awt.*;
9   import net.kwfgrid.gwui.gui.*;
10  import net.kwfgrid.gwui.*;
11  import net.kwfgrid.gworkflowdl.structure.*;
12  import net.kwfgrid.gworkflowdl.protocol.structure.*;
13  import javax.swing.*;
14  import javax.swing.JPopupMenu.*;
15  import net.kwfgrid.gwui.taskframework.InputTask4WCTRefinementFailed.*;
16  
17  public class SimpleDataInputForm extends PlaceTokenEditor implements Form {
18      protected Place _inputplace;
19      protected Place _outputplace;
20      protected Token _inputtoken;
21      protected JFrame _frame;
22      protected String _title;
23  
24      private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(SimpleDataInputForm.class);
25  
26      public SimpleDataInputForm(org.glassbox.executor.Executor executor,
27  			       ProtocolWorkflow workflow, 
28  			       String title,
29  			       ProtocolPlace inputplace,
30  			       ProtocolToken inputtoken,
31  			       ProtocolPlace outputplace) {
32  	super(executor, workflow, outputplace);	
33  	_inputplace = inputplace;
34  	_inputtoken = inputtoken;
35  	_outputplace = outputplace;
36  	_title = title;
37  	_view = null;
38  	_frame = null;
39      }
40  
41      protected void performAddToken() {
42  	setPerformingTask(true);
43  	final String xml = _tokenarea.getText();
44  	getExecutor().execute(new GUIMethodCallTask("Inserting data into workflow...", getExecutor(), this) {
45  		protected void execute() throws CapacityException, WorkflowFormatException {
46              Data d = Factory.newData();
47              d.fromXML(xml);
48              Token t = Factory.newToken(d);
49  		    _inputplace.removeToken(_inputtoken);
50  		    _outputplace.addToken(t);
51  		}
52  	    });
53      }
54      
55      public JComponent getView() {
56  	if (_view == null) {
57  	    _chooser = SwingFactory2.getFileChooser(GWUI.TOKEN_FILE_CHOOSER);
58  
59  	    JMenuItem upload = new JMenuItem("new Token from File ...");
60  	    upload.addActionListener(ACTION_LISTENER);
61  	    upload.setActionCommand(UPLOAD_COMMAND);
62  	    _mitem_controltoken_true = new JMenuItem("new control Token 'true'");
63  	    _mitem_controltoken_true.addActionListener(ACTION_LISTENER);
64  	    _mitem_controltoken_true.setActionCommand(CONTROL_TOKEN_TRUE_COMMAND);
65  	    _mitem_controltoken_false = new JMenuItem("new control Token 'false'");
66  	    _mitem_controltoken_false.addActionListener(ACTION_LISTENER);
67  	    _mitem_controltoken_false.setActionCommand(CONTROL_TOKEN_FALSE_COMMAND);
68  	    _mitem_save = new JMenuItem("save current ...");
69  	    _mitem_save.addActionListener(ACTION_LISTENER);
70  	    _mitem_save.setActionCommand(SAVE_COMMAND);
71  	    _popup = new JPopupMenu("Content of Token");
72  	    _popup.add(upload);
73  	    _popup.add(_mitem_controltoken_true);
74  	    _popup.add(_mitem_controltoken_false);
75  	    _popup.add(new Separator());
76  	    _popup.pack();
77  
78  	    _button_add_clone = new JButton("ok");
79  	    _button_add_clone.addActionListener(ACTION_LISTENER);
80  	    _button_remove = new JButton("remove");
81  	    _button_remove.addActionListener(ACTION_LISTENER);
82  	    _button_remove.setActionCommand(REMOVE_COMMAND);
83  	    _tokenbox = new JComboBox(new PlaceTokenEditor.TokenBoxModel(((Place)getElement()).getTokens()));
84  	    _tokenbox.addItemListener(ITEM_LISTENER);
85  	    _tokenarea = new JTextArea(10, 40);
86  	    if (_tokenbox.getSelectedItem() instanceof Token) {
87              Token token = (Token)_tokenbox.getSelectedItem();
88              if (token.getData() != null) {
89                  //data token
90                  _tokenarea.setText(token.getData().toXML());
91              } else {
92                  // control token
93                  Boolean control = token.getControl();
94                  _tokenarea.setText(control.booleanValue() ? "<control>true</control>" : "<control>false</control>");
95              }
96  	    }
97  	    _tokenarea.addMouseListener(MOUSE_LISTENER);
98  	    _tokenarea.getDocument().addDocumentListener(INPUT_LISTENER);
99  	    _label_token_num = new JLabel("0 Tokens");
100 
101 	    GridBagLayout gridbag = new GridBagLayout();
102 	    GridBagConstraints c = new GridBagConstraints();
103 
104 	    _view = new JPanel();
105 	    _view.setLayout(gridbag);
106 
107 	    c.fill = GridBagConstraints.BOTH;
108 	    c.insets = new Insets(5, 5, 0, 5);
109 	    c.weightx = 0.0;
110 	    c.weighty = 0.0;
111 	    c.gridx = 0;
112 	    c.gridy = 0;
113 	    c.gridwidth = GridBagConstraints.REMAINDER;
114 
115 	    _view.add(new JLabel(_title), c);
116 
117 	    c.weightx = 1.0;
118 	    c.gridx = 0;
119 	    c.gridy = 1;
120 	    c.fill = GridBagConstraints.BOTH;
121 	    c.anchor = GridBagConstraints.CENTER;	    
122 	    c.weighty = 1.0;
123 	    c.gridwidth = GridBagConstraints.REMAINDER;
124 
125 	    _view.add(new JScrollPane(_tokenarea), c);
126 
127 	    c.weightx = 0.0;
128 	    c.weighty = 0.0;
129 	    c.insets = new Insets(5, 5, 5, 5);
130 	    c.anchor = GridBagConstraints.WEST;
131 	    c.gridwidth = 1;
132 	    c.fill = GridBagConstraints.NONE;
133 	    c.gridy = 4;
134 	    c.gridx = 0;
135 
136 	    c.anchor = GridBagConstraints.EAST;
137 	    c.gridwidth = GridBagConstraints.REMAINDER;
138 	    c.gridx = 2;
139 
140 	    _view.add(_button_add_clone, c);
141 
142 	    updateView();	    
143 	}
144 	return _view;
145     }
146 
147     public void dispose() {
148 	if (_frame!=null) {
149 	    _frame.hide();
150 	    _frame = null;
151 	    _view = null;
152 	}
153 	super.dispose();
154     }
155 
156     public void show() {
157 	if (_frame == null) {
158 	    _frame = new JFrame("Data input");
159 	    _frame.getContentPane().add(getView(), BorderLayout.CENTER);
160 	    _frame.getContentPane().setSize(_frame.getContentPane().getLayout().preferredLayoutSize(_frame.getContentPane()));
161 	    _frame.getContentPane().validate();
162 	    setEnabled(true);
163 	    setEditable(true);
164 	    _frame.pack();
165 	}
166 	if (!_frame.isVisible()) {
167 	    _frame.show();
168 	} else {
169 	    _frame.toFront();
170 	}
171     }
172 }
173