/******************************************************************************* * 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 Number resolveNumber(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); } @Override public String toString() { return getClass().getName() + ':' + ' ' + getName(); } }