/[xulu]/branches/1.8-gt2-2.6/src/appl/parallel/gui/ParallelControlPanelEngine.java
ViewVC logotype

Contents of /branches/1.8-gt2-2.6/src/appl/parallel/gui/ParallelControlPanelEngine.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 33 - (show annotations)
Fri Jun 19 14:20:37 2009 UTC (15 years, 6 months ago) by alfonx
Original Path: trunk/src/appl/parallel/gui/ParallelControlPanelEngine.java
File size: 9648 byte(s)
* Renamed classes:
LayerPanel to MapLegend (works on StyledObj)
AtlasLayerPanel to AtlasMapLegend (works on DpLayer)
LayerPanelGroup to MapLayerLegend (works on StyledObj)
AtlasLayerPanelGroup to AtlasMapLayerLegend (works on DpLayer)

Updated all JARs and committed them.

TODO: Some "ISDSS person" might want to rename:
de.isdss.util.framework.ui.panel.LayerPanelScrollPane to something like MapLegendScrollPane.java or FWMapLegendScrollPane.java

* Also committing some substitutions of "@returns" with "@return" 
* Removed testsomethong.java from xulu
1 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 * @return 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