1 /*******************************************************************************
2 * Copyright (c) 2011, 2013 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Bernd Hufmann - Initial API and implementation
11 *******************************************************************************/
12 package org
.eclipse
.linuxtools
.tmf
.ui
.tests
.views
.uml2sd
.loader
;
15 import java
.io
.IOException
;
16 import java
.net
.URISyntaxException
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import org
.eclipse
.core
.runtime
.FileLocator
;
22 import org
.eclipse
.core
.runtime
.Path
;
23 import org
.eclipse
.core
.runtime
.jobs
.Job
;
24 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEvent
;
25 import org
.eclipse
.linuxtools
.tmf
.core
.exceptions
.TmfTraceException
;
26 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfTraceClosedSignal
;
27 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfTraceOpenedSignal
;
28 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfTraceSelectedSignal
;
29 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.ITmfEventParser
;
30 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.ITmfTrace
;
31 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.TmfExperiment
;
32 import org
.eclipse
.linuxtools
.tmf
.tests
.stubs
.trace
.TmfTraceStub
;
33 import org
.eclipse
.linuxtools
.tmf
.ui
.tests
.uml2sd
.trace
.TmfUml2SDTestTrace
;
34 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.SDView
;
35 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.dialogs
.Criteria
;
36 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.dialogs
.FilterCriteria
;
37 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.dialogs
.FilterListDialog
;
38 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.load
.LoadersManager
;
39 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.loader
.TmfUml2SDSyncLoader
;
40 import org
.eclipse
.swt
.widgets
.Display
;
41 import org
.eclipse
.ui
.IViewPart
;
42 import org
.eclipse
.ui
.PartInitException
;
43 import org
.eclipse
.ui
.PlatformUI
;
44 import org
.osgi
.framework
.FrameworkUtil
;
47 * Singleton class to facilitate the test cases. Creates UML2SD view and loader objects as well as provides
48 * utility methods for interacting with the loader/view.
50 * @author Bernd Hufmann
52 public class Uml2SDTestFacility
{
54 // ------------------------------------------------------------------------
56 // ------------------------------------------------------------------------
57 private static Uml2SDTestFacility fInstance
= null;
59 private TmfUml2SDSyncLoader fLoader
;
60 private SDView fSdView
;
61 private TmfTraceStub fTrace
= null;
62 private TmfUml2SDTestTrace fParser
= null;
63 private TmfExperiment fExperiment
= null;
65 private volatile boolean fIsInitialized
= false;
67 // ------------------------------------------------------------------------
69 // ------------------------------------------------------------------------
70 private Uml2SDTestFacility() {
73 // ------------------------------------------------------------------------
75 // ------------------------------------------------------------------------
77 * @return the singleton instance.
79 public synchronized static Uml2SDTestFacility
getInstance() {
80 if (fInstance
== null) {
81 fInstance
= new Uml2SDTestFacility();
88 * Initial the test facility.
92 if (!fIsInitialized
) {
94 fParser
= new TmfUml2SDTestTrace();
95 fTrace
= setupTrace(fParser
);
96 fParser
.setTrace(fTrace
);
100 // Remove welcome view to avoid interference during test execution
101 view
= PlatformUI
.getWorkbench()
102 .getActiveWorkbenchWindow()
104 .findView("org.eclipse.ui.internal.introview");
107 PlatformUI
.getWorkbench()
108 .getActiveWorkbenchWindow()
109 .getActivePage().hideView(view
);
112 view
= PlatformUI
.getWorkbench()
113 .getActiveWorkbenchWindow()
115 .showView("org.eclipse.linuxtools.tmf.ui.tmfUml2SDSyncView");
117 } catch (final PartInitException e
) {
118 throw new RuntimeException(e
);
121 fSdView
= (SDView
) view
;
122 fLoader
= (TmfUml2SDSyncLoader
)LoadersManager
.getInstance().createLoader(
123 "org.eclipse.linuxtools.tmf.ui.views.uml2sd.loader.TmfUml2SDSyncLoader", fSdView
);
126 fIsInitialized
= true;
131 private TmfTraceStub
setupTrace(final ITmfEventParser parser
) {
134 // Create test trace object
135 final URL location
= FileLocator
.find(FrameworkUtil
.getBundle(this.getClass()), new Path("tracesets/sdEvents"), null);
136 final File test
= new File(FileLocator
.toFileURL(location
).toURI());
137 return new TmfTraceStub(test
.getPath(), 500, true, parser
);
138 } catch (final TmfTraceException e
) {
140 throw new RuntimeException(e
);
141 } catch (final URISyntaxException e
) {
143 throw new RuntimeException(e
);
144 } catch (final IOException e
) {
146 throw new RuntimeException(e
);
151 * Dispose the resource
153 public void dispose() {
154 if (fIsInitialized
) {
155 ITmfTrace trace
= fTrace
;
156 TmfExperiment experiment
= fExperiment
;
157 if (trace
== null || experiment
== null) {
158 throw new IllegalStateException();
161 trace
.broadcast(new TmfTraceClosedSignal(this, experiment
));
162 experiment
.dispose();
164 // Wait for all Eclipse jobs to finish
167 PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(fSdView
);
168 fIsInitialized
= false;
173 * Sleeps current thread or GUI thread for a given time.
174 * @param waitTimeMillis time in milliseconds to wait
176 public void delay(final long waitTimeMillis
) {
177 final Display display
= Display
.getCurrent();
178 if (display
!= null) {
179 final long endTimeMillis
= System
.currentTimeMillis() + waitTimeMillis
;
180 while(System
.currentTimeMillis() < endTimeMillis
) {
181 if (!display
.readAndDispatch()) {
182 // We do not use Display.sleep because it might never wake up
183 // if there is no user interaction
185 Thread
.sleep(Math
.min(waitTimeMillis
, 10));
186 } catch (final InterruptedException e
) {
194 Thread
.sleep(waitTimeMillis
);
195 } catch (final InterruptedException e
) {
202 * Waits for all Eclipse jobs to finish
204 public void waitForJobs() {
205 while (!Job
.getJobManager().isIdle()) {
206 delay(IUml2SDTestConstants
.WAIT_FOR_JOBS_DELAY
);
211 * @return current UML2SD loader
213 public TmfUml2SDSyncLoader
getLoader() {
218 * @return current SD view
220 public SDView
getSdView() {
225 * @return current trace
227 public TmfTraceStub
getTrace() {
232 * @return Trace parser
234 public TmfUml2SDTestTrace
getParser() {
239 * @return current experiment.
241 public TmfExperiment
getExperiment() {
248 public void nextPage() {
250 fLoader
.waitForCompletion();
251 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
255 * Go to previous page.
257 public void prevPage() {
259 fLoader
.waitForCompletion();
260 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
266 public void lastPage() {
268 fLoader
.waitForCompletion();
269 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
275 public void firstPage() {
277 fLoader
.waitForCompletion();
278 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
282 * @param page number to set
284 public void setPage(final int page
) {
285 fLoader
.pageNumberChanged(page
);
286 fLoader
.waitForCompletion();
287 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
291 * @see org.eclipse.linuxtools.tmf.ui.tests.views.uml2sd.loader.Uml2SDTestFacility#selectExperiment(boolean)
293 public void selectExperiment() {
294 this.selectExperiment(true);
298 * Selects the experiment.
299 * @param wait true to wait for indexing to finish else false
301 public void selectExperiment(final boolean wait
) {
302 fParser
= new TmfUml2SDTestTrace();
303 fTrace
= setupTrace(fParser
);
304 fParser
.setTrace(fTrace
);
306 // fTrace = setupTrace(fParser);
308 final ITmfTrace traces
[] = new ITmfTrace
[1];
310 fExperiment
= new TmfExperiment(ITmfEvent
.class, "TestExperiment", traces
);
311 fTrace
.broadcast(new TmfTraceOpenedSignal(this, fExperiment
, null));
312 fTrace
.broadcast(new TmfTraceSelectedSignal(this, fExperiment
));
314 while (fExperiment
.getNbEvents() == 0) {
315 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
318 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
323 * Disposes the experiment.
325 public void disposeExperiment() {
326 ITmfTrace trace
= fTrace
;
327 TmfExperiment experiment
= fExperiment
;
328 if (trace
== null || experiment
== null) {
329 throw new IllegalStateException();
331 trace
.broadcast(new TmfTraceClosedSignal(this, experiment
));
332 experiment
.dispose();
333 delay(IUml2SDTestConstants
.GUI_REFESH_DELAY
);
337 * Creates some global filter criteria and saves them to disk.
339 public void createFilterCriteria() {
340 // Create Filter Criteria and save tme
341 final List
<FilterCriteria
> filterToSave
= new ArrayList
<>();
342 Criteria criteria
= new Criteria();
343 criteria
.setLifeLineSelected(true);
344 criteria
.setExpression(IUml2SDTestConstants
.FIRST_PLAYER_NAME
);
345 filterToSave
.add(new FilterCriteria(criteria
, true, false));
347 criteria
= new Criteria();
348 criteria
.setSyncMessageSelected(true);
349 criteria
.setExpression("BALL_.*");
350 filterToSave
.add(new FilterCriteria(criteria
, true, false));
351 FilterListDialog
.saveFiltersCriteria(filterToSave
);