Added domain factory awareness to BoatClass handling

This commit is contained in:
Vladislav Chumak committed 2018-11-21 17:25:25 +01:00
1 parent 0b640448bd
commit 2595fa5253
10 files changed
+31 -66

No files matched your search

@@ -9,7 +9,7 @@ import org.json.simple.JSONObject;
import org.junit.Test;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.common.BoatHullType;
import com.sap.sailing.domain.common.SpeedWithBearing;
import com.sap.sailing.domain.common.Wind;
@@ -24,8 +24,8 @@ import com.sap.sailing.domain.maneuverdetection.impl.CompleteManeuverCurveWithEs
import com.sap.sailing.domain.maneuverdetection.impl.ManeuverCurveWithUnstableCourseAndSpeedWithEstimationDataImpl;
import com.sap.sailing.domain.maneuverdetection.impl.ManeuverMainCurveWithEstimationDataImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.CompleteManeuverCurveWithEstimationDataJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DetailedBoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ManeuverCurveWithUnstableCourseAndSpeedWithEstimationDataJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ManeuverMainCurveWithEstimationDataJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ManeuverWindJsonDeserializer;
@@ -408,17 +408,16 @@ public class EstimationDataSerializationDeserializationTest {
@Test
public void testDetailedBoatClass() throws JsonDeserializationException {
String name = "bla";
boolean typicallyStartsUpwind = true;
String displayName = "A bla";
Distance hullLength = new MeterDistance(11);
Distance hullBeam = new MeterDistance(4.01);
BoatHullType hullType = BoatHullType.SURFERBOARD;
BoatClass boatClass = new BoatClassImpl(name, typicallyStartsUpwind, displayName, hullLength, hullBeam,
hullType);
BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true);
String name = boatClass.getName();
boolean typicallyStartsUpwind = boatClass.typicallyStartsUpwind();
String displayName = boatClass.getDisplayName();
Distance hullLength = boatClass.getHullLength();
Distance hullBeam = boatClass.getHullBeam();
BoatHullType hullType = boatClass.getHullType();
DetailedBoatClassJsonSerializer serializer = new DetailedBoatClassJsonSerializer();
JSONObject json = serializer.serialize(boatClass);
DetailedBoatClassJsonDeserializer deserializer = new DetailedBoatClassJsonDeserializer();
BoatClassJsonDeserializer deserializer = new BoatClassJsonDeserializer(DomainFactory.INSTANCE);
BoatClass deserialized = deserializer.deserialize(json);
assertEquals(name, deserialized.getName());
assertEquals(typicallyStartsUpwind, deserialized.typicallyStartsUpwind());
@@ -426,6 +425,7 @@ public class EstimationDataSerializationDeserializationTest {
assertEquals(hullLength, deserialized.getHullLength());
assertEquals(hullBeam, deserialized.getHullBeam());
assertEquals(hullType, deserialized.getHullType());
assertEquals(boatClass, deserialized);
}
}
@@ -1,33 +0,0 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.common.BoatHullType;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.BoatClassJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.DetailedBoatClassJsonSerializer;
/**
*
* @author Vladislav Chumak (D069712)
*
*/
public class DetailedBoatClassJsonDeserializer implements JsonDeserializer<BoatClass> {
@Override
public BoatClass deserialize(JSONObject object) throws JsonDeserializationException {
String name = (String) object.get(BoatClassJsonSerializer.FIELD_NAME);
Boolean typicallyStartsUpwind = (Boolean) object.get(BoatClassJsonSerializer.FIELD_TYPICALLY_STARTS_UPWIND);
String displayName = (String) object.get(DetailedBoatClassJsonSerializer.DISPLAY_NAME);
Double hullLengthInMeters = (Double) object.get(DetailedBoatClassJsonSerializer.HULL_LENGTH_IN_METERS);
Double hullBeamInMeters = (Double) object.get(DetailedBoatClassJsonSerializer.HULL_BEAM_IN_METERS);
String hullType = (String) object.get(DetailedBoatClassJsonSerializer.HULL_TYPE);
return new BoatClassImpl(name, typicallyStartsUpwind, displayName, new MeterDistance(hullLengthInMeters),
new MeterDistance(hullBeamInMeters), BoatHullType.valueOf(hullType));
}
}
@@ -1,7 +0,0 @@
package com.sap.sailing.windestimation.data.deserializer;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
public interface CompetitorTrackElementsJsonDeserializer<T> extends JsonDeserializer<T> {
}
@@ -12,7 +12,7 @@ import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DetailedBoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorTrackWithEstimationDataJsonSerializer;
import com.sap.sailing.windestimation.data.CompetitorTrackWithEstimationData;
import com.sap.sse.common.Distance;
@@ -22,11 +22,10 @@ public class CompetitorTrackWithEstimationDataJsonDeserializer<T>
implements JsonDeserializer<CompetitorTrackWithEstimationData<T>> {
private final JSONParser jsonParser = new JSONParser();
private final DetailedBoatClassJsonDeserializer boatClassJsonDeserializer;
private final BoatClassJsonDeserializer boatClassJsonDeserializer;
private final JsonDeserializer<T> competitorTrackElementsJsonDeserializer;
public CompetitorTrackWithEstimationDataJsonDeserializer(
DetailedBoatClassJsonDeserializer boatClassJsonDeserializer,
public CompetitorTrackWithEstimationDataJsonDeserializer(BoatClassJsonDeserializer boatClassJsonDeserializer,
JsonDeserializer<T> competitorTrackElementsJsonDeserializer) {
this.boatClassJsonDeserializer = boatClassJsonDeserializer;
this.competitorTrackElementsJsonDeserializer = competitorTrackElementsJsonDeserializer;
@@ -3,12 +3,13 @@ package com.sap.sailing.windestimation.data.deserializer;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
import com.sap.sailing.domain.common.impl.WindImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DetailedBoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.windestimation.classifier.maneuver.ManeuverTypeForInternalClassification;
import com.sap.sailing.windestimation.data.LabelledManeuverForEstimation;
import com.sap.sailing.windestimation.data.ManeuverCategory;
@@ -18,7 +19,7 @@ import com.sap.sse.common.impl.MillisecondsTimePoint;
public class ManeuverForEstimationJsonDeserializer implements JsonDeserializer<ManeuverForEstimation> {
private final DetailedBoatClassJsonDeserializer boatClassDeserializer = new DetailedBoatClassJsonDeserializer();
private final BoatClassJsonDeserializer boatClassDeserializer = new BoatClassJsonDeserializer(DomainFactory.INSTANCE);
@Override
public ManeuverForEstimation deserialize(JSONObject object) throws JsonDeserializationException {
@@ -2,9 +2,10 @@ package com.sap.sailing.windestimation.data.persistence.maneuver;
import java.net.UnknownHostException;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.maneuverdetection.CompleteManeuverCurveWithEstimationData;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.CompleteManeuverCurveWithEstimationDataJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DetailedBoatClassJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ManeuverCurveWithUnstableCourseAndSpeedWithEstimationDataJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ManeuverMainCurveWithEstimationDataJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.ManeuverWindJsonDeserializer;
@@ -33,7 +34,7 @@ public class RaceWithCompleteManeuverCurvePersistenceManager
new ManeuverMainCurveWithEstimationDataJsonDeserializer(),
new ManeuverCurveWithUnstableCourseAndSpeedWithEstimationDataJsonDeserializer(),
new ManeuverWindJsonDeserializer(), new PositionJsonDeserializer());
DetailedBoatClassJsonDeserializer boatClassDeserializer = new DetailedBoatClassJsonDeserializer();
BoatClassJsonDeserializer boatClassDeserializer = new BoatClassJsonDeserializer(DomainFactory.INSTANCE);
return new CompetitorTrackWithEstimationDataJsonDeserializer<>(boatClassDeserializer,
completeManeuverCurveDeserializer);
}
@@ -2,11 +2,11 @@ package com.sap.sailing.windestimation.data.persistence.maneuver;
import java.net.UnknownHostException;
import com.sap.sailing.server.gateway.deserialization.impl.DetailedBoatClassJsonDeserializer;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.windestimation.data.ManeuverForDataAnalysis;
import com.sap.sailing.windestimation.data.deserializer.CompetitorTrackWithEstimationDataJsonDeserializer;
import com.sap.sailing.windestimation.data.deserializer.ManeuverForDataAnalysisJsonDeserializer;
import com.sap.sailing.windestimation.data.persistence.maneuver.AbstractRaceWithEstimationDataPersistenceManager;
/**
*
@@ -27,7 +27,7 @@ public class RaceWithManeuverForDataAnalysisPersistenceManager
@Override
public CompetitorTrackWithEstimationDataJsonDeserializer<ManeuverForDataAnalysis> getNewCompetitorTrackWithEstimationDataJsonDeserializer() {
ManeuverForDataAnalysisJsonDeserializer maneuverForClassificationJsonDeserializer = new ManeuverForDataAnalysisJsonDeserializer();
DetailedBoatClassJsonDeserializer boatClassDeserializer = new DetailedBoatClassJsonDeserializer();
BoatClassJsonDeserializer boatClassDeserializer = new BoatClassJsonDeserializer(DomainFactory.INSTANCE);
return new CompetitorTrackWithEstimationDataJsonDeserializer<>(boatClassDeserializer,
maneuverForClassificationJsonDeserializer);
}
@@ -2,11 +2,11 @@ package com.sap.sailing.windestimation.data.persistence.maneuver;
import java.net.UnknownHostException;
import com.sap.sailing.server.gateway.deserialization.impl.DetailedBoatClassJsonDeserializer;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.server.gateway.deserialization.impl.BoatClassJsonDeserializer;
import com.sap.sailing.windestimation.data.ManeuverForEstimation;
import com.sap.sailing.windestimation.data.deserializer.CompetitorTrackWithEstimationDataJsonDeserializer;
import com.sap.sailing.windestimation.data.deserializer.ManeuverForEstimationJsonDeserializer;
import com.sap.sailing.windestimation.data.persistence.maneuver.AbstractRaceWithEstimationDataPersistenceManager;
/**
*
@@ -27,7 +27,7 @@ public class RaceWithManeuverForEstimationPersistenceManager
@Override
public CompetitorTrackWithEstimationDataJsonDeserializer<ManeuverForEstimation> getNewCompetitorTrackWithEstimationDataJsonDeserializer() {
ManeuverForEstimationJsonDeserializer maneuverForEstimationJsonDeserializer = new ManeuverForEstimationJsonDeserializer();
DetailedBoatClassJsonDeserializer boatClassDeserializer = new DetailedBoatClassJsonDeserializer();
BoatClassJsonDeserializer boatClassDeserializer = new BoatClassJsonDeserializer(DomainFactory.INSTANCE);
return new CompetitorTrackWithEstimationDataJsonDeserializer<>(boatClassDeserializer,
maneuverForEstimationJsonDeserializer);
}
@@ -5,6 +5,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.polars.PolarDataService;
import com.sap.sailing.polars.impl.PolarDataServiceImpl;
import com.sap.sailing.windestimation.data.importer.PolarDataImporter;
@@ -17,6 +18,7 @@ public class PolarDataServiceAccessUtil {
public static PolarDataService getPersistedPolarService()
throws MalformedURLException, IOException, InterruptedException, ClassNotFoundException {
PolarDataServiceImpl polarService = new PolarDataServiceImpl();
polarService.registerDomainFactory(DomainFactory.INSTANCE);
polarService.clearReplicaState();
FileInputStream fileInputStream = new FileInputStream(new File(PolarDataImporter.polarDataFilePath));
polarService.initiallyFillFrom(fileInputStream);
@@ -7,6 +7,7 @@ import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.windestimation.classifier.AbstractManeuverClassificationModel;
import com.sap.sailing.windestimation.classifier.ClassifierPersistenceException;
import com.sap.sailing.windestimation.classifier.ContextSpecificModelMetadata;
@@ -104,7 +105,8 @@ public abstract class AbstractSmileManeuverClassificationModel<InstanceType, T e
@Override
public ModelMetadata<?, ?> loadFromStream(InputStream input) throws ClassifierPersistenceException {
try (ObjectInputStream deserializer = new ObjectInputStream(input)) {
try (ObjectInputStream deserializer = DomainFactory.INSTANCE
.createObjectInputStreamResolvingAgainstThisFactory(input)) {
@SuppressWarnings("unchecked")
AbstractSmileManeuverClassificationModel<InstanceType, ContextSpecificModelMetadata<InstanceType>> loadedModel = (AbstractSmileManeuverClassificationModel<InstanceType, ContextSpecificModelMetadata<InstanceType>>) deserializer
.readObject();