/[xulu]/trunk/src/appl/parallel/gui/ParallelControlPanelEngine.java
ViewVC logotype

Annotation of /trunk/src/appl/parallel/gui/ParallelControlPanelEngine.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (hide annotations)
Wed Feb 25 11:54:01 2009 UTC (15 years, 9 months ago) by mojays
File size: 9649 byte(s)
First Commit, corresponds to Revision 1008 of Wikisquare-SVN 
1 mojays 2 package appl.parallel.gui;
2    
3     import java.awt.event.ActionEvent;
4     import java.awt.event.ActionListener;
5     import java.util.Iterator;
6     import java.util.Vector;
7    
8     import javax.swing.JOptionPane;
9     import javax.swing.JTable;
10     import javax.swing.event.ListSelectionEvent;
11     import javax.swing.event.ListSelectionListener;
12     import javax.swing.event.TableModelEvent;
13     import javax.swing.event.TableModelListener;
14     import javax.swing.table.DefaultTableModel;
15     import javax.swing.table.TableModel;
16    
17     import org.apache.log4j.LogManager;
18     import org.apache.log4j.Logger;
19    
20     import appl.ext.XuluConfig;
21     import appl.parallel.ComputingResource;
22     import appl.parallel.ComputingResourceContainer;
23     import appl.parallel.ComputingResourceProperties;
24     import appl.parallel.client.RemoteExecutionController;
25     import appl.parallel.client.ResourceChangeListener;
26     import appl.util.NonEditableTableModel;
27     import schmitzm.data.event.ObjectEvent;
28     import schmitzm.data.event.ObjectListener;
29    
30     import edu.bonn.xulu.XuluModellingPlatform;
31     import edu.bonn.xulu.appl.ModelControlManager;
32     import edu.bonn.xulu.appl.XuluPlugin;
33     import edu.bonn.xulu.data.XuluDataException;
34     import edu.bonn.xulu.gui.ModelContentManagerContainer;
35     import edu.bonn.xulu.gui.ModelControlFrame;
36     import edu.bonn.xulu.gui.XuluGUIMessages;
37     import edu.bonn.xulu.model.ModelContentManager;
38     import edu.bonn.xulu.model.XuluModel;
39     import edu.bonn.xulu.plugin.gui.ModelControlContainer;
40     import edu.bonn.xulu.plugin.gui.ModelControlFrame_Basic;
41    
42     /**
43     * This class controls the {@link ParallelControlPanel}.
44     *
45     * @author Dominik Appl
46     */
47     public class ParallelControlPanelEngine implements ActionListener,
48     ListSelectionListener, TableModelListener, ResourceChangeListener {
49    
50     ParallelControlPanel panel;
51    
52     XuluModellingPlatform xulu;
53    
54     // get logger for this class
55     protected final Logger LOG = LogManager
56     .getLogger(this.getClass().getName());
57    
58     private DefaultTableModel resTableModel;
59    
60     private JTable resTable;
61    
62     private Vector<ComputingResourceContainer> resources;
63    
64     private RemoteExecutionController remoteExecutionController;
65    
66     /**
67     * @param xulu
68     * the active modeling platform
69     */
70     public ParallelControlPanelEngine(XuluModellingPlatform xulu) {
71     this.xulu = xulu;
72     this.panel = new ParallelControlPanel();
73     init();
74     }
75    
76     /**
77     * @param xulu
78     * the active modeling platform
79     * @param panel
80     * the panel to integrate
81     */
82     public ParallelControlPanelEngine(XuluModellingPlatform xulu,
83     ParallelControlPanel panel) {
84     this.xulu = xulu;
85     this.panel = panel;
86     init();
87     }
88    
89     /**
90     * The init method must be called after all Components of the GUI are
91     * initialized.
92     */
93     void init() {
94     remoteExecutionController = RemoteExecutionController
95     .getRemoteExecutionController(xulu);
96     if (remoteExecutionController != null)
97     remoteExecutionController.addResourceChangeListener(this);
98     resTable = panel.computingResourcesList;
99    
100     // add listeners
101     resTable.getSelectionModel().addListSelectionListener(this);
102     panel.refreshButton.addActionListener(this);
103     panel.selectAllButton.addActionListener(this);
104    
105     resTableModel = new NonEditableTableModel(new Object[] { "Name",
106     "Rating" }, new boolean[] { false, true }, 1);
107     resTable.setModel(resTableModel);
108     resTable.getModel().addTableModelListener(this);
109     selectAvailableResources();
110     }
111    
112     /*
113     * (non-Javadoc)
114     *
115     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
116     */
117     public void actionPerformed(ActionEvent e) {
118     // the source of the event.
119     Object src = e.getSource();
120     if (src == panel.refreshButton) {
121     handleRefresh();
122     } else if (src == panel.selectAllButton) {
123     selectAvailableResources();
124     }
125    
126     }
127    
128     /**
129     * handles the refresh button
130     */
131     private void handleRefresh() {
132     if (remoteExecutionController != null)
133     remoteExecutionController.refreshResources();
134     else
135     JOptionPane
136     .showMessageDialog(
137     getPanel(),
138     "Error: no discovery possible. The RemoteExecutionController-Plugin can " +
139     "not be found. The plugin is required for parallel " +
140     "computation","Error",JOptionPane.ERROR_MESSAGE);
141     }
142    
143     private Vector<String> getVectorOfSelectedNames() {
144    
145     Object[] selectedComputingResources = getSelectedResourceContainers();
146    
147     // write selected names in vector
148     Vector<String> names = new Vector<String>();
149     for (int i = 0; i < selectedComputingResources.length; i++) {
150     names
151     .add(((ComputingResourceContainer) selectedComputingResources[i])
152     .getInformation().getName());
153     }
154     return names;
155     }
156    
157     private void setSelectedElements(Vector<String> names) {
158     for (int i = 0; i < resTableModel.getRowCount(); i++) {
159     ComputingResourceContainer container = (ComputingResourceContainer) resTableModel
160     .getValueAt(i, 0);
161     if (container == null)
162     return;
163     String name = ((ComputingResourceContainer) resTableModel
164     .getValueAt(i, 0)).getInformation().getName();
165     if (names.contains(name))
166     resTable.getSelectionModel().addSelectionInterval(i, i);
167     }
168     }
169    
170     private void selectAvailableResources() {
171     // write available selected names in vector
172     Vector<String> names = new Vector<String>();
173     for (int i = 0; i < resTableModel.getRowCount(); i++) {
174     ComputingResourceContainer container = ((ComputingResourceContainer) resTableModel
175     .getValueAt(i, 0));
176     if (container == null)
177     return;
178     ComputingResourceProperties info = container.getInformation();
179     if (info.isAvailable())
180     names.add(info.getName());
181    
182     }
183     setSelectedElements(names);
184     }
185    
186     /**
187     * @returns the first current selected ComputingResourceContainer from the
188     * resouce list
189     */
190     private ComputingResourceContainer getSelectedResourceContainer() {
191     int selectedRow = resTable.getSelectedRow();
192     if (selectedRow == -1)
193     return null;
194     return (ComputingResourceContainer) resTableModel.getValueAt(
195     selectedRow, 0);
196     }
197    
198     /**
199     * @return all current selected ComputingResourceContainer from the resouce
200     * list
201     */
202     ComputingResourceContainer[] getSelectedResourceContainers() {
203     int[] selRows = panel.computingResourcesList.getSelectedRows();
204     Object[] selectedValues = new Object[selRows.length];
205     for (int i = 0; i < selRows.length; i++) {
206     selectedValues[i] = resTableModel.getValueAt(selRows[i], 0);
207     if (selectedValues[i] == null)
208     return new ComputingResourceContainer[0];
209     }
210     ComputingResourceContainer[] selectedContainers = new ComputingResourceContainer[selectedValues.length];
211     for (int i = 0; i < selectedValues.length; i++)
212     selectedContainers[i] = (ComputingResourceContainer) selectedValues[i];
213     return selectedContainers;
214     }
215    
216     /*
217     * (non-Javadoc)
218     *
219     * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
220     */
221     public void valueChanged(ListSelectionEvent e) {
222     Object src = e.getSource();
223     if (src == resTable.getSelectionModel()) {
224     ComputingResourceContainer selValue = getSelectedResourceContainer();
225     if (selValue == null)
226     return;
227     panel.propertyTable.setPropertyData(selValue.getInformation()
228     .getProperties());
229     }
230     }
231    
232     /**
233     * Listens for user changes of the rating
234     *
235     * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
236     */
237     public void tableChanged(TableModelEvent e) {
238     // enter the new rating information to the configuration
239     XuluConfig config = XuluConfig.getXuluConfig();
240     if (e.getType() == TableModelEvent.UPDATE) {
241     int changedRow = e.getFirstRow();
242     // only the 2nd col is editable
243     String newRating = resTableModel.getValueAt(changedRow, 1)
244     .toString();
245     try {
246     int rating = Integer.valueOf(newRating);
247     if (rating < 0) {
248     resTableModel.setValueAt(0, changedRow, 1);
249     throw new UnsupportedOperationException(
250     "Rating must be > 0");
251     }
252    
253     } catch (Exception f) {
254     resTableModel.setValueAt(0, changedRow, 1);
255     throw new UnsupportedOperationException(
256     "Rating must be an integer!");
257     }
258     String computerName = resTableModel.getValueAt(changedRow, 0)
259     .toString();
260     String prefix = "PerformanceRating";
261     String key = prefix + "." + computerName;
262     config.setProperty(key, newRating);
263     }
264     }
265    
266     /**
267     * @return the panel
268     */
269     public ParallelControlPanel getPanel() {
270     return this.panel;
271     }
272    
273     /*
274     * (non-Javadoc)
275     *
276     * @see appl.parallel.client.ResourceChangeListener#updateResources(java.util.Vector)
277     */
278     public void updateResources(
279     Vector<ComputingResourceContainer> currentResources) {
280     // get the selected values (and restore the selection after list
281     // initializing)
282     Vector names = getVectorOfSelectedNames();
283    
284     // clear list
285     resTableModel.setRowCount(0);
286     for (ComputingResourceContainer res : currentResources) {
287     // init the rating from the configuration
288     XuluConfig config = XuluConfig.getXuluConfig();
289     String computerName = res.getInformation().getName();
290     String prefix = "PerformanceRating";
291     String key = prefix + "." + computerName;
292     String rating = config.getProperty(key, false);
293     // if no rating found use the selfrating of the machine
294     if (rating == null || rating.equals("0"))
295     rating = res.getInformation().getProperty("Rating");
296     if (rating == null)
297     rating = "0"; // '0' means average
298     resTableModel.addRow(new Object[] { res, rating });
299     }
300    
301     // restore selection
302     this.setSelectedElements(names);
303     }
304     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26