From ff8426267253b9c8eae46397a582274af826cfd9 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Tue, 17 Oct 2017 09:02:35 +0200 Subject: [PATCH] Implemented generic field access for BravoExtendedFixImpl by refactoring most of the logic to a newly created SensorFixImpl --- .../BravoExtendedSensorDataMetadata.java | 2 +- .../sensordata/BravoSensorDataMetadata.java | 2 +- .../common/sensordata/ColumnMetadata.java | 12 +++++ .../tracking/impl/BravoExtendedFixImpl.java | 10 +++++ .../common/tracking/impl/BravoFixImpl.java | 23 +++------- .../common/tracking/impl/SensorFixImpl.java | 44 +++++++++++++++++++ 6 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/ColumnMetadata.java create mode 100644 java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/SensorFixImpl.java diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoExtendedSensorDataMetadata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoExtendedSensorDataMetadata.java index f92f94ccf56..e4182e242db 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoExtendedSensorDataMetadata.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoExtendedSensorDataMetadata.java @@ -13,7 +13,7 @@ import java.util.Objects; * * The first columns need to be consistent with {@link BravoSensorDataMetadata}. */ -public enum BravoExtendedSensorDataMetadata { +public enum BravoExtendedSensorDataMetadata implements ColumnMetadata { RIDE_HEIGHT_PORT_HULL("RideHeightPort"), // RIDE_HEIGHT_STBD_HULL("RideHeightStbd"), // HEEL("Heel"), // diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoSensorDataMetadata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoSensorDataMetadata.java index 9f9e112d48d..ff0bf3ab939 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoSensorDataMetadata.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/BravoSensorDataMetadata.java @@ -11,7 +11,7 @@ import java.util.Objects; * * The current implementation only stores a subset of the information available during the import. */ -public enum BravoSensorDataMetadata { +public enum BravoSensorDataMetadata implements ColumnMetadata { RIDE_HEIGHT_PORT_HULL("RideHeightPortHull"), // RIDE_HEIGHT_STBD_HULL("RideHeightStbdHull"), // diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/ColumnMetadata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/ColumnMetadata.java new file mode 100644 index 00000000000..3c995a69384 --- /dev/null +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/sensordata/ColumnMetadata.java @@ -0,0 +1,12 @@ +package com.sap.sailing.domain.common.sensordata; + +import com.sap.sailing.domain.common.tracking.DoubleVectorFix; +import com.sap.sailing.domain.common.tracking.SensorFix; + +/** + * Definition of column metadata used by {@link SensorFix} implementations to resolve columns in underlying + * {@link DoubleVectorFix DoubleVectorFixes}. + */ +public interface ColumnMetadata { + int getColumnIndex(); +} diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoExtendedFixImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoExtendedFixImpl.java index 1c32c3ae0f5..7b9c6bae80c 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoExtendedFixImpl.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoExtendedFixImpl.java @@ -3,9 +3,14 @@ package com.sap.sailing.domain.common.tracking.impl; import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.sensordata.BravoExtendedSensorDataMetadata; +import com.sap.sailing.domain.common.sensordata.ColumnMetadata; import com.sap.sailing.domain.common.tracking.BravoExtendedFix; +import com.sap.sailing.domain.common.tracking.BravoFix; import com.sap.sailing.domain.common.tracking.DoubleVectorFix; +/** + * Implementation of {@link BravoExtendedFix}. {@link BravoExtendedFix} adds more measures compared to {@link BravoFix}. + */ public class BravoExtendedFixImpl extends BravoFixImpl implements BravoExtendedFix { private static final long serialVersionUID = 5622321493028301922L; @@ -13,6 +18,11 @@ public class BravoExtendedFixImpl extends BravoFixImpl implements BravoExtendedF super(fix); } + @Override + protected ColumnMetadata resolveMetadataFromValueName(String valueName) { + return BravoExtendedSensorDataMetadata.byColumnName(valueName); + } + @Override public double getPortDaggerboardRake() { return fix.get(BravoExtendedSensorDataMetadata.DB_RAKE_PORT.getColumnIndex()); diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoFixImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoFixImpl.java index ca8bcec9f48..605ee7b5ca3 100644 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoFixImpl.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/BravoFixImpl.java @@ -5,35 +5,24 @@ import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.domain.common.impl.MeterDistance; import com.sap.sailing.domain.common.sensordata.BravoSensorDataMetadata; +import com.sap.sailing.domain.common.sensordata.ColumnMetadata; import com.sap.sailing.domain.common.tracking.BravoFix; import com.sap.sailing.domain.common.tracking.DoubleVectorFix; -import com.sap.sse.common.TimePoint; /** * Implementation of {@link BravoFix} that wraps a {@link DoubleVectorFix} which holds the actual sensor data. The * mapping metadata is stored in the {@link BravoSensorDataMetadata} enum. */ -public class BravoFixImpl implements BravoFix { +public class BravoFixImpl extends SensorFixImpl implements BravoFix { private static final long serialVersionUID = 2033254212013221160L; - protected final DoubleVectorFix fix; public BravoFixImpl(DoubleVectorFix fix) { - this.fix = fix; + super(fix); } - + @Override - public double get(String valueName) { - BravoSensorDataMetadata colDefEnum = BravoSensorDataMetadata.byColumnName(valueName); - if (colDefEnum == null) { - throw new IllegalArgumentException("Unknown value \"" + valueName + "\" for " + getClass().getSimpleName()); - } - int index = colDefEnum.getColumnIndex(); - return fix.get(index); - } - - @Override - public TimePoint getTimePoint() { - return fix.getTimePoint(); + protected ColumnMetadata resolveMetadataFromValueName(String valueName) { + return BravoSensorDataMetadata.byColumnName(valueName); } @Override diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/SensorFixImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/SensorFixImpl.java new file mode 100644 index 00000000000..b25d68eda28 --- /dev/null +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/tracking/impl/SensorFixImpl.java @@ -0,0 +1,44 @@ +package com.sap.sailing.domain.common.tracking.impl; + +import com.sap.sailing.domain.common.sensordata.ColumnMetadata; +import com.sap.sailing.domain.common.tracking.DoubleVectorFix; +import com.sap.sailing.domain.common.tracking.SensorFix; +import com.sap.sse.common.TimePoint; + +/** + * Abstract implementation of {@link SensorFix} that implements the generic value access through + * {@link SensorFixImpl#get(String)} by resolving a {@link ColumnMetadata} instance for a given valueName. The data is + * taken from the underlying {@link DoubleVectorFix} by using the column index taken from the resolved + * {@link ColumnMetadata} instance. + */ +public abstract class SensorFixImpl implements SensorFix { + private static final long serialVersionUID = -5815764620564953478L; + protected final DoubleVectorFix fix; + + public SensorFixImpl(DoubleVectorFix fix) { + super(); + assert fix != null; + this.fix = fix; + } + + @Override + public TimePoint getTimePoint() { + return fix.getTimePoint(); + } + + @Override + public double get(String valueName) { + final ColumnMetadata columnMetadata = resolveMetadataFromValueName(valueName); + if (columnMetadata == null) { + throw new IllegalArgumentException("Unknown value \"" + valueName + "\" for " + getClass().getSimpleName()); + } + int index = columnMetadata.getColumnIndex(); + return fix.get(index); + } + + /** + * To be implemented by subclasses to resolve the associated {@link ColumnMetadata} for a given valueName. The + * result may be null if the given valueName is unknown for the fix implementation. + */ + protected abstract ColumnMetadata resolveMetadataFromValueName(String valueName); +}