/*******************************************************************************
* Copyright (c) 2010, 2016 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:
* Patrick Tasse - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.views.timechart;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.filter.ITmfFilter;
import org.eclipse.tracecompass.tmf.core.resources.ITmfMarker;
/**
* Provider for decorations in the time chart view
*
* @version 1.0
* @author Patrick Tasse
*/
public class TimeChartDecorationProvider {
private final IFile fBookmarksFile;
private final Set<Long> fBookmarksSet = new HashSet<>();
private ITmfFilter fFilterFilter;
private ITmfFilter fSearchFilter;
/**
* Constructor
*
* @param bookmarksFile
* Bookmark file associated with the trace
*/
public TimeChartDecorationProvider(IFile bookmarksFile) {
fBookmarksFile = bookmarksFile;
refreshBookmarks();
}
/**
* Retrieve the bookmark file that was assigned to this provider
*
* @return The bookmark file
*/
public IFile getBookmarksFile() {
return fBookmarksFile;
}
/**
* Verify if the selected rank has a bookmark assigned to it.
*
* @param rank
* The rank to check for
* @return If there is a bookmark there
*/
public boolean isBookmark(long rank) {
return fBookmarksSet.contains(rank);
}
/**
* Refresh the bookmark display.
*/
public void refreshBookmarks() {
try {
fBookmarksSet.clear();
if (fBookmarksFile == null) {
return;
}
for (IMarker bookmark : fBookmarksFile.findMarkers(
IMarker.BOOKMARK, false, IResource.DEPTH_ZERO)) {
/* try location as an integer for backward compatibility */
long rank = bookmark.getAttribute(IMarker.LOCATION, -1);
if (rank == -1) {
String rankString = bookmark.getAttribute(ITmfMarker.MARKER_RANK, (String) null);
try {
rank = Long.parseLong(rankString);
} catch (NumberFormatException e) {
/* ignored */
}
}
if (rank != -1) {
fBookmarksSet.add(rank);
}
}
} catch (CoreException e) {
Activator.getDefault().logError("Error refreshing bookmarks", e); //$NON-NLS-1$
}
}
/**
* Notify that a filter is now applied on the view.
*
* @param filter
* The filter that was applied
*/
public void filterApplied(ITmfFilter filter) {
fFilterFilter = filter;
}
/**
* Check if an event is currently visible in the view or not.
*
* @param event
* The event to check for
* @return If the event is visible or not
*/
public boolean isVisible(ITmfEvent event) {
if (fFilterFilter != null) {
return fFilterFilter.matches(event);
}
return true;
}
/**
* Notify that a search is applied on the view.
*
* @param filter
* The search filter that was applied
*/
public void searchApplied(ITmfFilter filter) {
fSearchFilter = filter;
}
/**
* Verify if the currently active search filter applies to the given event
* or not.
*
* @param event
* The event to check for
* @return If the event matches
*/
public boolean isSearchMatch(ITmfEvent event) {
if (fSearchFilter != null) {
return fSearchFilter.matches(event);
}
return false;
}
}