package org.ovirt.engine.ui.common.widget.table.column; import java.util.Comparator; import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; import org.ovirt.engine.ui.common.widget.renderer.RxTxRateRenderer; /** * Column for displaying Rx/Tx transfer rates. * * @param <T> * Table row data type. */ public abstract class AbstractRxTxRateColumn<T> extends AbstractRenderedTextColumn<T, Double[]> { public AbstractRxTxRateColumn() { super(new RxTxRateRenderer()); } @Override protected Double[] getRawValue(T object) { Double rate = object != null ? getRate(object) : null; Double speed = object != null ? getSpeed(object) : null; return new Double[] { rate, speed }; } /** * Returns the Rx/Tx transfer rate. */ protected abstract Double getRate(T object); /** * Returns the transfer speed. */ protected abstract Double getSpeed(T object); @Override public void makeSortable() { makeSortable(Comparator.comparing((T t) -> !RxTxRateRenderer.isEmpty(getValue(t))) .thenComparing(t -> !RxTxRateRenderer.isZero(getValue(t))) .thenComparing(t -> !RxTxRateRenderer.isSmall(getValue(t))) .thenComparing(this::getValue, new LexoNumericComparator())); } }