analysis.lami: Implementation of LAMI plugins
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.lami.core / src / org / eclipse / tracecompass / internal / provisional / analysis / lami / core / aspect / LamiTimeRangeDurationAspect.java
diff --git a/analysis/org.eclipse.tracecompass.analysis.lami.core/src/org/eclipse/tracecompass/internal/provisional/analysis/lami/core/aspect/LamiTimeRangeDurationAspect.java b/analysis/org.eclipse.tracecompass.analysis.lami.core/src/org/eclipse/tracecompass/internal/provisional/analysis/lami/core/aspect/LamiTimeRangeDurationAspect.java
new file mode 100644 (file)
index 0000000..6b1fe35
--- /dev/null
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2015, 2016 EfficiOS Inc., Alexandre Montplaisir
+ *
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.internal.provisional.analysis.lami.core.aspect;
+
+import java.util.Comparator;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.internal.provisional.analysis.lami.core.module.LamiTableEntry;
+import org.eclipse.tracecompass.internal.provisional.analysis.lami.core.types.LamiData;
+import org.eclipse.tracecompass.internal.provisional.analysis.lami.core.types.LamiTimeRange;
+
+/**
+ * Aspect for a time range duration
+ *
+ * @author Alexandre Montplaisir
+ */
+public class LamiTimeRangeDurationAspect extends LamiTableEntryAspect {
+
+    private final int fColIndex;
+
+    /**
+     * Constructor
+     *
+     * @param timeRangeName
+     *            Name of the time range
+     * @param colIndex
+     *            Column index
+     */
+    public LamiTimeRangeDurationAspect(String timeRangeName, int colIndex) {
+        super(timeRangeName + " (" + Messages.LamiAspect_TimeRangeDuration + ')', "ns"); //$NON-NLS-1$ //$NON-NLS-2$
+        fColIndex = colIndex;
+    }
+
+    @Override
+    public boolean isContinuous() {
+        return true;
+    }
+
+    @Override
+    public boolean isTimeStamp() {
+        return false;
+    }
+
+    @Override
+    public boolean isTimeDuration() {
+        return true;
+    }
+
+    @Override
+    public @Nullable String resolveString(LamiTableEntry entry) {
+        LamiData data = entry.getValue(fColIndex);
+        if (data instanceof LamiTimeRange) {
+            LamiTimeRange range = (LamiTimeRange) data;
+            return String.valueOf(range.getDuration());
+        }
+        return data.toString();
+    }
+
+    @Override
+    public @Nullable Double resolveDouble(@NonNull LamiTableEntry entry) {
+        LamiData data = entry.getValue(fColIndex);
+        if (data instanceof LamiTimeRange) {
+            LamiTimeRange range = (LamiTimeRange) data;
+            return Double.valueOf(range.getDuration());
+        }
+        return null;
+    }
+
+    @Override
+    public Comparator<LamiTableEntry> getComparator() {
+        return (o1, o2) -> {
+            Double dO1 = resolveDouble(o1);
+            Double dO2 = resolveDouble(o2);
+            if (dO1 == null || dO2 == null) {
+                return 0;
+            }
+
+            return dO1.compareTo(dO2);
+        };
+    }
+
+}
This page took 0.028466 seconds and 5 git commands to generate.