blob: ae0d3470ea73eac607fd453ed7cc19c88ed35fe3 [file] [log] [blame]
/*******************************************************************************
* 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 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
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();
}
}