Implemented generic field access for BravoExtendedFixImpl by refactoring

most of the logic to a newly created SensorFixImpl
This commit is contained in:
Steffen Schaefer committed 2017-10-17 09:02:35 +02:00
1 parent 4f4d9a8792
commit ff84262672
6 files changed
+74 -19

No files matched your search

@@ -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"), //
@@ -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"), //
@@ -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();
}
@@ -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());
@@ -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
@@ -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);
}