analysis: introduce ISegmentStoreProvider
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.timing.ui / src / org / eclipse / tracecompass / analysis / timing / ui / views / segmentstore / density / AbstractSegmentStoreDensityViewer.java
index e5d7913d56e07390d56de16604bf91fab89c7c3c..6f4fd1f01cd94261acafefc7de55313a80981666 100644 (file)
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (c) 2015 Ericsson
+ * Copyright (c) 2015, 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
@@ -11,6 +11,7 @@ package org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.density;
 
 import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
 
+import java.text.Format;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -24,16 +25,17 @@ import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.tracecompass.analysis.timing.core.segmentstore.AbstractSegmentStoreAnalysisModule;
 import org.eclipse.tracecompass.analysis.timing.core.segmentstore.IAnalysisProgressListener;
+import org.eclipse.tracecompass.analysis.timing.core.segmentstore.ISegmentStoreProvider;
+import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.SubSecondTimeWithUnitFormat;
 import org.eclipse.tracecompass.common.core.NonNullUtils;
-import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.DensityTimeFormat;
 import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.MouseDragZoomProvider;
 import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.MouseSelectionProvider;
 import org.eclipse.tracecompass.internal.analysis.timing.ui.views.segmentstore.density.SimpleTooltipProvider;
 import org.eclipse.tracecompass.segmentstore.core.ISegment;
 import org.eclipse.tracecompass.segmentstore.core.ISegmentStore;
 import org.eclipse.tracecompass.segmentstore.core.SegmentComparators;
+import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
@@ -58,7 +60,7 @@ import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 
 /**
- * Displays the segment store analysis data in a density chart.
+ * Displays the segment store provider data in a density chart.
  *
  * @author Matthew Khouzam
  * @author Marc-Andre Laperle
@@ -67,7 +69,7 @@ import com.google.common.collect.Lists;
  */
 public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
 
-    private static final DensityTimeFormat DENSITY_TIME_FORMATTER = new DensityTimeFormat();
+    private static final Format DENSITY_TIME_FORMATTER = new SubSecondTimeWithUnitFormat();
     private static final RGB BAR_COLOR = new RGB(0x42, 0x85, 0xf4);
     private final Chart fChart;
     private final MouseDragZoomProvider fDragZoomProvider;
@@ -76,7 +78,7 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
 
     private @Nullable ITmfTrace fTrace;
     private @Nullable IAnalysisProgressListener fListener;
-    private @Nullable AbstractSegmentStoreAnalysisModule fAnalysisModule;
+    private @Nullable ISegmentStoreProvider fSegmentStoreProvider;
     private TmfTimeRange fCurrentTimeRange = TmfTimeRange.NULL_RANGE;
     private List<ISegmentStoreDensityViewerDataListener> fListeners;
 
@@ -94,8 +96,8 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
         fChart.getTitle().setVisible(false);
         fChart.getAxisSet().getXAxis(0).getTitle().setText(nullToEmptyString(Messages.AbstractSegmentStoreDensityViewer_TimeAxisLabel));
         fChart.getAxisSet().getYAxis(0).getTitle().setText(nullToEmptyString(Messages.AbstractSegmentStoreDensityViewer_CountAxisLabel));
-        fChart.getAxisSet().getXAxis(0).getGrid().setStyle(LineStyle.NONE);
-        fChart.getAxisSet().getYAxis(0).getGrid().setStyle(LineStyle.NONE);
+        fChart.getAxisSet().getXAxis(0).getGrid().setStyle(LineStyle.DOT);
+        fChart.getAxisSet().getYAxis(0).getGrid().setStyle(LineStyle.DOT);
 
         fDragZoomProvider = new MouseDragZoomProvider(this);
         fDragZoomProvider.register();
@@ -106,13 +108,13 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
     }
 
     /**
-     * Returns the segment store analysis module
+     * Returns the segment store provider
      *
      * @param trace
      *            The trace to consider
-     * @return the analysis module
+     * @return the
      */
-    protected @Nullable abstract AbstractSegmentStoreAnalysisModule getSegmentStoreAnalysisModule(ITmfTrace trace);
+    protected @Nullable abstract ISegmentStoreProvider getSegmentStoreProvider(ITmfTrace trace);
 
     @Nullable
     private static ITmfTrace getTrace() {
@@ -141,8 +143,9 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
             yOrigSeries[(int) xBox]++;
             minX = Math.min(minX, segment.getLength());
         }
