use of org.eclipse.tracecompass.tmf.core.event.lookup.ITmfSourceLookup in project tracecompass by tracecompass.
the class OpenSourceCodeAction method create.
/**
* Builder
*
* @param actionText
* "open" message recommended to be "lookup" if the location can be
* erroneous and open if it's accurate.
* @param sourceLookup
* the source code to lookup
* @param shell
* the parent shell for source file dialog
* @return an contribution item to open a callsite or null if invalid
*/
public static IContributionItem create(String actionText, ITmfSourceLookup sourceLookup, Shell shell) {
List<ITmfCallsite> cs = sourceLookup.getCallsites();
if (cs == null) {
return null;
}
List<ITmfCallsite> callsites = cs.stream().filter(callstack -> callstack.getLineNo() != null).collect(Collectors.toList());
if (callsites.isEmpty()) {
/* Not enough information to provide a full callsite */
return null;
}
if (callsites.size() == 1) {
return new ActionContributionItem(new OpenSourceCodeAction(actionText, callsites.get(0), shell));
}
MenuManager mgr = new MenuManager(actionText);
for (ITmfCallsite callsite : callsites) {
mgr.add(new OpenSourceCodeAction(callsite.toString(), callsite, shell));
}
return mgr;
}
use of org.eclipse.tracecompass.tmf.core.event.lookup.ITmfSourceLookup in project tracecompass by tracecompass.
the class TmfEventsTable method createPopupMenu.
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
/**
* Create a pop-up menu.
*/
private void createPopupMenu() {
final IAction copyAction = new Action(Messages.TmfEventsTable_CopyToClipboardActionText) {
@Override
public void run() {
ITmfTrace trace = fTrace;
if (trace == null || (fSelectedRank == -1 && fSelectedBeginRank == -1)) {
return;
}
List<TmfEventTableColumn> columns = new ArrayList<>();
for (int i : fTable.getColumnOrder()) {
TableColumn column = fTable.getColumns()[i];
// Omit the margin column and hidden columns
if (isVisibleEventColumn(column)) {
columns.add(fColumns.get(i));
}
}
long start = Math.min(fSelectedBeginRank, fSelectedRank);
long end = Math.max(fSelectedBeginRank, fSelectedRank);
final ITmfFilter filter = (ITmfFilter) fTable.getData(Key.FILTER_OBJ);
IRunnableWithProgress operation = new CopyToClipboardOperation(trace, filter, columns, start, end);
try {
PlatformUI.getWorkbench().getProgressService().busyCursorWhile(operation);
} catch (InvocationTargetException e) {
// $NON-NLS-1$
Activator.getDefault().logError("Invocation target exception copying to clipboard ", e);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
};
final IAction showTableAction = new Action(Messages.TmfEventsTable_ShowTableActionText) {
@Override
public void run() {
fTableComposite.setVisible(true);
fSashForm.layout();
}
};
final IAction hideTableAction = new Action(Messages.TmfEventsTable_HideTableActionText) {
@Override
public void run() {
fTableComposite.setVisible(false);
fSashForm.layout();
}
};
final IAction showRawAction = new Action(Messages.TmfEventsTable_ShowRawActionText) {
@Override
public void run() {
fRawViewer.setVisible(true);
fSashForm.layout();
final int index = fTable.getSelectionIndex();
if (index >= 1) {
fRawViewer.selectAndReveal(index - 1);
}
}
};
final IAction hideRawAction = new Action(Messages.TmfEventsTable_HideRawActionText) {
@Override
public void run() {
fRawViewer.setVisible(false);
fSashForm.layout();
}
};
final IAction openModelAction = new Action(Messages.TmfEventsTable_OpenModelActionText) {
@Override
public void run() {
final TableItem[] items = fTable.getSelection();
if (items.length != 1) {
return;
}
final TableItem item = items[0];
final Object eventData = item.getData();
if (eventData instanceof ITmfModelLookup) {
String modelURI = ((ITmfModelLookup) eventData).getModelUri();
if (modelURI != null) {
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IFile file = null;
final URI uri = URI.createURI(modelURI);
if (uri.isPlatformResource()) {
IPath path = new Path(uri.toPlatformString(true));
file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
} else if (uri.isFile() && !uri.isRelative()) {
file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(uri.toFileString()));
}
if (file != null) {
try {
/*
* create a temporary validation marker on the
* model file, remove it afterwards thus,
* navigation works with all model editors
* supporting the navigation to a marker
*/
IMarker marker = file.createMarker(EValidator.MARKER);
marker.setAttribute(EValidator.URI_ATTRIBUTE, modelURI);
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
IDE.openEditor(activePage, marker, OpenStrategy.activateOnOpen());
marker.delete();
} catch (CoreException e) {
TraceUtils.displayErrorMsg(e);
}
} else {
final Exception e = new FileNotFoundException('\'' + modelURI + '\'' + '\n' + Messages.TmfEventsTable_OpenModelUnsupportedURI);
TraceUtils.displayErrorMsg(e);
}
}
}
}
};
final IAction exportToTextAction = new Action(Messages.TmfEventsTable_Export_to_text) {
@Override
public void run() {
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
Object handlerServiceObject = activePage.getActiveEditor().getSite().getService(IHandlerService.class);
IHandlerService handlerService = (IHandlerService) handlerServiceObject;
Object cmdServiceObject = activePage.getActiveEditor().getSite().getService(ICommandService.class);
ICommandService cmdService = (ICommandService) cmdServiceObject;
try {
HashMap<String, Object> parameters = new HashMap<>();
Command command = cmdService.getCommand(ExportToTextCommandHandler.COMMAND_ID);
ParameterizedCommand cmd = ParameterizedCommand.generateCommand(command, parameters);
IEvaluationContext context = handlerService.getCurrentState();
List<TmfEventTableColumn> exportColumns = new ArrayList<>();
for (int i : fTable.getColumnOrder()) {
TableColumn column = fTable.getColumns()[i];
// Omit the margin column and hidden columns
if (isVisibleEventColumn(column)) {
exportColumns.add(fColumns.get(i));
}
}
context.addVariable(ExportToTextCommandHandler.TMF_EVENT_TABLE_COLUMNS_ID, exportColumns);
handlerService.executeCommandInContext(cmd, null, context);
} catch (ExecutionException | NotDefinedException | NotEnabledException | NotHandledException e) {
TraceUtils.displayErrorMsg(e);
}
}
};
final IAction addAsFilterAction = new Action(Messages.TmfEventsTable_AddAsFilterText) {
@Override
public void run() {
applySearchAsFilter();
}
};
final IAction clearFiltersAction = new Action(Messages.TmfEventsTable_ClearFiltersActionText) {
@Override
public void run() {
clearFilters();
}
};
final IAction collapseAction = new Action(Messages.TmfEventsTable_CollapseFilterMenuName) {
@Override
public void run() {
applyFilter(new TmfCollapseFilter());
}
};
final IAction synchronizeAction = new Action(Messages.TmfEventsTable_SynchronizeActionText, IAction.AS_CHECK_BOX) {
@Override
public void run() {
TmfTraceManager.getInstance().updateTraceContext(NonNullUtils.checkNotNull(fTrace), builder -> builder.setSynchronized(isChecked()));
}
};
class ToggleBookmarkAction extends Action {
Long fRank;
public ToggleBookmarkAction(final String text, final Long rank) {
super(text);
fRank = rank;
}
@Override
public void run() {
toggleBookmark(fRank);
}
}
fHeaderPopupMenuManager = new MenuManager();
fHeaderPopupMenuManager.setRemoveAllWhenShown(true);
fHeaderPopupMenuManager.addMenuListener(manager -> {
final Point point = fTable.toControl(fLastMenuCursorLocation);
TableColumn selectedColumn = fTable.getColumn(point);
if (selectedColumn != null && selectedColumn.getResizable()) {
fHeaderPopupMenuManager.add(createAutoFitAction(selectedColumn));
fHeaderPopupMenuManager.add(new Separator());
}
for (int index : fTable.getColumnOrder()) {
TableColumn column = fTable.getColumns()[index];
if (column.getData(Key.WIDTH) != null) {
fHeaderPopupMenuManager.add(createShowColumnAction(column));
}
}
fHeaderPopupMenuManager.add(new Separator());
fHeaderPopupMenuManager.add(createShowAllAction());
fHeaderPopupMenuManager.add(createResetAllAction());
});
fTablePopupMenuManager = new MenuManager();
fTablePopupMenuManager.setRemoveAllWhenShown(true);
fTablePopupMenuManager.addMenuListener(manager -> {
if (fTable.getSelectionIndices().length == 1 && fTable.getSelectionIndices()[0] == 0) {
// Right-click on header row
if (fHeaderState == HeaderState.SEARCH) {
fTablePopupMenuManager.add(addAsFilterAction);
}
return;
}
final Point point = fTable.toControl(fLastMenuCursorLocation);
final TableItem item = fTable.getSelection().length > 0 ? fTable.getSelection()[0] : null;
if (item != null) {
final Rectangle imageBounds = item.getImageBounds(0);
imageBounds.width = BOOKMARK_IMAGE.getBounds().width;
if (point.x <= (imageBounds.x + imageBounds.width)) {
// Right-click on left margin
final Long rank = (Long) item.getData(Key.RANK);
if ((rank != null) && (fBookmarksFile != null)) {
if (fBookmarksMap.containsKey(rank)) {
fTablePopupMenuManager.add(new ToggleBookmarkAction(Messages.TmfEventsTable_RemoveBookmarkActionText, rank));
} else {
fTablePopupMenuManager.add(new ToggleBookmarkAction(Messages.TmfEventsTable_AddBookmarkActionText, rank));
}
}
return;
}
}
// Right-click on table
if (fSelectedRank != -1 && fSelectedBeginRank != -1) {
fTablePopupMenuManager.add(copyAction);
fTablePopupMenuManager.add(new Separator());
}
if (fTable.isVisible() && fRawViewer.isVisible()) {
fTablePopupMenuManager.add(hideTableAction);
fTablePopupMenuManager.add(hideRawAction);
} else if (!fTable.isVisible()) {
fTablePopupMenuManager.add(showTableAction);
} else if (!fRawViewer.isVisible()) {
fTablePopupMenuManager.add(showRawAction);
}
fTablePopupMenuManager.add(exportToTextAction);
fTablePopupMenuManager.add(new Separator());
if (item != null) {
final Object data = item.getData();
Separator separator = null;
if (data instanceof ITmfSourceLookup) {
IContributionItem action = OpenSourceCodeAction.create(Messages.TmfSourceLookup_OpenSourceCodeActionText, (ITmfSourceLookup) data, fTable.getShell());
if (action != null) {
fTablePopupMenuManager.add(action);
separator = new Separator();
}
}
if (data instanceof ITmfModelLookup) {
ITmfModelLookup event2 = (ITmfModelLookup) data;
if (event2.getModelUri() != null) {
fTablePopupMenuManager.add(openModelAction);
separator = new Separator();
}
if (separator != null) {
fTablePopupMenuManager.add(separator);
}
}
}
/*
* Only show collapse filter if at least one trace can be
* collapsed.
*/
boolean isCollapsible = false;
if (fTrace != null) {
for (ITmfTrace trace1 : TmfTraceManager.getTraceSet(fTrace)) {
Class<? extends ITmfEvent> eventClass = trace1.getEventType();
isCollapsible = ITmfCollapsibleEvent.class.isAssignableFrom(eventClass);
if (isCollapsible) {
break;
}
}
}
if (isCollapsible && !fCollapseFilterEnabled) {
fTablePopupMenuManager.add(collapseAction);
fTablePopupMenuManager.add(new Separator());
}
fTablePopupMenuManager.add(clearFiltersAction);
final ITmfFilterTreeNode[] savedFilters = FilterManager.getSavedFilters();
if (savedFilters.length > 0) {
final MenuManager subMenu = new MenuManager(Messages.TmfEventsTable_ApplyPresetFilterMenuName);
for (final ITmfFilterTreeNode node : savedFilters) {
if (node instanceof TmfFilterNode) {
final TmfFilterNode filter = (TmfFilterNode) node;
subMenu.add(new Action(filter.getFilterName()) {
@Override
public void run() {
applyFilter(filter);
}
});
}
}
fTablePopupMenuManager.add(subMenu);
}
fTablePopupMenuManager.add(new Separator());
ITmfTrace trace2 = fTrace;
if (trace2 != null) {
synchronizeAction.setChecked(TmfTraceManager.getInstance().getTraceContext(trace2).isSynchronized());
fTablePopupMenuManager.add(synchronizeAction);
}
appendToTablePopupMenu(fTablePopupMenuManager, item);
});
fRawViewerPopupMenuManager = new MenuManager();
fRawViewerPopupMenuManager.setRemoveAllWhenShown(true);
fRawViewerPopupMenuManager.addMenuListener(manager -> {
if (fTable.isVisible() && fRawViewer.isVisible()) {
fRawViewerPopupMenuManager.add(hideTableAction);
fRawViewerPopupMenuManager.add(hideRawAction);
} else if (!fTable.isVisible()) {
fRawViewerPopupMenuManager.add(showTableAction);
} else if (!fRawViewer.isVisible()) {
fRawViewerPopupMenuManager.add(showRawAction);
}
appendToRawPopupMenu(fRawViewerPopupMenuManager);
});
fHeaderMenu = fHeaderPopupMenuManager.createContextMenu(fTable);
fTablePopup = fTablePopupMenuManager.createContextMenu(fTable);
fTable.setMenu(fTablePopup);
fRawTablePopup = fRawViewerPopupMenuManager.createContextMenu(fRawViewer);
fRawViewer.setMenu(fRawTablePopup);
}
use of org.eclipse.tracecompass.tmf.core.event.lookup.ITmfSourceLookup in project tracecompass by tracecompass.
the class AbstractSegmentStoreTableViewer method appendToTablePopupMenu.
@Override
protected void appendToTablePopupMenu(IMenuManager manager, IStructuredSelection sel) {
final ISegment segment = (ISegment) sel.getFirstElement();
if (segment != null) {
IAction gotoStartTime = new Action(Messages.SegmentStoreTableViewer_goToStartEvent) {
@Override
public void run() {
broadcast(new TmfSelectionRangeUpdatedSignal(AbstractSegmentStoreTableViewer.this, TmfTimestamp.fromNanos(segment.getStart()), TmfTimestamp.fromNanos(segment.getStart()), fTrace));
}
};
IAction gotoEndTime = new Action(Messages.SegmentStoreTableViewer_goToEndEvent) {
@Override
public void run() {
broadcast(new TmfSelectionRangeUpdatedSignal(AbstractSegmentStoreTableViewer.this, TmfTimestamp.fromNanos(segment.getEnd()), TmfTimestamp.fromNanos(segment.getEnd()), fTrace));
}
};
manager.add(gotoStartTime);
manager.add(gotoEndTime);
if (segment instanceof ITmfSourceLookup) {
IContributionItem openCallsiteAction = OpenSourceCodeAction.create(Messages.SegmentStoreTableViewer_lookup, (ITmfSourceLookup) segment, getTableViewer().getTable().getShell());
if (openCallsiteAction != null) {
manager.add(openCallsiteAction);
}
}
}
}
use of org.eclipse.tracecompass.tmf.core.event.lookup.ITmfSourceLookup in project tracecompass by tracecompass.
the class TmfEventPropertySource method getPropertyDescriptors.
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
List<IPropertyDescriptor> descriptors = new ArrayList<>();
/* Display basic event information */
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_TIMESTAMP, NAME_TIMESTAMP));
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_TYPE, NAME_TYPE));
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_TRACE, NAME_TRACE));
/* Display event fields */
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_CONTENT, NAME_CONTENT));
/* Display source lookup information, if the event supplies it */
if ((fEvent instanceof ITmfSourceLookup) && (((ITmfSourceLookup) fEvent).getCallsite() != null)) {
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_SOURCE_LOOKUP, NAME_SOURCE_LOOKUP));
}
/* Display Model URI information, if the event supplies it */
if ((fEvent instanceof ITmfModelLookup) && (((ITmfModelLookup) fEvent).getModelUri() != null)) {
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_MODEL_URI, NAME_MODEL_URI));
}
/* Display custom attributes, if available */
if (fEvent instanceof ITmfCustomAttributes) {
ITmfCustomAttributes event = (ITmfCustomAttributes) fEvent;
if (!event.listCustomAttributes().isEmpty()) {
descriptors.add(new ReadOnlyTextPropertyDescriptor(ID_CUSTOM_ATTRIBUTE, NAME_CUSTOM_ATTRIBUTES));
}
}
return descriptors.toArray(new IPropertyDescriptor[0]);
}
Aggregations