/**********************************************************************
* Copyright (c) 2011 Ericsson
- *
+ *
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
+ *
+ * Contributors:
* Bernd Hufmann - Initial API and implementation
**********************************************************************/
package org.eclipse.linuxtools.tmf.ui.views.uml2sd.impl;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.linuxtools.internal.tmf.ui.TmfUiPlugin;
import org.eclipse.linuxtools.tmf.core.component.TmfComponent;
+import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
+import org.eclipse.linuxtools.tmf.core.event.ITmfEventField;
import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp;
import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.core.event.TmfEventField;
import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange;
import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp;
import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;
// Attributes
// ------------------------------------------------------------------------
protected final static String TITLE = Messages.TmfUml2SDSyncLoader_ViewName;
- protected final static int DEFAULT_BLOCK_SIZE = 50000;
+ protected final static int DEFAULT_BLOCK_SIZE = 50000;
protected final static int MAX_NUM_OF_MSG = 10000;
protected static final long INITIAL_WINDOW_OFFSET = (1L * 100 * 1000 * 1000); // .1sec
// Experiment attributes
- protected TmfExperiment<TmfEvent> fExperiment = null;
- protected ITmfEventRequest<TmfEvent> fIndexRequest = null;
- protected ITmfEventRequest<TmfEvent> fPageRequest = null;
+ protected TmfExperiment<ITmfEvent> fExperiment = null;
+ protected ITmfEventRequest<ITmfEvent> fIndexRequest = null;
+ protected ITmfEventRequest<ITmfEvent> fPageRequest = null;
volatile protected boolean fIsSignalSent = false;
volatile protected long fInitialWindow = INITIAL_WINDOW_OFFSET;
-
+
// The view and event attributes
protected SDView fView = null;
protected Frame fFrame = null;
protected List<TmfTimeRange> fCheckPoints = new ArrayList<TmfTimeRange>(MAX_NUM_OF_MSG);
volatile protected int fCurrentPage = 0;
protected ITmfTimestamp fCurrentTime = null;
- volatile protected boolean fIsSelect = false;
+ volatile protected boolean fIsSelect = false;
// Search attributes
protected SearchJob fFindJob = null;
// Filter attributes
protected List<FilterCriteria> fFilterCriteria = null;
-
+
// Thread synchronization
protected ReentrantLock fLock = new ReentrantLock();
-
+
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
* @return returns the current time if available else null
*/
public ITmfTimestamp getCurrentTime() {
- fLock.lock();
+ fLock.lock();
try {
- if (fCurrentTime != null) {
+ if (fCurrentTime != null) {
return fCurrentTime.clone();
}
return null;
fLock.unlock();
}
}
-
+
/**
* Waits for the page request to be completed
*/
public void waitForCompletion() {
fLock.lock();
- ITmfEventRequest<TmfEvent> request = fPageRequest;
+ ITmfEventRequest<ITmfEvent> request = fPageRequest;
fLock.unlock();
- if (request != null)
- try {
- request.waitForCompletion();
- } catch (InterruptedException e) {
- // ignore
+ if (request != null) {
+ try {
+ request.waitForCompletion();
+ } catch (InterruptedException e) {
+ // ignore
+ }
}
}
/**
* Spawns a request to index the experiment (checkpoints creation) as well as it fills
* the first page.
- *
+ *
* @param signal The experiment selected signal
*/
@SuppressWarnings("unchecked")
@TmfSignalHandler
- public void experimentSelected(TmfExperimentSelectedSignal<TmfEvent> signal) {
+ public void experimentSelected(TmfExperimentSelectedSignal<ITmfEvent> signal) {
final Job job = new Job("Indexing " + getName() + "...") { //$NON-NLS-1$ //$NON-NLS-2$
@Override
job.setUser(false);
job.schedule();
- fLock.lock();
+ fLock.lock();
try {
// Update the trace reference
- TmfExperiment<TmfEvent> exp = (TmfExperiment<TmfEvent>) signal.getExperiment();
+ TmfExperiment<ITmfEvent> exp = (TmfExperiment<ITmfEvent>) signal.getExperiment();
if (!exp.equals(fExperiment)) {
fExperiment = exp;
}
// TmfTimeRange window = getInitTRange(fExperiment.getTimeRange());
TmfTimeRange window = TmfTimeRange.ETERNITY;
- fIndexRequest = new TmfEventRequest<TmfEvent>(TmfEvent.class, window, TmfDataRequest.ALL_DATA, DEFAULT_BLOCK_SIZE, ITmfDataRequest.ExecutionType.BACKGROUND) {
+ fIndexRequest = new TmfEventRequest<ITmfEvent>(ITmfEvent.class, window, TmfDataRequest.ALL_DATA, DEFAULT_BLOCK_SIZE, ITmfDataRequest.ExecutionType.BACKGROUND) {
private ITmfTimestamp fFirstTime = null;
private ITmfTimestamp fLastTime = null;
private int fNbSeqEvents = 0;
- private List<ITmfSyncSequenceDiagramEvent> fSdEvents = new ArrayList<ITmfSyncSequenceDiagramEvent>(MAX_NUM_OF_MSG);
+ private final List<ITmfSyncSequenceDiagramEvent> fSdEvents = new ArrayList<ITmfSyncSequenceDiagramEvent>(MAX_NUM_OF_MSG);
@Override
- public void handleData(TmfEvent event) {
+ public void handleData(ITmfEvent event) {
super.handleData(event);
ITmfSyncSequenceDiagramEvent sdEvent = getSequnceDiagramEvent(event);
fLock.unlock();
}
fFirstTime = null;
-
+
}
if (fNbSeqEvents > MAX_NUM_OF_MSG) {
}
};
- ((TmfExperiment<TmfEvent>) fExperiment).sendRequest((ITmfDataRequest<TmfEvent>) fIndexRequest);
+ fExperiment.sendRequest(fIndexRequest);
} finally {
fLock.unlock();
}
-
+
}
/**
* @param signal The experiment disposed signal
*/
- @TmfSignalHandler
+ @TmfSignalHandler
public void experimentDisposed(TmfExperimentDisposedSignal<TmfEvent> signal) {
if (signal.getExperiment() != TmfExperiment.getCurrentExperiment()) {
return;
}
- fLock.lock();
+ fLock.lock();
try {
if ((fIndexRequest != null) && !fIndexRequest.isCompleted()) {
fIndexRequest.cancel();
/**
* Moves to the page that contains the time provided by the signal. The messages will be selected
* if the provided time is the time of a message.
- *
+ *
* @param signal The Time synch signal.
*/
@TmfSignalHandler
}
/**
- * Moves to the page that contains the current time provided by signal.
- * No message will be selected however the focus will be set to the message
+ * Moves to the page that contains the current time provided by signal.
+ * No message will be selected however the focus will be set to the message
* if the provided time is the time of a message.
- *
+ *
* @param signal The time range sync signal
*/
@TmfSignalHandler
try {
if ((signal.getSource() != this) && (fFrame != null) && !fIsSignalSent) {
TmfTimeRange newTimeRange = signal.getCurrentRange();
- ITmfTimestamp delta = (TmfTimestamp) newTimeRange.getEndTime().getDelta(newTimeRange.getStartTime());
+ ITmfTimestamp delta = newTimeRange.getEndTime().getDelta(newTimeRange.getStartTime());
fInitialWindow = delta.getValue();
fIsSelect = false;
}
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.load.IUml2SDLoader#setViewer(org.eclipse.linuxtools.tmf.ui.views.uml2sd.SDView)
@SuppressWarnings("unchecked")
@Override
public void setViewer(SDView viewer) {
-
- fLock.lock();
+
+ fLock.lock();
try {
fView = viewer;
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addPostSelectionListener(this);
resetLoader();
- fExperiment = (TmfExperiment<TmfEvent>) TmfExperiment.getCurrentExperiment();
+ fExperiment = (TmfExperiment<ITmfEvent>) TmfExperiment.getCurrentExperiment();
if (fExperiment != null) {
- experimentSelected(new TmfExperimentSelectedSignal<TmfEvent>(this, fExperiment));
+ experimentSelected(new TmfExperimentSelectedSignal<ITmfEvent>(this, fExperiment));
}
} finally {
fLock.unlock();
@Override
public void dispose() {
super.dispose();
- fLock.lock();
+ fLock.lock();
try {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().removePostSelectionListener(this);
fView.setSDFindProvider(null);
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
ISelection sel = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
- if (sel != null && (sel instanceof StructuredSelection)) {
+ if ((sel != null) && (sel instanceof StructuredSelection)) {
StructuredSelection stSel = (StructuredSelection) sel;
if (stSel.getFirstElement() instanceof TmfSyncMessage) {
TmfSyncMessage syncMsg = ((TmfSyncMessage) stSel.getFirstElement());
return false;
}
- if (fFindResults == null || fFindCriteria == null || !fFindCriteria.compareTo(toSearch)) {
+ if ((fFindResults == null) || (fFindCriteria == null) || !fFindCriteria.compareTo(toSearch)) {
fFindResults = new CopyOnWriteArrayList<GraphNode>();
fFindCriteria = toSearch;
if (fFindCriteria.isLifeLineSelected()) {
@SuppressWarnings("rawtypes")
List selection = fView.getSDWidget().getSelection();
- if (selection != null && selection.size() == 1)
+ if ((selection != null) && (selection.size() == 1)) {
fCurrentFindIndex = fFindResults.indexOf(selection.get(0)) + 1;
- else
+ } else {
fCurrentFindIndex = 0;
+ }
} else {
fCurrentFindIndex++;
}
if (fFindResults.size() > fCurrentFindIndex) {
- GraphNode current = (GraphNode) fFindResults.get(fCurrentFindIndex);
+ GraphNode current = fFindResults.get(fCurrentFindIndex);
fView.getSDWidget().moveTo(current);
return true;
} else {
}
return true;
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.provider.ISDPagingProvider#hasNextPage()
try {
int size = fCheckPoints.size();
if (size > 0) {
- return fCurrentPage < size - 1;
+ return fCurrentPage < (size - 1);
}
} finally {
fLock.unlock();
fLock.lock();
try {
// Safety check
- if (fCurrentPage >= fCheckPoints.size() - 1)
+ if (fCurrentPage >= (fCheckPoints.size() - 1)) {
return;
+ }
cancelOngoingRequests();
fCurrentTime = null;
fLock.lock();
try {
// Safety check
- if (fCurrentPage <= 0)
+ if (fCurrentPage <= 0) {
return;
+ }
cancelOngoingRequests();
fCurrentTime = null;
fLock.unlock();
}
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.provider.ISDPagingProvider#firstPage()
fLock.unlock();
}
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.ui.views.uml2sd.handlers.provider.ISDPagingProvider#lastPage()
pageNumber = 0;
}
int size = fCheckPoints.size();
- if (pageNumber > size - 1) {
+ if (pageNumber > (size - 1)) {
pageNumber = size - 1;
}
fCurrentPage = pageNumber;
* Cancels any ongoing find operation
*/
protected void cancelOngoingRequests() {
- fLock.lock();
+ fLock.lock();
try {
// Cancel the search thread
if (fFindJob != null) {
if ((fPageRequest != null) && !fPageRequest.isCompleted()) {
fPageRequest.cancel();
fPageRequest = null;
- }
+ }
} finally {
fLock.unlock();
}
} finally {
fLock.unlock();
}
-
+
final Frame frame = new Frame();
if (events.size() > 0) {
int eventOccurence = 1;
for (int i = 0; i < events.size(); i++) {
- ITmfSyncSequenceDiagramEvent sdEvent = (TmfSyncSequenceDiagramEvent) events.get(i);
+ ITmfSyncSequenceDiagramEvent sdEvent = events.get(i);
// Check message filter
if (filterMessage(sdEvent)) {
}
// Set the message sender and receiver
- Lifeline startLifeline = (Lifeline) nodeToLifelineMap.get(sdEvent.getSender());
- Lifeline endLifeline = (Lifeline) nodeToLifelineMap.get(sdEvent.getReceiver());
+ Lifeline startLifeline = nodeToLifelineMap.get(sdEvent.getSender());
+ Lifeline endLifeline = nodeToLifelineMap.get(sdEvent.getReceiver());
- // Check if any of the lifelines were filtered
- if (startLifeline == null || endLifeline == null) {
+ // Check if any of the lifelines were filtered
+ if ((startLifeline == null) || (endLifeline == null)) {
continue;
}
int tmp = Math.max(startLifeline.getEventOccurrence(), endLifeline.getEventOccurrence());
eventOccurence = Math.max(eventOccurence, tmp);
-
+
startLifeline.setCurrentEventOccurrence(eventOccurence);
endLifeline.setCurrentEventOccurrence(eventOccurence);
-
+
TmfSyncMessage message = new TmfSyncMessage(sdEvent, eventOccurence++);
-
+
message.setStartLifeline(startLifeline);
message.setEndLifeline(endLifeline);
// add the message to the frame
frame.addMessage(message);
-
+
}
fLock.lock();
try {
if (fFindCriteria != null) {
find(fFindCriteria);
}
-
+
fView.toggleWaitCursorAsync(false);
}
} finally {
}
}
else {
- // Not in GUI thread - queue action in GUI thread.
+ // Not in GUI thread - queue action in GUI thread.
fView.getSDWidget().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
fLock.unlock();
}
}
-
+
/**
* Moves to a certain message defined by timestamp (across pages)
*/
fLock.unlock();
}
- fPageRequest = new TmfEventRequest<TmfEvent>(TmfEvent.class, window, TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.FOREGROUND) {
- private List<ITmfSyncSequenceDiagramEvent> fSdEvent = new ArrayList<ITmfSyncSequenceDiagramEvent>();
+ fPageRequest = new TmfEventRequest<ITmfEvent>(ITmfEvent.class, window, TmfDataRequest.ALL_DATA, 1, ITmfDataRequest.ExecutionType.FOREGROUND) {
+ private final List<ITmfSyncSequenceDiagramEvent> fSdEvent = new ArrayList<ITmfSyncSequenceDiagramEvent>();
@Override
- public void handleData(TmfEvent event) {
+ public void handleData(ITmfEvent event) {
super.handleData(event);
ITmfSyncSequenceDiagramEvent sdEvent = getSequnceDiagramEvent(event);
fillCurrentPage(fSdEvent);
super.handleSuccess();
}
-
+
};
- ((TmfExperiment<TmfEvent>) fExperiment).sendRequest((ITmfDataRequest<TmfEvent>) fPageRequest);
+ fExperiment.sendRequest(fPageRequest);
if (notifyAll) {
TmfTimeRange timeRange = getSignalTimeRange(window.getStartTime());
fLock.lock();
try {
size = fCheckPoints.size();
- for (page = 0; page < size; page++) {
+ for (page = 0; page < size; page++) {
TmfTimeRange timeRange = fCheckPoints.get(page);
if (timeRange.getEndTime().compareTo(time, false) >= 0) {
break;
fLock.unlock();
}
}
-
+
/**
* Background search in trace for expression in criteria.
* @param findCriteria The find criteria
}
/**
- * Checks if filter criteria matches the message name in given SD event.
+ * Checks if filter criteria matches the message name in given SD event.
* @param sdEvent The SD event to check
* @return true if match else false.
*/
}
/**
- * Checks if filter criteria matches a lifeline name (sender or receiver) in given SD event.
+ * Checks if filter criteria matches a lifeline name (sender or receiver) in given SD event.
* @param lifeline the message receiver
* @return true if match else false.
*/
}
/**
- * Job to search in trace for given time range.
+ * Job to search in trace for given time range.
*/
protected class SearchJob extends Job {
final protected SearchEventRequest fSearchRequest;
-
+
/**
* Constructor
- *
+ *
* @param findCriteria The search criteria
* @param window Time range to search in
*/
@Override
protected IStatus run(IProgressMonitor monitor) {
fSearchRequest.setMonitor(monitor);
-
- ((TmfExperiment<TmfEvent>) fExperiment).sendRequest((ITmfDataRequest<TmfEvent>) fSearchRequest);
+
+ fExperiment.sendRequest(fSearchRequest);
try {
fSearchRequest.waitForCompletion();
e.printStackTrace();
}
- IStatus status = Status.OK_STATUS;
- if (fSearchRequest.isFound() && fSearchRequest.getFoundTime() != null) {
+ IStatus status = Status.OK_STATUS;
+ if (fSearchRequest.isFound() && (fSearchRequest.getFoundTime() != null)) {
fCurrentTime = fSearchRequest.getFoundTime();
-
+
// Avoid double-selection. Selection will be done when calling find(criteria)
// after moving to relevant page
- fIsSelect = false;
+ fIsSelect = false;
if (!fView.getSDWidget().isDisposed()) {
fView.getSDWidget().getDisplay().asyncExec(new Runnable() {
return status;
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.core.runtime.jobs.Job#canceling()
}
/**
- * TMF event request for searching within trace.
+ * TMF event request for searching within trace.
*/
- protected class SearchEventRequest extends TmfEventRequest<TmfEvent> {
+ protected class SearchEventRequest extends TmfEventRequest<ITmfEvent> {
final private Criteria fCriteria;
private ITmfTimestamp fFoundTime = null;
/**
- * Constructor
+ * Constructor
* @param range @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#TmfEventRequest(...)
* @param nbRequested @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#handleData(...)
* @param blockSize @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#handleData(...)
/**
* Constructor
* @param range @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#TmfEventRequest(...)
- * @param nbRequested @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#TmfEventRequest(...)
+ * @param nbRequested @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#TmfEventRequest(...)
* @param blockSize @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#TmfEventRequest(...)
* @param execType @see org.eclipse.linuxtools.tmf.request.TmfEventRequest#TmfEventRequest(...)
* @param criteria The search criteria
* @param monitor progress monitor
*/
public SearchEventRequest(TmfTimeRange range, int nbRequested, int blockSize, ExecutionType execType, Criteria criteria, IProgressMonitor monitor) {
- super(TmfEvent.class, range, nbRequested, blockSize, execType);
+ super(ITmfEvent.class, range, nbRequested, blockSize, execType);
fCriteria = new Criteria(criteria);
fMonitor = monitor;
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.linuxtools.tmf.request.TmfDataRequest#handleData(org.eclipse.linuxtools.tmf.event.TmfData)
*/
@Override
- public void handleData(TmfEvent event) {
+ public void handleData(ITmfEvent event) {
super.handleData(event);
if ((fMonitor!= null) && fMonitor.isCanceled()) {
}
ITmfSyncSequenceDiagramEvent sdEvent = getSequnceDiagramEvent(event);
-
+
if (sdEvent != null) {
if (fCriteria.isLifeLineSelected()) {
* @param tmfEvent Event to parse for sequence diagram event details
* @return sequence diagram event if details are available else null
*/
- protected ITmfSyncSequenceDiagramEvent getSequnceDiagramEvent(TmfEvent tmfEvent){
+ protected ITmfSyncSequenceDiagramEvent getSequnceDiagramEvent(ITmfEvent tmfEvent){
//type = .*RECEIVE.* or .*SEND.*
//content = sender:<sender name>:receiver:<receiver name>,signal:<signal name>
String eventType = tmfEvent.getType().toString();
Object sender = tmfEvent.getContent().getField(Messages.TmfUml2SDSyncCloader_FieldSender);
Object receiver = tmfEvent.getContent().getField(Messages.TmfUml2SDSyncCloader_FieldReceiver);
Object name = tmfEvent.getContent().getField(Messages.TmfUml2SDSyncCloader_FieldSignal);
- if ((sender instanceof TmfEventField) && (receiver instanceof TmfEventField) && (name instanceof TmfEventField)) {
+ if ((sender instanceof ITmfEventField) && (receiver instanceof ITmfEventField) && (name instanceof ITmfEventField)) {
ITmfSyncSequenceDiagramEvent sdEvent = new TmfSyncSequenceDiagramEvent(tmfEvent,
- ((TmfEventField) sender).getValue().toString(),
- ((TmfEventField) receiver).getValue().toString(),
- ((TmfEventField) name).getValue().toString());
+ ((ITmfEventField) sender).getValue().toString(),
+ ((ITmfEventField) receiver).getValue().toString(),
+ ((ITmfEventField) name).getValue().toString());
return sdEvent;
}