1 /*******************************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * Bernd Hufmann - Initial API and implementation
10 *******************************************************************************/
12 package org
.eclipse
.tracecompass
.tmf
.ui
.tests
.uml2sd
.load
;
15 import java
.util
.ArrayList
;
16 import java
.util
.List
;
18 import org
.eclipse
.jface
.action
.Action
;
19 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
20 import org
.eclipse
.jface
.viewers
.ISelection
;
21 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
22 import org
.eclipse
.swt
.graphics
.Image
;
23 import org
.eclipse
.tracecompass
.tmf
.core
.timestamp
.TmfTimestamp
;
24 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.SDView
;
25 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.AsyncMessageReturn
;
26 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.BasicExecutionOccurrence
;
27 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.EllipsisMessage
;
28 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.ExecutionOccurrence
;
29 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.Frame
;
30 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.GraphNode
;
31 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.HotSpot
;
32 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.Lifeline
;
33 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.LifelineCategories
;
34 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.Stop
;
35 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.SyncMessage
;
36 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.core
.SyncMessageReturn
;
37 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.dialogs
.Criteria
;
38 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.dialogs
.FilterCriteria
;
39 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.drawings
.IImage
;
40 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDFilterProvider
;
41 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDFindProvider
;
42 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDGraphNodeSupporter
;
43 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.handlers
.provider
.ISDPagingProvider
;
44 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.uml2sd
.load
.IUml2SDLoader
;
45 import org
.eclipse
.ui
.ISelectionListener
;
46 import org
.eclipse
.ui
.IWorkbenchPart
;
47 import org
.eclipse
.ui
.PlatformUI
;
52 @SuppressWarnings("javadoc")
53 public class TestLoaders
implements IUml2SDLoader
, ISDFindProvider
, ISDFilterProvider
, ISDPagingProvider
, ISelectionListener
{
57 private List
<GraphNode
> findResults
= new ArrayList
<>();
58 private Criteria findCriteria
;
59 private int currentFindIndex
= 0;
61 private Frame savedFrame
= null;
63 public TestLoaders() {
72 public TestLoaders(String name
) {
77 public void setViewer(SDView j
) {
78 PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addPostSelectionListener(this);
80 v
.setSDPagingProvider(this);
81 v
.setSDFindProvider(this);
82 v
.setSDFilterProvider(this);
88 public boolean hasNextPage() {
93 public boolean hasPrevPage() {
98 public void prevPage() {
104 public void nextPage() {
109 private void createFrame() {
110 Frame testFrame
= new Frame();
112 testFrame
.setName("Sequence Diagram - First Page");
113 LifelineCategories tt
[] = new LifelineCategories
[2];
114 tt
[0] = new LifelineCategories();
115 tt
[1] = new LifelineCategories();
116 tt
[1].setName("Categorie 1");
117 tt
[1].setImage(new LocalImageImpl("obj16/node_obj.gif"));
118 tt
[0].setImage(new LocalImageImpl("obj16/class.gif"));
119 tt
[0].setName("Categorie 0");
120 testFrame
.setLifelineCategories(tt
);
121 Lifeline lifeline
= new Lifeline();
122 lifeline
.setName("LifeLine 0");
123 testFrame
.addLifeLine(lifeline
);
124 EllipsisMessage mn
= new EllipsisMessage();
125 lifeline
.getNewEventOccurrence();
126 mn
.setStartLifeline(lifeline
);
127 mn
.setName("******************* EllipsisisMessage TEST ****************");
128 testFrame
.addMessage(mn
);
129 SyncMessage mn3
= new SyncMessage();
130 mn3
.setStartLifeline(lifeline
);
131 testFrame
.addMessage(mn3
);
132 SyncMessage mn2
= new SyncMessage();
133 lifeline
.getNewEventOccurrence();
134 lifeline
.setCategory(0);
135 mn2
.setEndLifeline(lifeline
);
136 mn2
.setName("*******************Sync TEST ****************");
137 testFrame
.addMessage(mn2
);
138 for (int i
= 1; i
< 300; i
++) {
139 lifeline
= new Lifeline();
140 lifeline
.setName((new StringBuilder("LifeLine ")).append(i
).toString());
141 lifeline
.setCategory(1);
142 testFrame
.addLifeLine(lifeline
);
143 SyncMessage m3
= new SyncMessage();
144 testFrame
.getLifeline(i
- 1).getNewEventOccurrence();
145 m3
.setStartLifeline(testFrame
.getLifeline(i
- 1));
146 m3
.setEndLifeline(testFrame
.getLifeline(i
));
147 m3
.setName((new StringBuilder("Sync Message ")).append(i
).toString());
148 testFrame
.addMessage(m3
);
150 // m3.setTime(new TmfTimestamp(i - 400));
152 // m3.setTime(new TmfTimestamp(i));
154 m3
.setTime(new TmfTimestamp(i
+ 1));
157 for (int i
= testFrame
.lifeLinesCount() - 1; i
> 0; i
--) {
158 SyncMessageReturn m
= new SyncMessageReturn();
159 testFrame
.getLifeline(i
).getNewEventOccurrence();
160 m
.setStartLifeline(testFrame
.getLifeline(i
));
161 m
.setEndLifeline(testFrame
.getLifeline(i
- 1));
162 testFrame
.addMessage(m
);
163 m
.setName((new StringBuilder("Sync Message return ")).append(i
).toString());
164 if (i
+ 1 < testFrame
.lifeLinesCount()) {
165 SyncMessage h
= testFrame
.getSyncMessage(i
+ 1);
170 for (int i
= 0; i
< testFrame
.lifeLinesCount(); i
++) {
172 ExecutionOccurrence occ
= new ExecutionOccurrence();
173 occ
.setStartOccurrence(testFrame
.getSyncMessage(i
).getEventOccurrence() + 1);
174 occ
.setEndOccurrence(testFrame
.getSyncMessageReturn(testFrame
.syncMessageReturnCount() - i
).getEventOccurrence());
175 testFrame
.getLifeline(i
).addExecution(occ
);
176 occ
.setName("******************* Execution Occurance TEST ****************");
181 s
.setLifeline(testFrame
.getLifeline(1));
182 s
.setEventOccurrence(testFrame
.getLifeline(1).getNewEventOccurrence());
183 testFrame
.getLifeline(1).addNode(s
);
184 HotSpot gg
= new HotSpot();
185 gg
.setImage(new LocalImageImpl("obj16/plus_obj.gif"));
186 gg
.setExecution((BasicExecutionOccurrence
) testFrame
.getLifeline(1).getExecutions().get(0));
187 AsyncMessageReturn m
= new AsyncMessageReturn();
188 m
.setStartLifeline(testFrame
.getLifeline(1));
189 m
.setEndLifeline(testFrame
.getLifeline(3));
190 m
.setStartOccurrence(2);
191 m
.setEndOccurrence(6);
192 m
.setStartTime(new TmfTimestamp(2));
193 m
.setEndTime(new TmfTimestamp(6));
194 m
.setName("*******************Async TEST ****************");
195 testFrame
.addMessage(m
);
196 v
.setFrame(testFrame
);
197 v
.getSDWidget().setReorderMode(true);
201 testFrame
.setName("Sequence Diagram");
202 Lifeline lifeline
= new Lifeline();
203 lifeline
.setName("LifeLine 0");
204 testFrame
.addLifeLine(lifeline
);
205 lifeline
= new Lifeline();
206 lifeline
.setName("LifeLine 1");
207 testFrame
.addLifeLine(lifeline
);
208 for (int i
= 1; i
< 30; i
++) {
209 SyncMessage m3
= new SyncMessage();
210 m3
.autoSetStartLifeline(testFrame
.getLifeline(0));
211 m3
.autoSetEndLifeline(testFrame
.getLifeline(0));
212 m3
.setName((new StringBuilder("Message ")).append(i
).toString());
213 testFrame
.addMessage(m3
);
214 SyncMessageReturn m
= new SyncMessageReturn();
215 m
.autoSetStartLifeline(testFrame
.getLifeline(0));
216 m
.autoSetEndLifeline(testFrame
.getLifeline(0));
217 testFrame
.addMessage(m
);
218 m
.setName((new StringBuilder("Message return ")).append(i
).toString());
219 ExecutionOccurrence occ
= new ExecutionOccurrence();
220 occ
.setStartOccurrence(testFrame
.getSyncMessage(i
- 1).getEventOccurrence());
221 occ
.setEndOccurrence(testFrame
.getSyncMessageReturn(i
- 1).getEventOccurrence());
222 testFrame
.getLifeline(0).addExecution(occ
);
225 v
.setFrame(testFrame
);
229 public boolean find(Criteria toSearch
) {
230 Frame frame
= v
.getFrame();
235 if (findResults
== null || findCriteria
== null || !findCriteria
.compareTo(toSearch
)) {
236 findResults
= new ArrayList
<>();
237 findCriteria
= toSearch
;
238 if (findCriteria
.isLifeLineSelected()) {
239 for (int i
= 0; i
< frame
.lifeLinesCount(); i
++) {
240 if (findCriteria
.matches(frame
.getLifeline(i
).getName())) {
241 findResults
.add(frame
.getLifeline(i
));
246 ArrayList
<GraphNode
> msgs
= new ArrayList
<>();
247 if (findCriteria
.isSyncMessageSelected()) {
248 for (int i
= 0; i
< frame
.syncMessageCount(); i
++) {
249 if (findCriteria
.matches(frame
.getSyncMessage(i
).getName())) {
250 msgs
.add(frame
.getSyncMessage(i
));
254 for (int i
= 0; i
< frame
.syncMessageReturnCount(); i
++) {
255 if (findCriteria
.matches(frame
.getSyncMessageReturn(i
).getName())) {
256 msgs
.add(frame
.getSyncMessageReturn(i
));
261 // if(msgs.size() > 0) {
262 // GraphNode temp[] = msgs.toArray(new GraphNode[0]);
263 // Arrays.sort(temp, new DateComparator());
264 // findResults.addAll(Arrays.asList(temp));
267 msgs
= new ArrayList
<>();
268 if (findCriteria
.isAsyncMessageSelected()) {
269 for (int i
= 0; i
< frame
.asyncMessageCount(); i
++) {
270 if (findCriteria
.matches(frame
.getAsyncMessage(i
).getName())) {
271 msgs
.add(frame
.getAsyncMessage(i
));
275 for (int i
= 0; i
< frame
.asyncMessageReturnCount(); i
++) {
276 if (findCriteria
.matches(frame
.getAsyncMessageReturn(i
).getName())) {
277 msgs
.add(frame
.getAsyncMessageReturn(i
));
282 // if(msgs.size() > 0) {
283 // GraphNode temp[] = msgs.toArray(new GraphNode[0]);
284 // Arrays.sort(temp, new DateComparator());
285 // findResults.addAll(Arrays.asList(temp));
288 List
<GraphNode
> selection
= v
.getSDWidget().getSelection();
289 if (selection
!= null && selection
.size() == 1) {
290 currentFindIndex
= findResults
.indexOf(selection
.get(0)) + 1;
292 currentFindIndex
= 0;
297 if (findResults
.size() > currentFindIndex
) {
298 GraphNode current
= findResults
.get(currentFindIndex
);
299 v
.getSDWidget().moveTo(current
);
302 // return notFoundYet(findCriteria); // search in other page
307 public void cancel() {
310 currentFindIndex
= 0;
313 public boolean isLifelineSupported() {
317 public boolean isSyncMessageSupported() {
321 public boolean isSyncMessageReturnSupported() {
325 public boolean isAsyncMessageSupported() {
329 public boolean isAsyncMessageReturnSupported() {
333 public boolean isStopSupported() {
337 public Action
getFindAction() {
342 public boolean filter(List
<FilterCriteria
> filters
) {
344 if (savedFrame
!= null) {
345 savedFrame
= v
.getFrame();
348 Frame frame
= v
.getFrame();
354 if (filters
.size() != 1) {
358 FilterCriteria filterCriteria
= filters
.get(0);
360 // One way is to set visiblity of the item, but this only works for messages and not
361 // for lifelines! It's better to create a new frame without the filtered messages.
362 boolean found
= false;
363 if (filterCriteria
.getCriteria().isSyncMessageSelected()) {
364 for (int i
= 0; i
< frame
.syncMessageCount(); i
++) {
365 if (filterCriteria
.getCriteria().matches(frame
.getSyncMessage(i
).getName())) {
366 frame
.getSyncMessage(i
).setVisible(false);
371 for (int i
= 0; i
< frame
.syncMessageReturnCount(); i
++) {
372 if (filterCriteria
.getCriteria().matches(frame
.getSyncMessageReturn(i
).getName())) {
373 frame
.getSyncMessageReturn(i
).setVisible(false);
379 v
.getSDWidget().redraw();
383 public ArrayList
<?
> getCurrentFilters() {
388 public String
getTitleString() {
389 return "Test Loader";
393 public void dispose() {
398 public void selectionChanged(IWorkbenchPart part
, ISelection selection
) {
399 ISelection sel
= PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
400 if (sel
!= null && (sel
instanceof StructuredSelection
)) {
401 StructuredSelection stSel
= (StructuredSelection
) sel
;
402 if (stSel
.getFirstElement() instanceof HotSpot
) {
403 // OpenToolBox gg = new OpenToolBox(v);
410 public boolean isNodeSupported(int nodeType
) {
412 case ISDGraphNodeSupporter
.LIFELINE
:
413 case ISDGraphNodeSupporter
.SYNCMESSAGE
:
414 case ISDGraphNodeSupporter
.SYNCMESSAGERETURN
:
415 case ISDGraphNodeSupporter
.ASYNCMESSAGE
:
416 case ISDGraphNodeSupporter
.ASYNCMESSAGERETURN
:
417 case ISDGraphNodeSupporter
.STOP
:
427 public String
getNodeName(int nodeType
, String loaderClassName
) {
431 public static class LocalImageImpl
implements IImage
{
434 public LocalImageImpl(String file
) {
436 img
= getResourceImage(file
);
439 public LocalImageImpl(Image img_
) {
444 public Image
getResourceImage(String _name
) {
445 ImageDescriptor imgage
;
447 URL BASIC_URL
= new URL("platform", "localhost", "plugin");
448 URL url
= new URL(BASIC_URL
, (new StringBuilder("plugin/org.eclipse.tracecompass.tmf.ui/icons/")).append(_name
).toString());
449 imgage
= ImageDescriptor
.createFromURL(url
);
450 return imgage
.createImage();
451 } catch (Exception e
) {
452 System
.err
.println(e
);
458 public Object
getImage() {
463 public void dispose() {
472 public void firstPage() {
479 public void lastPage() {