EMMA Coverage Report (generated Sun Feb 05 10:43:15 CET 2012)
[all classes][de.uka.ipd.sdq.sensorframework.visualisation.views]

COVERAGE SUMMARY FOR SOURCE FILE [ExperimentsView.java]

nameclass, %method, %block, %line, %
ExperimentsView.java0%   (0/12)0%   (0/43)0%   (0/1157)0%   (0/268)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ExperimentsView0%   (0/1)0%   (0/22)0%   (0/909)0%   (0/214)
<static initializer> 0%   (0/1)0%   (0/4)0%   (0/3)
ExperimentsView (): void 0%   (0/1)0%   (0/9)0%   (0/4)
access$0 (ExperimentsView, Object): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$1 (ExperimentsView, IMenuManager): void 0%   (0/1)0%   (0/4)0%   (0/1)
access$2 (ExperimentsView): TreeViewer 0%   (0/1)0%   (0/3)0%   (0/1)
access$3 (ExperimentsView): IDAOFactory 0%   (0/1)0%   (0/3)0%   (0/1)
access$4 (ExperimentsView): Experiment 0%   (0/1)0%   (0/3)0%   (0/1)
access$5 (ExperimentsView): void 0%   (0/1)0%   (0/3)0%   (0/1)
contributeToActionBars (): void 0%   (0/1)0%   (0/13)0%   (0/4)
createPartControl (Composite): void 0%   (0/1)0%   (0/74)0%   (0/15)
exportAllExperimentRunsToCSV (String, Collection, boolean, String): void 0%   (0/1)0%   (0/52)0%   (0/11)
exportExperimentRunToCSV (String, Collection, ExperimentRun, boolean, String)... 0%   (0/1)0%   (0/47)0%   (0/8)
exportSelectedDataToCSV (): void 0%   (0/1)0%   (0/138)0%   (0/37)
exportSensorMeasurementToCSV (String, Collection, boolean, String): void 0%   (0/1)0%   (0/128)0%   (0/23)
fillContextMenu (IMenuManager): void 0%   (0/1)0%   (0/38)0%   (0/9)
fillLocalPullDown (IMenuManager): void 0%   (0/1)0%   (0/22)0%   (0/6)
fillLocalToolBar (IToolBarManager): void 0%   (0/1)0%   (0/40)0%   (0/10)
hookContextMenu (): void 0%   (0/1)0%   (0/32)0%   (0/7)
makeActions (): void 0%   (0/1)0%   (0/143)0%   (0/36)
sanitizeFileName (String): String 0%   (0/1)0%   (0/47)0%   (0/10)
setFocus (): void 0%   (0/1)0%   (0/6)0%   (0/2)
setSelectedElement (Object): void 0%   (0/1)0%   (0/96)0%   (0/25)
     
class ExperimentsView$10%   (0/1)0%   (0/2)0%   (0/18)0%   (0/6)
ExperimentsView$1 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
selectionChanged (SelectionChangedEvent): void 0%   (0/1)0%   (0/12)0%   (0/4)
     
class ExperimentsView$100%   (0/1)0%   (0/2)0%   (0/10)0%   (0/4)
ExperimentsView$10 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/4)0%   (0/2)
     
class ExperimentsView$20%   (0/1)0%   (0/2)0%   (0/11)0%   (0/4)
ExperimentsView$2 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
menuAboutToShow (IMenuManager): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class ExperimentsView$30%   (0/1)0%   (0/2)0%   (0/28)0%   (0/10)
ExperimentsView$3 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/22)0%   (0/8)
     
class ExperimentsView$40%   (0/1)0%   (0/2)0%   (0/11)0%   (0/4)
ExperimentsView$4 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class ExperimentsView$50%   (0/1)0%   (0/2)0%   (0/11)0%   (0/4)
ExperimentsView$5 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/5)0%   (0/2)
     
