View Javadoc

1   /*
2    * @(#)$Id: BatchView.java 750 2009-08-18 18:30:55Z kurmannu $
3    *
4    * Author		:	Ueli Kurmann, igesture@uelikurmann.ch
5    *                  
6    *
7    * Purpose		: 
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date				Who			Reason
14   *
15   * 17.04.2008			ukurmann	Initial Release
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
23   * 
24   */
25  
26  package org.ximtec.igesture.tool.view.batch;
27  
28  import java.awt.Dimension;
29  import java.awt.event.ActionEvent;
30  import java.awt.event.ActionListener;
31  
32  import javax.swing.Action;
33  import javax.swing.Icon;
34  import javax.swing.JButton;
35  import javax.swing.JComboBox;
36  import javax.swing.JComponent;
37  import javax.swing.JLabel;
38  import javax.swing.JPanel;
39  import javax.swing.JProgressBar;
40  import javax.swing.JTextField;
41  
42  import org.ximtec.igesture.core.GestureSet;
43  import org.ximtec.igesture.core.TestSet;
44  import org.ximtec.igesture.tool.GestureConstants;
45  import org.ximtec.igesture.tool.core.Controller;
46  import org.ximtec.igesture.tool.core.TabbedView;
47  import org.ximtec.igesture.tool.util.Formatter;
48  import org.ximtec.igesture.tool.util.HtmlPanel;
49  import org.ximtec.igesture.tool.util.TitleFactory;
50  import org.ximtec.igesture.tool.view.AbstractPanel;
51  import org.ximtec.igesture.tool.view.MainModel;
52  import org.ximtec.igesture.tool.view.batch.action.CancelBatchAction;
53  import org.ximtec.igesture.tool.view.batch.action.RunBatchAction;
54  import org.ximtec.igesture.tool.view.batch.action.SelectConfigFileAction;
55  import org.ximtec.igesture.tool.view.batch.action.SelectOutputDirAction;
56  
57  import com.jgoodies.forms.builder.DefaultFormBuilder;
58  import com.jgoodies.forms.layout.FormLayout;
59  
60  /**
61   * Comment
62   * 
63   * @version 1.0 17.04.2008
64   * @author Ueli Kurmann
65   */
66  public class BatchView extends AbstractPanel implements TabbedView, IBatchView {
67  
68    private static final int NEXT_LINE = 2;
69    private GestureSet gestureSet;
70    private TestSet testSet;
71  
72    private JTextField configFileTextField;
73    private JTextField outDirTextField;
74    private JProgressBar progressBar;
75    private HtmlPanel resultPanel;
76  
77    private Action runBatchAction;
78    private Action cancelBatchAction;
79  
80    public BatchView(Controller controller) {
81      super(controller);
82      setTitle(TitleFactory.createStaticTitle(GestureConstants.BATCH_PROCESSING_VIEW));
83      init();
84    }
85  
86    private void init() {
87      setContent(createParameterPanel());
88    }
89  
90    @Override
91    public Icon getIcon() {
92      return null;
93    }
94  
95    @Override
96    public String getTabName() {
97      return getComponentFactory().getGuiBundle().getName(GestureConstants.BATCH_PROCESSING_VIEW);
98    }
99  
100   @Override
101   public JComponent getPane() {
102     return this;
103   }
104 
105   private JPanel createParameterPanel() {
106 
107     FormLayout layout = new FormLayout(
108         "80dlu, 4dlu, 140dlu, 4dlu, 80dlu",
109         "pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref, 4dlu, pref");
110 
111     DefaultFormBuilder builder = new DefaultFormBuilder(layout);
112     builder.setDefaultDialogBorder();
113 
114     // select configuration
115     createConfigurationSelection(builder);
116 
117     // select gesture set
118     createGestureSetSelection(builder);
119 
120     // select test set
121     createTestSetSelection(builder);
122 
123     // select output dir
124     createOutputDirSelection(builder);
125 
126     createRunButton(builder);
127 
128     // create result panel
129     createResultPanel(builder);
130 
131     return builder.getPanel();
132   }
133 
134   private void createGestureSetSelection(DefaultFormBuilder builder) {
135     // select gesture set
136     builder.append(getComponentFactory().createLabel(GestureConstants.BATCH_GESTURESET));
137 
138     final JComboBox combo = new JComboBox(createArray(getModel().getGestureSets().toArray(), "Select Gesture Set"));
139 
140     combo.addActionListener(new ActionListener() {
141 
142       @Override
143       public void actionPerformed(ActionEvent arg0) {
144         Object obj = combo.getSelectedItem();
145         if (obj instanceof GestureSet) {
146           gestureSet = (GestureSet) obj;
147         }
148       }
149     });
150     builder.append(combo);
151     builder.nextLine(NEXT_LINE);
152   }
153 
154   private void createConfigurationSelection(DefaultFormBuilder builder) {
155     // configuration xml file
156     JLabel label = getComponentFactory().createLabel(GestureConstants.BATCH_CONFIG);
157     builder.append(label);
158 
159     configFileTextField = new JTextField();
160     builder.append(configFileTextField);
161 
162     JButton browseButton = getComponentFactory().createButton(GestureConstants.BATCH_BROWSE_CONFIG,
163         new SelectConfigFileAction(getController(), this));
164 
165     Formatter.formatButton(browseButton);
166     builder.append(browseButton);
167 
168     builder.nextLine(NEXT_LINE);
169   }
170 
171   private void createTestSetSelection(DefaultFormBuilder builder) {
172     builder.append(getComponentFactory().createLabel(GestureConstants.BATCH_TESTSET));
173 
174     final JComboBox combo = new JComboBox(createArray(getModel().getTestSets().toArray(), "Select Test Set"));
175 
176     combo.addActionListener(new ActionListener() {
177 
178       @Override
179       public void actionPerformed(ActionEvent arg0) {
180         Object obj = combo.getSelectedItem();
181         if (obj instanceof TestSet) {
182           testSet = (TestSet) obj;
183         }
184       }
185     });
186 
187     builder.append(combo);
188     builder.nextLine(NEXT_LINE);
189   }
190 
191   private void createOutputDirSelection(DefaultFormBuilder builder) {
192     builder.append(getComponentFactory().createLabel(GestureConstants.BATCH_OUTPUT_DIR));
193 
194     outDirTextField = new JTextField();
195 
196     builder.append(outDirTextField);
197     JButton browseButton = getComponentFactory().createButton(GestureConstants.BATCH_BROWSE_OUTPUT,
198         new SelectOutputDirAction(getController(), this));
199     Formatter.formatButton(browseButton);
200     builder.append(browseButton);
201     builder.nextLine(NEXT_LINE);
202   }
203 
204   private void createRunButton(DefaultFormBuilder builder) {
205     runBatchAction = new RunBatchAction(getController());
206     cancelBatchAction = new CancelBatchAction(getController());
207     cancelBatchAction.setEnabled(false);
208 
209     JButton runButton = getComponentFactory().createButton(GestureConstants.BATCH_RUN, runBatchAction);
210 
211     JButton cancelButton = getComponentFactory().createButton(GestureConstants.BATCH_CANCEL, cancelBatchAction);
212 
213     Formatter.formatButton(runButton);
214 
215     builder.append(runButton);
216     builder.append(cancelButton);
217     builder.nextLine(NEXT_LINE);
218 
219     progressBar = new JProgressBar();
220     progressBar.setIndeterminate(true);
221     progressBar.setVisible(false);
222 
223     builder.append(progressBar);
224     builder.nextLine(NEXT_LINE);
225   }
226 
227   private void createResultPanel(DefaultFormBuilder builder) {
228     resultPanel = new HtmlPanel(null, new Dimension(500, 400));
229     builder.append(resultPanel, 5);
230   }
231 
232   public void showProgressBar() {
233     progressBar.setVisible(true);
234   }
235 
236   public void setResult(String htmlCode) {
237     resultPanel.setHtmlContent(htmlCode);
238   }
239 
240   public void hideProgressBar() {
241     progressBar.setVisible(false);
242   }
243 
244   public void setRunActionState(boolean isEnabled) {
245     if (runBatchAction != null) {
246       runBatchAction.setEnabled(isEnabled);
247     }
248   }
249 
250   public void setCancelActionState(boolean isEnabled) {
251     if (cancelBatchAction != null) {
252       cancelBatchAction.setEnabled(isEnabled);
253     }
254   }
255 
256   /**
257    * Returns the main model
258    * 
259    * @return
260    */
261   private MainModel getModel() {
262     return getController().getLocator().getService(MainModel.IDENTIFIER, MainModel.class);
263   }
264 
265   private Object[] createArray(Object[] originalArray, String title) {
266     Object[] result = new Object[originalArray.length + 1];
267 
268     for (int i = 1; i < result.length; i++) {
269       result[i] = originalArray[i - 1];
270     }
271     result[0] = title;
272 
273     return result;
274   }
275 
276   @Override
277   public void refreshUILogic() {
278     super.refreshUILogic();
279     // TODO: optimize refresh mechanism
280     init();
281   }
282 
283   public TestSet getTestSet() {
284     return testSet;
285   }
286 
287   public GestureSet getGestureSet() {
288     return gestureSet;
289   }
290 
291   public String getConfigFile() {
292     return configFileTextField.getText();
293   }
294 
295   public String getOutputDir() {
296     return outDirTextField.getText();
297   }
298 
299   public void setConfigFile(String configFile) {
300     configFileTextField.setText(configFile);
301   }
302 
303   public void setOutputDir(String outputDir) {
304     outDirTextField.setText(outputDir);
305   }
306 }