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 / LamiTableEntryAspect.java
diff --git a/analysis/org.eclipse.tracecompass.analysis.lami.core/src/org/eclipse/tracecompass/internal/provisional/analysis/lami/core/aspect/LamiTableEntryAspect.java b/analysis/org.eclipse.tracecompass.analysis.lami.core/src/org/eclipse/tracecompass/internal/provisional/analysis/lami/core/aspect/LamiTableEntryAspect.java
new file mode 100644 (file)
index 0000000..a070562
--- /dev/null
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * 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.Nullable;
+import org.eclipse.tracecompass.internal.provisional.analysis.lami.core.module.LamiTableEntry;
+
+/**
+ * Aspect for LAMI table entries, which normally correspond to one "row"
+ * of JSON output.
+ *
+ * It is not the same as a "Event aspect" used for trace events, but it is
+ * heavily inspired from it.
+ *
+ * @author Alexandre Montplaisir
+ * @see org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect
+ */
+public abstract class LamiTableEntryAspect {
+
+    private final String fName;
+    private final @Nullable String fUnits;
+
+    /**
+     * Constructor
+     *
+     * @param name
+     *            Aspect name, will be used as column name in the UI
+     * @param units
+     *            The units of the value in this column
+     */
+    protected LamiTableEntryAspect(String name, @Nullable String units) {
+        fUnits = units;
+        fName = name;
+    }
+
+    /**
+     * Get the label of this aspect.
+     *
+     * The label is composed of the name followed by the units in parentheses.
+     *
+     * @return The label
+     */
+    public String getLabel() {
+        if (getUnits() == null) {
+            return getName();
+        }
+        return (getName() + " (" + getUnits() + ')'); //$NON-NLS-1$
+    }
+
+    /**
+     * Get the name of this aspect
+     *
+     * @return The name
+     */
+    public String getName() {
+        return fName;
+    }
+
+    /**
+     * Get the units of this aspect.
+     *
+     * @return The units
+     */
+    public @Nullable String getUnits() {
+        return fUnits;
+    }
+
+    /**
+     * Indicate if this aspect is numerical or not. This is used, among other
+     * things, to align the text in the table cells.
+     *
+     * @return If this aspect is numerical or not
+     */
+    public abstract boolean isContinuous();
+
+
+    /**
+     * Indicate if this aspect represent timestamp or not. This can be used in chart
+     * for axis labeling etc.
+     * @return  If this aspect represent a timestamp or not
+     */
+    public abstract boolean isTimeStamp();
+
+    /**
+     * Indicate if this aspect represent a time duration or not. This can be used in
+     * chart for axis labeling etc.
+     * @return  If this aspect represent a time duration or not
+     */
+    public boolean isTimeDuration() {
+        return false;
+    }
+
+    /**
+     * Resolve this aspect for the given entry.
+     *
+     * @param entry
+     *            The table row
+     * @return The string to display for the given cell
+     */
+    public abstract @Nullable String resolveString(LamiTableEntry entry);
+
+    /**
+     * Resolve this aspect double representation for the given entry
+     *
+     * Returned value does not matter if isNumerical() is false.
+     *
+     * @param entry
+     *            The table row
+     * @return The double value for the given cell
+     */
+    public abstract @Nullable Double resolveDouble(LamiTableEntry entry);
+
+    /**
+     * Get the comparator that should be used to compare this entry (or table
+     * row) with the other rows in the table. This will be passed on to the
+     * table's content provider.
+     *
+     * @return The entry comparator
+     */
+    public abstract Comparator<LamiTableEntry> getComparator();
+
+    /**
+     * Check if an aspect have the same properties.
+     *
+     * FIXME:Might want to compare the units if necessary.
+     *
+     * @param aspect
+     *            The aspect to compare to
+     * @return If all aspect's properties are equal
+     */
+    public boolean arePropertiesEqual(LamiTableEntryAspect aspect) {
+        boolean timestamp = (this.isTimeStamp() == aspect.isTimeStamp());
+        boolean numerical = (this.isContinuous() == aspect.isContinuous());
+        return (timestamp && numerical);
+    }
+}
This page took 0.028192 seconds and 5 git commands to generate.