mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 06:49:56 +00:00
bug4614: introduced SortableMinMaxColumn to factor out the commonalities of columns sorted by absolute and real value
Change-Id: I10f0efbb1e63e694e4575b1322124cd8041e82db
This commit is contained in:
1 parent
69fe7755ca
commit
6a07cd7438
2 files changed
+96
-137
No files matched your search
+2
-137
@@ -9,11 +9,9 @@ import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.google.gwt.cell.client.AbstractCell;
|
||||
import com.google.gwt.cell.client.Cell.Context;
|
||||
import com.google.gwt.cell.client.DateCell;
|
||||
import com.google.gwt.cell.client.TextCell;
|
||||
import com.google.gwt.core.shared.GWT;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.i18n.shared.DateTimeFormat;
|
||||
import com.google.gwt.i18n.shared.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
@@ -42,14 +40,11 @@ import com.sap.sailing.gwt.ui.actions.GetManeuversForCompetitorsAction;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.ManeuverTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.controls.AbstractSortableColumnWithMinMax;
|
||||
import com.sap.sailing.gwt.ui.client.shared.controls.SortableColumn;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.HasStringAndDoubleValue;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel.LeaderBoardStyle;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.MinMaxRenderer;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.SortedCellTableWithStylableHeaders;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sse.common.TimeRange;
|
||||
@@ -82,8 +77,6 @@ public class ManeuverTablePanel extends AbstractCompositeComponent<ManeuverTable
|
||||
private final StringMessages stringMessages;
|
||||
private final CompetitorSelectionProvider competitorSelectionModel;
|
||||
|
||||
private final NumberFormat towDigitAccuracy = NumberFormatterFactory.getDecimalFormat(2);
|
||||
|
||||
private final SimplePanel contentPanel = new SimplePanel();
|
||||
private final Label importantMessageLabel = new Label();
|
||||
private final SortedCellTableWithStylableHeaders<ManeuverTableData> maneuverCellTable;
|
||||
@@ -174,71 +167,7 @@ public class ManeuverTablePanel extends AbstractCompositeComponent<ManeuverTable
|
||||
*/
|
||||
private SortableColumn<ManeuverTableData, String> createSortableAbsMinMaxColumn(
|
||||
Function<ManeuverTableData, Double> extractor, String title, String unit) {
|
||||
final SortableColumn<ManeuverTableData, String> col = new AbstractSortableColumnWithMinMax<ManeuverTableData, String>(
|
||||
new TextCell(), SortingOrder.ASCENDING) {
|
||||
final InvertibleComparator<ManeuverTableData> comparatorWithAbs = new InvertibleComparatorAdapter<ManeuverTableData>() {
|
||||
@Override
|
||||
public int compare(ManeuverTableData o1, ManeuverTableData o2) {
|
||||
Double o1v = extractor.apply(o1);
|
||||
Double o2v = extractor.apply(o2);
|
||||
if (o1v == null && o2v == null) {
|
||||
return 0;
|
||||
}
|
||||
if (o1v == null && o2v != null) {
|
||||
return -1;
|
||||
}
|
||||
if (o1v != null && o2v == null) {
|
||||
return 1;
|
||||
}
|
||||
return Double.compare(Math.abs(o1v), Math.abs(o2v));
|
||||
}
|
||||
};
|
||||
final HasStringAndDoubleValue<ManeuverTableData> dataProvider = new HasStringAndDoubleValue<ManeuverTableData>() {
|
||||
@Override
|
||||
public String getStringValueToRender(ManeuverTableData row) {
|
||||
Double value = extractor.apply(row);
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
return towDigitAccuracy.format(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDoubleValue(ManeuverTableData row) {
|
||||
Double value = extractor.apply(row);
|
||||
return value == null ? null : Math.abs(value);
|
||||
}
|
||||
};
|
||||
|
||||
final MinMaxRenderer<ManeuverTableData> renderer = new MinMaxRenderer<ManeuverTableData>(dataProvider, comparatorWithAbs);
|
||||
|
||||
@Override
|
||||
public InvertibleComparator<ManeuverTableData> getComparator() {
|
||||
return comparatorWithAbs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Context context, ManeuverTableData object, SafeHtmlBuilder sb) {
|
||||
renderer.render(context, object, title, sb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header<?> getHeader() {
|
||||
return new TextHeader(title + " [" + unit + "]");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValue(ManeuverTableData object) {
|
||||
return dataProvider.getStringValueToRender(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMinMax() {
|
||||
renderer.updateMinMax(maneuverCellTable.getDataProvider().getList());
|
||||
}
|
||||
};
|
||||
col.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
|
||||
return col;
|
||||
return new SortableMinMaxColumn(extractor, title, unit, maneuverCellTable.getDataProvider(), /* absolute */ true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -246,71 +175,7 @@ public class ManeuverTablePanel extends AbstractCompositeComponent<ManeuverTable
|
||||
*/
|
||||
private SortableColumn<ManeuverTableData, String> createSortableMinMaxColumn(
|
||||
Function<ManeuverTableData, Double> extractor, String title, String unit) {
|
||||
final SortableColumn<ManeuverTableData, String> col = new AbstractSortableColumnWithMinMax<ManeuverTableData, String>(
|
||||
new TextCell(), SortingOrder.ASCENDING) {
|
||||
final InvertibleComparator<ManeuverTableData> comparator = new InvertibleComparatorAdapter<ManeuverTableData>() {
|
||||
@Override
|
||||
public int compare(ManeuverTableData o1, ManeuverTableData o2) {
|
||||
Double o1v = extractor.apply(o1);
|
||||
Double o2v = extractor.apply(o2);
|
||||
if (o1v == null && o2v == null) {
|
||||
return 0;
|
||||
}
|
||||
if (o1v == null && o2v != null) {
|
||||
return -1;
|
||||
}
|
||||
if (o1v != null && o2v == null) {
|
||||
return 1;
|
||||
}
|
||||
return Double.compare(o1v, o2v);
|
||||
}
|
||||
};
|
||||
final HasStringAndDoubleValue<ManeuverTableData> dataProvider = new HasStringAndDoubleValue<ManeuverTableData>() {
|
||||
@Override
|
||||
public String getStringValueToRender(ManeuverTableData row) {
|
||||
Double value = extractor.apply(row);
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
return towDigitAccuracy.format(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDoubleValue(ManeuverTableData row) {
|
||||
Double value = extractor.apply(row);
|
||||
return value == null ? null : value;
|
||||
}
|
||||
};
|
||||
|
||||
final MinMaxRenderer<ManeuverTableData> renderer = new MinMaxRenderer<ManeuverTableData>(dataProvider, comparator);
|
||||
|
||||
@Override
|
||||
public InvertibleComparator<ManeuverTableData> getComparator() {
|
||||
return comparator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Context context, ManeuverTableData object, SafeHtmlBuilder sb) {
|
||||
renderer.render(context, object, title, sb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header<?> getHeader() {
|
||||
return new TextHeader(title + " [" + unit + "]");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValue(ManeuverTableData object) {
|
||||
return dataProvider.getStringValueToRender(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMinMax() {
|
||||
renderer.updateMinMax(maneuverCellTable.getDataProvider().getList());
|
||||
}
|
||||
};
|
||||
col.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
|
||||
return col;
|
||||
return new SortableMinMaxColumn(extractor, title, unit, maneuverCellTable.getDataProvider(), /* absolute */ false);
|
||||
}
|
||||
|
||||
private SortableColumn<ManeuverTableData, String> createManeuverTypeColumn() {
|
||||
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
package com.sap.sailing.gwt.ui.client.shared.racemap.maneuver;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.google.gwt.cell.client.Cell.Context;
|
||||
import com.google.gwt.cell.client.TextCell;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.user.cellview.client.Header;
|
||||
import com.google.gwt.user.cellview.client.TextHeader;
|
||||
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.sap.sailing.domain.common.InvertibleComparator;
|
||||
import com.sap.sailing.domain.common.SortingOrder;
|
||||
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
|
||||
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
||||
import com.sap.sailing.gwt.ui.client.shared.controls.AbstractSortableColumnWithMinMax;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.HasStringAndDoubleValue;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.MinMaxRenderer;
|
||||
|
||||
public class SortableMinMaxColumn extends AbstractSortableColumnWithMinMax<ManeuverTableData, String> {
|
||||
private final static NumberFormat TWO_DIGIT_ACCURACY = NumberFormatterFactory.getDecimalFormat(2);
|
||||
private final String title;
|
||||
private final String unit;
|
||||
|
||||
final InvertibleComparator<ManeuverTableData> comparator;
|
||||
|
||||
final HasStringAndDoubleValue<ManeuverTableData> dataProvider;
|
||||
|
||||
final MinMaxRenderer<ManeuverTableData> renderer;
|
||||
|
||||
final ListDataProvider<ManeuverTableData> maneuverTableListDataProvider;
|
||||
|
||||
public SortableMinMaxColumn(final Function<ManeuverTableData, Double> extractor, String title, String unit,
|
||||
ListDataProvider<ManeuverTableData> maneuverTableListDataProvider, boolean absolute) {
|
||||
super(new TextCell(), SortingOrder.ASCENDING);
|
||||
this.title = title;
|
||||
this.unit = unit;
|
||||
this.maneuverTableListDataProvider = maneuverTableListDataProvider;
|
||||
this.comparator = new InvertibleComparatorAdapter<ManeuverTableData>() {
|
||||
@Override
|
||||
public int compare(ManeuverTableData o1, ManeuverTableData o2) {
|
||||
Double o1v = extractor.apply(o1);
|
||||
Double o2v = extractor.apply(o2);
|
||||
return Comparator.nullsFirst((Double v1, Double v2)->Double.compare(absolute?Math.abs(v1):v1, absolute?Math.abs(v2):v2)).compare(o1v, o2v);
|
||||
}
|
||||
};
|
||||
this.dataProvider = new HasStringAndDoubleValue<ManeuverTableData>() {
|
||||
@Override
|
||||
public String getStringValueToRender(ManeuverTableData row) {
|
||||
Double value = extractor.apply(row);
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
return TWO_DIGIT_ACCURACY.format(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDoubleValue(ManeuverTableData row) {
|
||||
Double value = extractor.apply(row);
|
||||
return value == null ? null : value;
|
||||
}
|
||||
};
|
||||
|
||||
this.renderer = new MinMaxRenderer<ManeuverTableData>(dataProvider, comparator);
|
||||
this.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InvertibleComparator<ManeuverTableData> getComparator() {
|
||||
return comparator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Context context, ManeuverTableData object, SafeHtmlBuilder sb) {
|
||||
renderer.render(context, object, title, sb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Header<?> getHeader() {
|
||||
return new TextHeader(title + " [" + unit + "]");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValue(ManeuverTableData object) {
|
||||
return dataProvider.getStringValueToRender(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMinMax() {
|
||||
renderer.updateMinMax(maneuverTableListDataProvider.getList());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user