+        double timeWidth = (double) maxLength / (double) width;
         for (int i = 0; i < width; i++) {
-            xOrigSeries[i] = i * maxLength / width;
+            xOrigSeries[i] = i * timeWidth;
         }
         double maxY = Double.MIN_VALUE;
         for (int i = 0; i < width; i++) {
@@ -199,21 +202,21 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
         computeDataAsync(fCurrentTimeRange, durationRange).thenAccept((data) -> applyData(data));
     }
 
-    private CompletableFuture<List<ISegment>> computeDataAsync(final TmfTimeRange timeRange, final Range durationRange) {
+    private CompletableFuture<@Nullable List<ISegment>> computeDataAsync(final TmfTimeRange timeRange, final Range durationRange) {
         return CompletableFuture.supplyAsync(() -> computeData(timeRange, durationRange));
     }
 
-    private @Nullable ArrayList<ISegment> computeData(final TmfTimeRange timeRange, final Range durationRange) {
-        final AbstractSegmentStoreAnalysisModule analysisModule = fAnalysisModule;
-        if (analysisModule == null) {
+    private @Nullable List<ISegment> computeData(final TmfTimeRange timeRange, final Range durationRange) {
+        final ISegmentStoreProvider segmentProvider = fSegmentStoreProvider;
+        if (segmentProvider == null) {
             return null;
         }
-        final ISegmentStore<ISegment> results = analysisModule.getResults();
-        if (results == null) {
+        final ISegmentStore<ISegment> segStore = segmentProvider.getSegmentStore();
+        if (segStore == null) {
             return null;
         }
 
-        Iterator<ISegment> intersectingElements = results.getIntersectingElements(timeRange.getStartTime().getValue(), timeRange.getEndTime().getValue()).iterator();
+        Iterator<ISegment> intersectingElements = segStore.getIntersectingElements(timeRange.getStartTime().getValue(), timeRange.getEndTime().getValue()).iterator();
 
         if (durationRange.lower > Double.MIN_VALUE || durationRange.upper < Double.MAX_VALUE) {
             Predicate<? super ISegment> predicate = new Predicate<ISegment>() {
@@ -222,7 +225,7 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
                     return input != null && input.getLength() >= durationRange.lower && input.getLength() <= durationRange.upper;
                 }
             };
-            intersectingElements = Iterators.<ISegment> filter(intersectingElements, predicate);
+            intersectingElements = Iterators.filter(intersectingElements, predicate);
         }
 
         return Lists.newArrayList(intersectingElements);
@@ -253,7 +256,7 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
         if (trace == null) {
             return;
         }
-        fAnalysisModule = getSegmentStoreAnalysisModule(trace);
+        fSegmentStoreProvider = getSegmentStoreProvider(trace);
         fCurrentTimeRange = NonNullUtils.checkNotNull(signal.getCurrentRange());
         updateWithRange(fCurrentTimeRange);
     }
@@ -269,8 +272,8 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
 
     @Override
     public void dispose() {
-        if (fAnalysisModule != null && fListener != null) {
-            fAnalysisModule.removeListener(fListener);
+        if (fSegmentStoreProvider != null && fListener != null) {
+            fSegmentStoreProvider.removeListener(fListener);
         }
         fDragZoomProvider.deregister();
         fTooltipProvider.deregister();
@@ -336,12 +339,14 @@ public abstract class AbstractSegmentStoreDensityViewer extends TmfViewer {
         fCurrentTimeRange = windowRange;
 
         if (trace != null) {
-            fAnalysisModule = getSegmentStoreAnalysisModule(trace);
-            final AbstractSegmentStoreAnalysisModule module = fAnalysisModule;
-            if (module != null) {
-                fListener = (activeAnalysis, data) -> updateWithRange(windowRange);
-                module.addListener(fListener);
-                module.schedule();
+            fSegmentStoreProvider = getSegmentStoreProvider(trace);
+            final ISegmentStoreProvider provider = fSegmentStoreProvider;
+            if (provider != null) {
+                fListener = (segmentProvider, data) -> updateWithRange(windowRange);
+                provider.addListener(fListener);
+                if( provider instanceof IAnalysisModule) {
+                    ((IAnalysisModule) provider).schedule();
+                }
             }
         }
         zoom(new Range(0, Long.MAX_VALUE));
This page took 0.039536 seconds and 5 git commands to generate.