tmf: add abstract view and viewer classes for generation of SWT charts
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui.tests / shared / org / eclipse / linuxtools / tmf / ui / tests / shared / ProjectModelTestData.java
CommitLineData
87644443
GB
1/*******************************************************************************
2 * Copyright (c) 2013 École Polytechnique de Montréal
3 *
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
8 *
9 * Contributors:
10 * Geneviève Bastien - Initial API and implementation
11 *******************************************************************************/
12
3d2e4ad3 13package org.eclipse.linuxtools.tmf.ui.tests.shared;
87644443 14
c068a752
GB
15import static org.junit.Assume.assumeTrue;
16
87644443 17import java.io.File;
bc5f2035 18import java.util.concurrent.TimeoutException;
87644443
GB
19
20import org.eclipse.core.resources.IFolder;
21import org.eclipse.core.resources.IProject;
22import org.eclipse.core.resources.IResource;
23import org.eclipse.core.runtime.CoreException;
24import org.eclipse.core.runtime.IPath;
25import org.eclipse.core.runtime.NullProgressMonitor;
26import org.eclipse.core.runtime.Path;
c068a752 27import org.eclipse.linuxtools.internal.tmf.ui.Activator;
87644443
GB
28import org.eclipse.linuxtools.internal.tmf.ui.project.model.TmfImportHelper;
29import org.eclipse.linuxtools.tmf.core.TmfCommonConstants;
9ac63b5b 30import org.eclipse.linuxtools.tmf.core.tests.shared.CtfTmfTestTrace;
87644443
GB
31import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
32import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
33import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
34import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry;
35import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
36import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
37import org.eclipse.swt.widgets.Display;
38
39/**
40 * Creates objects used for this package's testing purposes
c068a752
GB
41 *
42 * @author Geneviève Bastien
87644443
GB
43 */
44public class ProjectModelTestData {
45
bc5f2035
GB
46 /* Maximum number of thread delays the main thread will do before timing out */
47 private static final int DELAY_COUNTER = 10;
48 /* Default delay time when having the main thread sleep. */
e44f940d 49 private static final long DEFAULT_DELAY = 500;
bc5f2035 50
87644443
GB
51 /** Default test project name */
52 public static final String PROJECT_NAME = "Test_Project";
53
9ac63b5b 54 private static final CtfTmfTestTrace testTrace = CtfTmfTestTrace.KERNEL;
87644443
GB
55
56 /**
57 * Gets a project element with traces all initialized
58 *
59 * @return A project stub element
60 * @throws CoreException
61 * If something happened with the project creation
62 */
63 public static TmfProjectElement getFilledProject() throws CoreException {
64
c068a752
GB
65 assumeTrue(CtfTmfTestTrace.KERNEL.exists());
66
87644443
GB
67 IProject project = TmfProjectRegistry.createProject(PROJECT_NAME, null, null);
68 IFolder traceFolder = project.getFolder(TmfTraceFolder.TRACE_FOLDER_NAME);
69
70 /* Create a trace, if it exist, it will be replaced */
9ac63b5b 71 File file = new File(testTrace.getPath());
87644443
GB
72 String path = file.getAbsolutePath();
73 final IPath pathString = Path.fromOSString(path);
74 IResource linkedTrace = TmfImportHelper.createLink(traceFolder, pathString, pathString.lastSegment());
75 if (!(linkedTrace != null && linkedTrace.exists())) {
76 return null;
77 }
78 linkedTrace.setPersistentProperty(TmfCommonConstants.TRACETYPE,
c068a752 79 "org.eclipse.linuxtools.tmf.tests.ctf.tracetype");
87644443
GB
80
81 final TmfProjectElement projectElement = TmfProjectRegistry.getProject(project, true);
82 TmfTraceElement traceElement = projectElement.getTracesFolder().getTraces().get(0);
83 traceElement.refreshTraceType();
84
85 return projectElement;
86 }
87
88 /**
89 * Get the name of the test trace element
90 *
91 * @return The trace name
92 */
93 public static String getTraceName() {
9ac63b5b 94 File file = new File(testTrace.getPath());
87644443
GB
95 String path = file.getAbsolutePath();
96 final IPath pathString = Path.fromOSString(path);
97 return pathString.lastSegment();
98 }
99
100 /**
101 * Deletes a project
102 *
103 * @param project
104 * Project to delete
87644443 105 */
c068a752 106 public static void deleteProject(TmfProjectElement project) {
87644443
GB
107 /* Delete experiments */
108 for (ITmfProjectModelElement element : project.getExperimentsFolder().getChildren()) {
109 if (element instanceof TmfExperimentElement) {
110 TmfExperimentElement experiment = (TmfExperimentElement) element;
111 IResource resource = experiment.getResource();
112
113 /* Close the experiment if open */
114 experiment.closeEditors();
115
116 IPath path = resource.getLocation();
117 if (path != null) {
118 /* Delete supplementary files */
119 experiment.deleteSupplementaryFolder();
120 }
121
122 /* Finally, delete the experiment */
c068a752
GB
123 try {
124 resource.delete(true, null);
125 } catch (CoreException e) {
126 Activator.getDefault().logError("Error deleting experiment element", e);
127 }
87644443
GB
128 }
129 }
130
131 /* Delete traces */
132 for (ITmfProjectModelElement element : project.getTracesFolder().getChildren()) {
133 if (element instanceof TmfTraceElement) {
134 TmfTraceElement trace = (TmfTraceElement) element;
135 IResource resource = trace.getResource();
136
137 /* Close the trace if open */
138 trace.closeEditors();
139
140 IPath path = resource.getLocation();
141 if (path != null) {
142 /* Delete supplementary files */
143 trace.deleteSupplementaryFolder();
144 }
145
146 /* Finally, delete the trace */
c068a752
GB
147 try {
148 resource.delete(true, new NullProgressMonitor());
149 } catch (CoreException e) {
150 Activator.getDefault().logError("Error deleting trace element", e);
151 }
87644443
GB
152 }
153 }
154
155 /* Delete the project itself */
c068a752
GB
156 try {
157 project.getResource().delete(true, null);
158 } catch (CoreException e) {
159 Activator.getDefault().logError("Error deleting project", e);
160 }
87644443
GB
161 }
162
163 /**
3d2e4ad3
GB
164 * Makes the main display thread sleep, so it gives a chance to other
165 * threads needing the main display to execute
87644443
GB
166 *
167 * @param waitTimeMillis
168 * time to wait in millisecond
169 */
170 public static void delayThread(final long waitTimeMillis) {
171 final Display display = Display.getCurrent();
172 if (display != null) {
173 final long endTimeMillis = System.currentTimeMillis() + waitTimeMillis;
174 while (System.currentTimeMillis() < endTimeMillis) {
175 if (!display.readAndDispatch()) {
176 display.sleep();
177 }
178 display.update();
179 }
180 } else {
181 try {
182 Thread.sleep(waitTimeMillis);
183 } catch (final InterruptedException e) {
184 // Ignored
185 }
186 }
187 }
188
bc5f2035
GB
189 /**
190 * Makes the main display thread sleep to give a chance to other threads to
191 * execute. It sleeps until the a trace element's corresponding trace is
192 * available (opened) or returns after a timeout. It allows to set short
193 * delays, while still not failing tests when it randomly takes a bit more
194 * time for the trace to open.
195 *
196 * If the project model element sent in parameter is not a trace element,
197 * then the thread is delayed only once by the default delay time. For
198 * longer delays in those cases, it is preferable to use the
199 * {@link ProjectModelTestData#delayThread(long)} instead.
200 *
201 * Timeout is DELAY_COUNTER * DEFAULT_DELAY ms
202 *
203 * @param projectElement
204 * The trace element we are waiting for. If the element if not of
205 * type TmfTraceElement, the thread is delayed only once.
206 * @throws TimeoutException
207 * If after the maximum number of delays the trace is still
208 * null, we throw a timeout exception, the trace has not opened.
209 */
210 public static void delayUntilTraceOpened(final ITmfProjectModelElement projectElement) throws TimeoutException {
211 if (projectElement instanceof TmfTraceElement) {
212 TmfTraceElement traceElement = (TmfTraceElement) projectElement;
e44f940d 213 final long deadline = System.nanoTime() + (DELAY_COUNTER * DEFAULT_DELAY * 1000000L);
bc5f2035
GB
214 do {
215 delayThread(DEFAULT_DELAY);
216 if (traceElement.getTrace() != null) {
217 return;
218 }
219 } while (System.nanoTime() < deadline);
220 throw new TimeoutException("Timeout while waiting for " + traceElement);
221 }
222 delayThread(DEFAULT_DELAY);
223 }
224
87644443 225}
This page took 0.036126 seconds and 5 git commands to generate.