+/*******************************************************************************
+ * Copyright (c) 2015 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:
+ * Marc-Andre Laperle - Initial API and implementation.
+ *******************************************************************************/
+package org.eclipse.tracecompass.internal.tmf.ui.project.handlers;
+
+import java.util.Iterator;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
+import org.eclipse.tracecompass.tmf.core.signal.TmfTraceRangeUpdatedSignal;
+import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
+import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Refresh the content of a trace in order to see new events.
+ */
+public class RefreshTraceContentHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ // Get the selection
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+ if (!(selection instanceof IStructuredSelection)) {
+ return null;
+ }
+ final Iterator<Object> iterator = ((IStructuredSelection) selection).iterator();
+
+ while (iterator.hasNext()) {
+ Object element = iterator.next();
+ if (element instanceof TmfTraceElement) {
+ TmfTraceElement trace = (TmfTraceElement) element;
+ refreshTrace(trace);
+
+ } else if (element instanceof TmfTraceFolder) {
+ TmfTraceFolder tmfTraceFolder = (TmfTraceFolder) element;
+ for (TmfTraceElement e : tmfTraceFolder.getTraces()) {
+ refreshTrace(e);
+ }
+ } else if (element instanceof ITmfEvent) {
+ ITmfEvent iTmfEvent = (ITmfEvent) element;
+ refreshTrace(iTmfEvent.getTrace());
+ }
+ }
+ return null;
+ }
+
+ private static void refreshTrace(TmfTraceElement t) {
+ final TmfTraceElement traceElement = t.getElementUnderTraceFolder();
+ ITmfTrace trace = traceElement.getTrace();
+ refreshTrace(trace);
+ }
+
+ private static void refreshTrace(ITmfTrace trace) {
+ TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
+ TmfTraceRangeUpdatedSignal signal = new TmfTraceRangeUpdatedSignal(trace, trace, range);
+ trace.broadcastAsync(signal);
+ }
+
+}