class ExperimentsView$60%   (0/1)0%   (0/2)0%   (0/32)0%   (0/9)
ExperimentsView$6 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/26)0%   (0/7)
     
class ExperimentsView$70%   (0/1)0%   (0/2)0%   (0/32)0%   (0/9)
ExperimentsView$7 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/26)0%   (0/7)
     
class ExperimentsView$80%   (0/1)0%   (0/2)0%   (0/41)0%   (0/10)
ExperimentsView$8 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/35)0%   (0/8)
     
class ExperimentsView$90%   (0/1)0%   (0/2)0%   (0/48)0%   (0/12)
ExperimentsView$9 (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/2)
run (): void 0%   (0/1)0%   (0/42)0%   (0/10)
     
class ExperimentsView$NameSorter0%   (0/1)0%   (0/1)0%   (0/6)0%   (0/1)
ExperimentsView$NameSorter (ExperimentsView): void 0%   (0/1)0%   (0/6)0%   (0/1)

1package de.uka.ipd.sdq.sensorframework.visualisation.views;
2 
3import java.io.BufferedWriter;
4import java.io.FileWriter;
5import java.io.File;
6import java.util.Collection;
7import java.util.Iterator;
8import java.util.logging.Level;
9import java.util.logging.Logger;
10 
11import org.eclipse.jface.action.IMenuListener;
12import org.eclipse.jface.action.IMenuManager;
13import org.eclipse.jface.action.IToolBarManager;
14import org.eclipse.jface.action.MenuManager;
15import org.eclipse.jface.action.Separator;
16import org.eclipse.jface.dialogs.MessageDialog;
17import org.eclipse.jface.preference.IPreferenceNode;
18import org.eclipse.jface.preference.IPreferencePage;
19import org.eclipse.jface.preference.PreferenceDialog;
20import org.eclipse.jface.preference.PreferenceManager;
21import org.eclipse.jface.preference.PreferenceNode;
22import org.eclipse.jface.util.LocalSelectionTransfer;
23import org.eclipse.jface.viewers.ISelection;
24import org.eclipse.jface.viewers.ISelectionChangedListener;
25import org.eclipse.jface.viewers.IStructuredSelection;
26import org.eclipse.jface.viewers.SelectionChangedEvent;
27import org.eclipse.jface.viewers.TreeViewer;
28import org.eclipse.jface.viewers.ViewerSorter;
29import org.eclipse.jface.wizard.WizardDialog;
30import org.eclipse.jface.action.Action;
31 
32import org.eclipse.swt.SWT;
33import org.eclipse.swt.dnd.DND;
34import org.eclipse.swt.dnd.Transfer;
35import org.eclipse.swt.widgets.Composite;
36import org.eclipse.swt.widgets.Menu;
37 
38import org.eclipse.ui.PlatformUI;
39import org.eclipse.ui.IActionBars;
40import org.eclipse.ui.IWorkbenchActionConstants;
41import org.eclipse.ui.part.EditorInputTransfer;
42import org.eclipse.ui.part.ViewPart;
43 
44import de.uka.ipd.sdq.sensorframework.SensorFrameworkDataset;
45import de.uka.ipd.sdq.sensorframework.dao.file.FileDAOFactory;
46import de.uka.ipd.sdq.sensorframework.dialogs.dataset.AddNewDatasourceWizard;
47import de.uka.ipd.sdq.sensorframework.dialogs.dataset.ConfigureDatasourceDialog;
48import de.uka.ipd.sdq.sensorframework.dialogs.dataset.OpenDatasourceWizard;
49import de.uka.ipd.sdq.sensorframework.entities.Experiment;
50import de.uka.ipd.sdq.sensorframework.entities.ExperimentRun;
51import de.uka.ipd.sdq.sensorframework.entities.Measurement;
52import de.uka.ipd.sdq.sensorframework.entities.Sensor;
53import de.uka.ipd.sdq.sensorframework.entities.SensorAndMeasurements;
54import de.uka.ipd.sdq.sensorframework.entities.StateMeasurement;
55import de.uka.ipd.sdq.sensorframework.entities.TimeSpanMeasurement;
56import de.uka.ipd.sdq.sensorframework.entities.dao.IDAOFactory;
57import de.uka.ipd.sdq.sensorframework.visualisation.VisualisationPlugin;
58import de.uka.ipd.sdq.sensorframework.visualisation.dialogs.CSVSettingsDialog;
59import de.uka.ipd.sdq.sensorframework.visualisation.dialogs.DialogType;
60 
61/**
62 * The view shows data obtained from the 'SensorFactory' model. The view is connected to the model
63 * using a content provider.
64 * 
65 * @author Roman Andrej
66 */
67public class ExperimentsView extends ViewPart {
68        private TreeViewer viewer;
69 
70        /** Define elements, which can be deleted. */
71        private IDAOFactory selectedFactory = null;
72        private Experiment selectedExperiment = null;
73 
74        /** Define the actions for menu manager. */
75        private Action reloadView;
76        private Action saveAsCSV;
77        private Action collapseAll;
78        private Action expandAll;
79        private Action newDataSet;
80        private Action openDataSet;
81        private Action deleteDataSet;
82        private Action properties;
83 
84        private static Logger logger = Logger
85                        .getLogger("de.uka.ipd.sdq.sensorframework.visualisation.views.ExperimentsView.log");
86 
87        public ExperimentsView() {
88        }
89 
90        class NameSorter extends ViewerSorter {
91        }
92 
93        /*
94         * (non-Javadoc)
95         * 
96         * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets .Composite)
97         */
98        @Override
99        public void createPartControl(Composite parent) {
100                int ops = DND.DROP_COPY | DND.DROP_MOVE;
101 
102                viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
103                viewer.setContentProvider(new TreeContentProvider());
104                viewer.setLabelProvider(new TreeLabelProvider());
105                viewer.setSorter(new NameSorter());
106                viewer.setInput(getViewSite());
107 
108                Transfer[] transfers = new Transfer[] { EditorInputTransfer.getInstance(),
109                                LocalSelectionTransfer.getTransfer() };
110                viewer.addDragSupport(ops, transfers, new TreeDragSourceListener(viewer));
111                viewer.addDoubleClickListener(new DoubleClickListener());
112                viewer.addSelectionChangedListener(new ISelectionChangedListener() {
113                        /*
114                         * (non-Javadoc)
115                         * 
116                         * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged
117                         * (org.eclipse.jface.viewers.SelectionChangedEvent)
118                         */
119                        public void selectionChanged(SelectionChangedEvent event) {
120                                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
121                                Object selectedObject = selection.getFirstElement();
122                                setSelectedElement(selectedObject);
123                        }
124                });
125 
126                makeActions();
127                hookContextMenu();
128                contributeToActionBars();
129        }
130 
131        private void hookContextMenu() {
132                MenuManager menuMgr = new MenuManager("#PopupMenu");
133                menuMgr.setRemoveAllWhenShown(true);
134                menuMgr.addMenuListener(new IMenuListener() {
135                        public void menuAboutToShow(IMenuManager manager) {
136                                ExperimentsView.this.fillContextMenu(manager);
137                        }
138                });
139                Menu menu = menuMgr.createContextMenu(viewer.getControl());
140                viewer.getControl().setMenu(menu);
141                getSite().registerContextMenu(menuMgr, viewer);
142        }
143 
144        /**
145         * Contributes actions to the action bars.
146         */
147        private void contributeToActionBars() {
148                IActionBars bars = getViewSite().getActionBars();
149                fillLocalPullDown(bars.getMenuManager());
150                fillLocalToolBar(bars.getToolBarManager());
151        }
152 
153        /**
154         * Fills the action bar menu with the list of resolvers to be selected
155         * 
156         * @param manager
157         *            - The menu manager to add the actions to.
158         */
159        private void fillLocalPullDown(IMenuManager manager) {
160                manager.add(newDataSet);
161                manager.add(openDataSet);
162                manager.add(deleteDataSet);
163                manager.add(new Separator());
164                manager.add(reloadView);
165        }
166 
167        /**
168         * Fill context for the tree view pop-up menu.
169         * 
170         * @param menu
171         *            - the menu manager.
172         */
173        private void fillContextMenu(IMenuManager manager) {
174                manager.add(deleteDataSet);
175                manager.add(new Separator());
176                manager.add(reloadView);
177                manager.add(new Separator());
178                manager.add(properties);
179                manager.add(new Separator());
180                manager.add(saveAsCSV);
181                // Other plug-ins can contribute there actions here
182                manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
183 
184        }
185 
186        /**
187         * Adds actions to the local toolbar.
188         * 
189         * @param manager
190         *            - the local toolbar manager.
191         */
192        private void fillLocalToolBar(IToolBarManager manager) {
193                manager.add(newDataSet);
194                manager.add(openDataSet);
195                manager.add(deleteDataSet);
196                manager.add(new Separator());
197                manager.add(reloadView);
198                manager.add(new Separator());
199                manager.add(collapseAll);
200                manager.add(expandAll);
201                manager.add(new Separator());
202        }
203 
204        private void makeActions() {
205 
206                /** Reload viewer action */
207                reloadView = new Action() {
208                        @Override
209                        public void run() {
210                                try {
211                                        SensorFrameworkDataset.singleton().reload();
212                                } catch (Exception ex) {
213                                        MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
214                                                        .getShell(), "Reloading the Sensor Dataset Failed",
215                                                        "Reloading the Sensor Dataset Failed. Error Message given: "
216                                                                        + ex.getMessage());
217                                }
218                                viewer.refresh();
219                        }
220                };
221                reloadView.setText("Reload View");
222                reloadView.setToolTipText("Reload View");
223                reloadView.setImageDescriptor(VisualisationPlugin
224                                .getImageDescriptor("/icons/db_reload_obj.gif"));
225 
226                /** Collapse all action */
227                collapseAll = new Action() {
228                        @Override
229                        public void run() {
230                                viewer.collapseAll();
231                        }
232                };
233                collapseAll.setText("Collapse All");
234                collapseAll.setToolTipText("Collapse All");
235                collapseAll.setImageDescriptor(VisualisationPlugin
236                                .getImageDescriptor("/icons/collapseall.gif"));
237 
238                /** Expand all action */
239                expandAll = new Action() {
240                        @Override
241                        public void run() {
242                                viewer.expandAll();
243                        }
244                };
245                expandAll.setText("Expand All");
246                expandAll.setToolTipText("Expand All");
247                expandAll
248                                .setImageDescriptor(VisualisationPlugin.getImageDescriptor("/icons/expandall.gif"));
249 
250                /** New DataSet action. */
251                newDataSet = new Action() {
252                        @Override
253                        public void run() {
254                                AddNewDatasourceWizard wizard = new AddNewDatasourceWizard();
255                                // Instantiates the wizard container with the wizard and opens
256                                // it
257                                WizardDialog dialog = new WizardDialog(getSite().getShell(), wizard);
258                                dialog.create();
259                                dialog.setTitle(ConfigureDatasourceDialog.ADD_WIZARD_TITLE);
260                                dialog.open();
261                                viewer.refresh();
262                        }
263                };
264                newDataSet.setText("New Data Source");
265                newDataSet.setToolTipText("New Data Source");
266                newDataSet.setImageDescriptor(VisualisationPlugin.getImageDescriptor("/icons/add_obj.gif"));
267 
268                /** Open DataSet action */
269                openDataSet = new Action() {
270                        @Override
271                        public void run() {
272 
273                                OpenDatasourceWizard wizard = new OpenDatasourceWizard();
274 
275                                // Instantiates the wizard container with the wizard and opens
276                                // it
277                                WizardDialog dialog = new WizardDialog(getSite().getShell(), wizard);
278                                dialog.create();
279 
280                                dialog.setTitle(ConfigureDatasourceDialog.OPEN_WISARD_TITLE);
281                                dialog.open();
282                                viewer.refresh();
283                        }
284                };
285                openDataSet.setText("Open");
286                openDataSet.setToolTipText("Open a Data Source");
287                openDataSet.setImageDescriptor(VisualisationPlugin
288                                .getImageDescriptor("/icons/data_source_folder.gif"));
289 
290                /** Delete DataSet/Experiment action. */
291                deleteDataSet = new Action() {
292                        @Override
293                        public void run() {
294 
295                                // selected element in 'ExperimentView' DAOFactory
296                                if (selectedFactory != null) {
297                                        SensorFrameworkDataset.singleton().removeDataSource(selectedFactory);
298                                        viewer.refresh();
299                                }
300                                // selected element in 'ExperimentView' is Experiment
301                                if (selectedExperiment != null && selectedFactory != null) {
302                                        selectedFactory.createExperimentDAO()
303                                                        .removeExperiment(selectedExperiment, true);
304                                        viewer.refresh();
305                                }
306                        }
307                };
308                deleteDataSet.setText("Delete");
309                deleteDataSet.setToolTipText("Delete a Data Source/Experiment");
310                deleteDataSet.setImageDescriptor(VisualisationPlugin
311                                .getImageDescriptor("/icons/remove_obj.gif"));
312                deleteDataSet.setEnabled(false);
313 
314                /** Properties action. */
315                properties = new Action() {
316                        @Override
317                        public void run() {
318 
319                                IPreferencePage page = new DAOFactoryPreferencePage(selectedFactory);
320                                page.setTitle("General Information");
321                                PreferenceManager mgr = new PreferenceManager();
322                                IPreferenceNode node = new PreferenceNode("1", page);
323                                mgr.addToRoot(node);
324                                PreferenceDialog dialog = new PreferenceDialog(getSite().getShell(), mgr);
325                                dialog.create();
326                                dialog.setMessage(page.getTitle());
327                                dialog.open();
328 
329                        }
330                };
331                properties.setText("Properties");
332                properties.setEnabled(false);
333 
334                /** Save As CSV action */
335                saveAsCSV = new Action() {
336                        @Override
337                        public void run() {
338                                exportSelectedDataToCSV();
339                        }
340                };
341                saveAsCSV.setText("Save as CSV");
342        }
343 
344        /**
345         * Export the measurement of one sensor to a CSV file.
346         * 
347         * @author David Scherr
348         * @param fileName
349         *            Name of the CSV file.
350         * @param measurement
351         *            The collection of measurements of the selected sensor.
352         * @param isHeader
353         *            If the value is true, then the CSV file will integrate a superscription.
354         * @param separator
355         *            At the moment there are 3 possibilities to separate the CSV data: (1) Semicolon
356         *            (2) Comma (3) Tabulator. One of these is stored in this parameter as the
357         *            corresponding character, but still in String format (maybe in the future someone
358         *            will add a separator with more than one character).
359         */
360        private void exportSensorMeasurementToCSV(String fileName, Collection<Measurement> measurement,
361                        boolean isHeader, String separator) {
362 
363                FileWriter fileWriter;
364                BufferedWriter bufferedWriter;
365                try {
366                        fileWriter = new FileWriter(fileName);
367                        bufferedWriter = new BufferedWriter(fileWriter);
368                        if (measurement.iterator().next() instanceof StateMeasurement) {
369                                // If you have activated the header in the dialog (CSVSettingsDialog), then you get
370                                // a superscription of the measurement types.
371                                if (isHeader) {
372                                        bufferedWriter.append("Event Time" + separator + "State" + "\n");
373                                }
374                                // Get each element of Event Time and Sensor State as a pair which will be save as
375                                // one CSV line into the buffer.
376                                for (Iterator<Measurement> iterator = measurement.iterator(); iterator.hasNext();) {
377                                        // The instance of the Measurement is known as StateMeasurement and through the
378                                        // casting you get the special data of this type of Measurement.
379                                        StateMeasurement data = ((StateMeasurement) iterator.next());
380                                        // Write one pair of data per line with the separator, which you can choose in
381                                        // the dialog (CSVSettingsDialog).
382                                        bufferedWriter.append(data.getEventTime() + separator
383                                                        + data.getSensorState().getStateLiteral() + "\n");
384                                }
385                        } else if (measurement.iterator().next() instanceof TimeSpanMeasurement) {
386                                // If you have activated the header in the dialog (CSVSettingsDialog), then you get
387                                // a superscription of the measurement types.
388                                if (isHeader) {
389                                        bufferedWriter.append("Event Time" + separator + "Time Span" + "\n");
390                                }
391                                // Get each element of Event Time and Time Span as a pair which will be save as one
392                                // CSV line into the buffer.
393                                for (Iterator<Measurement> iterator = measurement.iterator(); iterator.hasNext();) {
394                                        // The instance of the Measurement is known as TimeSpanMeasurement and through
395                                        // the casting you get the special data of this type of Measurement.
396                                        TimeSpanMeasurement data = ((TimeSpanMeasurement) iterator.next());
397                                        // Write one pair of data per line with the separator, which you can choose in
398                                        // the dialog (CSVSettingsDialog).
399                                        bufferedWriter.append(data.getEventTime() + separator + data.getTimeSpan()
400                                                        + "\n");
401                                }
402                        } else {
403                                // The type of measurement is unknown.
404                                logger.log(Level.SEVERE, "It is not possible to export this type of measurement "
405                                                + "to the CSV format. At the moment only instances of StateMeasurement "
406                                                + "and TimeSpanMeasurement are suitable.");
407                                throw new IllegalArgumentException();
408                        }
409                        bufferedWriter.close();
410                        fileWriter.close();
411                } catch (Exception e) {
412                        e.printStackTrace();
413                }
414        }
415 
416        /**
417         * Export an experiment run to a corresponding folder with all subordinated runs as CSV files.
418         * 
419         * @author David Scherr
420         * @param pathDir
421         *            Path in which you find the <code>ExperimentRun</code> directory.
422         * @param sensors
423         *            Sensors of Measurement.
424         * @param run
425         *            <code>ExperimentRun</code> with all measurements.
426         * @param isHeader
427         *            If the value is true, then the CSV file will integrate a superscription.
428         * @param separator
429         *            At the moment there are 3 possibilities to separate the CSV data: (1) Semicolon
430         *            (2) Comma (3) Tabulator. One of these is stored in this parameter as the
431         *            corresponding character, but still in String format (maybe in the future someone
432         *            will add a separator with more than one character).
433         */
434        private void exportExperimentRunToCSV(String pathDir, Collection<Sensor> sensors,
435                        ExperimentRun run, boolean isHeader, String separator) {
436                SensorAndMeasurements sensorAndMeasurements;
437                String fileName;
438                String pathFile;
439                for (Iterator<Sensor> iterator = sensors.iterator(); iterator.hasNext();) {
440                        Sensor sensor = iterator.next();
441                        sensorAndMeasurements = run.getMeasurementsOfSensor(sensor);
442                        fileName = sanitizeFileName(sensor.getSensorName().toString() + ".csv");
443                        pathFile = pathDir + File.separatorChar + fileName;
444                        exportSensorMeasurementToCSV(pathFile, sensorAndMeasurements.getMeasurements(),
445                                        isHeader, separator);
446                }
447        }
448 
449        /**
450         * Get the Data which are associated with the selected TreeView element and open a save dialog
451         * with settings for the export to CSV files.
452         * 
453         * @author David Scherr
454         */
455        private void exportSelectedDataToCSV() {
456 
457                ISelection selection = viewer.getSelection();
458                IStructuredSelection structuredSelection = (IStructuredSelection) selection;
459                Object object = structuredSelection.getFirstElement();
460 
461                if (object instanceof FileDAOFactory) {
462 
463                } else if (object instanceof ExperimentAndDAO) {
464 
465                } else if (object instanceof TreeContainer) {
466                        TreeContainer treeContainer = (TreeContainer) object;
467                        String dirAllExperimentRuns = treeContainer.getName();
468                        CSVSettingsDialog dialog = new CSVSettingsDialog("", dirAllExperimentRuns, "",
469                                        DialogType.DIRECTORY);
470 
471                        // If the returned path of the dialog is valid, then continue the export.
472                        if (dialog.getValidPath()) {
473                                exportAllExperimentRunsToCSV(dialog.getPath(), treeContainer.getElements(), dialog
474                                                .isHeader(), dialog.getSeparator());
475                        }
476 
477                } else if (object instanceof TreeObject) {
478                        TreeObject treeObject = (TreeObject) object;
479                        Object innerObject = treeObject.getObject();
480 
481                        if (innerObject instanceof Sensor) {
482                                // Get the measurement of a special selected sensor of the TreeObject.
483                                Sensor sensor = (Sensor) innerObject;
484                                SensorAndMeasurements sensorAndMeasurements = treeObject.getRun()
485                                                .getMeasurementsOfSensor(sensor);
486                                String fileName = sanitizeFileName(sensorAndMeasurements.getSensor()
487                                                .getSensorName().toString()
488                                                + ".csv");
489                                // Please note that the dialog type is a FileDialog.
490                                CSVSettingsDialog dialog = new CSVSettingsDialog("", fileName, "*.csv",
491                                                DialogType.FILE);
492 
493                                if (dialog.getValidPath()) {
494                                        exportSensorMeasurementToCSV(dialog.getPath(), sensorAndMeasurements
495                                                        .getMeasurements(), dialog.isHeader(), dialog.getSeparator());
496                                }
497                        } else if (innerObject instanceof ExperimentRun) {
498                                // Get the measurements of all sensors of the selected TreeObject.
499                                ExperimentRun run = (ExperimentRun) innerObject;
500                                String dirExperiment = sanitizeFileName(run.getExperimentDateTime());
501                                // Please note that the dialog type is a DirectoryDialog.
502                                CSVSettingsDialog dialog = new CSVSettingsDialog("", dirExperiment, "",
503                                                DialogType.DIRECTORY);
504 
505                                if (dialog.getValidPath()) {
506                                        exportExperimentRunToCSV(dialog.getPath(), treeObject.getExperiment()
507                                                        .getSensors(), run, dialog.isHeader(), dialog.getSeparator());
508                                }
509                        }
510                }
511        }
512 
513        /**
514         * Export all experiment runs to the corresponding folders which contains sub-folders with the
515         * particular runs as CSV files.
516         * 
517         * @author David Scherr
518         * @param pathDir
519         *            Path in which you find the directory of all Experiment Runs.
520         * @param allExperimentRuns
521         *            Collection of the TreeObjects, which contains Experiment Runs.
522         * @param isHeader
523         *            If the value is true, then the CSV file will integrate a superscription.
524         * @param separator
525         *            At the moment there are 3 possibilities to separate the CSV data: (1) Semicolon
526         *            (2) Comma (3) Tabulator. One of these is stored in this parameter as the
527         *            corresponding character, but still in String format (maybe in the future someone
528         *            will add a separator with more than one character).
529         */
530        private void exportAllExperimentRunsToCSV(String pathDir,
531                        Collection<TreeObject> allExperimentRuns, boolean isHeader, String separator) {
532                // Save all Experiments
533                for (Iterator<TreeObject> iterator = allExperimentRuns.iterator(); iterator.hasNext();) {
534                        TreeObject treeObject = (TreeObject) iterator.next();
535                        Object innerObject = treeObject.getObject();
536 
537                        // Save all ExperimentRuns
538                        if (innerObject instanceof ExperimentRun) {
539                                // Get the measurements of all sensors of the selected TreeObject.
540                                ExperimentRun run = (ExperimentRun) innerObject;
541                                String dirExperiment = sanitizeFileName(run.getExperimentDateTime());
542                                String pathAllExperimentRuns = pathDir + File.separatorChar + dirExperiment;
543                                new File(pathAllExperimentRuns).mkdirs();
544                                exportExperimentRunToCSV(pathAllExperimentRuns, treeObject.getExperiment()
545                                                .getSensors(), run, isHeader, separator);
546                        }
547                }
548        }
549 
550        /**
551         * Some characters are not allowed for file and directory names, e.g. : , ", *, etc. which will
552         * be replaced by sanitizeFileName().
553         * 
554         * @author David Scherr
555         * @param fileOrDirName
556         *            The name of a file or directory.
557         * @return The sanitized file name, which is free of not allowed characters.
558         */
559        private String sanitizeFileName(String fileOrDirName) {
560 
561                // Replace all chars, which can't be a part of a valid windows filename.
562                fileOrDirName = fileOrDirName.replace('\\', '-');
563                fileOrDirName = fileOrDirName.replace('/', '-');
564                fileOrDirName = fileOrDirName.replace(':', '-');
565                fileOrDirName = fileOrDirName.replace('*', '+');
566                fileOrDirName = fileOrDirName.replace('?', '!');
567                fileOrDirName = fileOrDirName.replace('"', ' ');
568                fileOrDirName = fileOrDirName.replace('<', '(');
569                fileOrDirName = fileOrDirName.replace('>', ')');
570                fileOrDirName = fileOrDirName.replace('|', ',');
571 
572                return fileOrDirName;
573        }
574 
575        /** Set a instance of, in viewer selected element. */
576        private void setSelectedElement(Object selected) {
577 
578                selectedFactory = null;
579                selectedExperiment = null;
580 
581                if (selected instanceof IDAOFactory) {
582                        selectedFactory = (IDAOFactory) selected;
583                        deleteDataSet.setEnabled(true);
584                        properties.setEnabled(true);
585                        saveAsCSV.setEnabled(false);
586                } else if (selected instanceof ExperimentAndDAO) {
587                        ExperimentAndDAO experimentAndDAO = (ExperimentAndDAO) selected;
588                        selectedExperiment = (Experiment) experimentAndDAO.getExperiment();
589                        selectedFactory = experimentAndDAO.getDatasource();
590                        deleteDataSet.setEnabled(true);
591                        properties.setEnabled(false);
592                        saveAsCSV.setEnabled(false);
593                } else {
594                        deleteDataSet.setEnabled(false);
595                        properties.setEnabled(false);
596                        saveAsCSV.setEnabled(true);
597 
598                        if ((selected instanceof TreeContainer)) {
599                                if (((TreeContainer) selected).getName().equals("Sensors")) {
600                                        saveAsCSV.setEnabled(false);
601                                }
602                        } else if (selected instanceof TreeObject) {
603                                if (((TreeObject) selected).getObject() instanceof ExperimentRun) {
604 
605                                } else {
606                                        if (((TreeObject) selected).getRun() == null) {
607                                                saveAsCSV.setEnabled(false);
608                                        }
609                                }
610                        }
611                }
612        }
613 
614        /**
615         * Passing the focus request to the viewer's control.
616         */
617        @Override
618        public void setFocus() {
619                viewer.getControl().setFocus();
620        }
621}

[all classes][de.uka.ipd.sdq.sensorframework.visualisation.views]
EMMA 2.0.9414 (unsupported private build) (C) Vladimir Roubtsov