Bug 5085: Introduced MarkPropertiesBuilder to enable clear split between

api and implementation
This commit is contained in:
Steffen Jacobs committed 2019-08-08 18:04:31 +02:00
1 parent db8252aff3
commit 13e6ec7b0a
2 files changed
+81 -15

No files matched your search

@@ -201,7 +201,7 @@ import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.impl.MarkPropertiesImpl;
import com.sap.sailing.domain.coursetemplate.MarkPropertiesBuilder;
import com.sap.sailing.domain.leaderboard.DelayedLeaderboardCorrections;
import com.sap.sailing.domain.leaderboard.EventResolver;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
@@ -2602,12 +2602,12 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
@Override
public Iterable<MarkProperties> loadAllMarkProperties() {
List<MarkProperties> result = new ArrayList<>();
MongoCollection<Document> configurationCollection = database
final List<MarkProperties> result = new ArrayList<>();
final MongoCollection<Document> configurationCollection = database
.getCollection(CollectionNames.MARK_PROPERTIES.name());
try {
for (Document dbObject : configurationCollection.find()) {
MarkProperties entry = loadMarkPropertiesEntry(dbObject);
for (final Document dbObject : configurationCollection.find()) {
final MarkProperties entry = loadMarkPropertiesEntry(dbObject);
result.add(entry);
}
} catch (Exception e) {
@@ -2618,7 +2618,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
return result;
}
private MarkProperties loadMarkPropertiesEntry(Document dbObject) {
private MarkProperties loadMarkPropertiesEntry(final Document dbObject) {
final UUID id = UUID.fromString(dbObject.getString(FieldNames.MARK_PROPERTIES_ID));
final String name = dbObject.getString(FieldNames.MARK_PROPERTIES_NAME);
final String shortName = dbObject.getString(FieldNames.MARK_PROPERTIES_SHORT_NAME);
@@ -2631,26 +2631,26 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
final String storedColor = dbObject.getString(FieldNames.MARK_PROPERTIES_COLOR);
final Color color = AbstractColor.getCssColor(storedColor);
final MarkPropertiesImpl result = new MarkPropertiesImpl(id, name, shortName, color, shape, pattern, markType);
final Position fixedPosition = loadPosition(
dbObject.get(FieldNames.MARK_PROPERTIES_FIXED_POSITION, Document.class));
result.setFixedPosition(fixedPosition);
final BasicDBList tagsList = dbObject.get(FieldNames.MARK_PROPERTIES_TAGS, BasicDBList.class);
final Collection<String> tags = new ArrayList<>();
tagsList.forEach(t -> tags.add(t.toString()));
final MarkPropertiesBuilder builder = new MarkPropertiesBuilder(id, name, shortName, color, shape, pattern,
markType).withFixedPosition(fixedPosition).withTags(tags);
try {
final DeviceIdentifier deviceIdentifier = loadDeviceId(deviceIdentifierServiceFinder,
dbObject.get(FieldNames.MARK_PROPERTIES_TRACKING_DEVICE_IDENTIFIER, Document.class));
result.setTrackingDeviceIdentifier(deviceIdentifier);
builder.withDeviceId(deviceIdentifier);
} catch (TransformationException | NoCorrespondingServiceRegisteredException e) {
logger.log(Level.WARNING, "Could not load deviceId for MarkProperties", e);
}
final BasicDBList tagsList = dbObject.get(FieldNames.MARK_PROPERTIES_TAGS, BasicDBList.class);
Collection<String> tags = new ArrayList<>();
tagsList.forEach(t -> tags.add(t.toString()));
result.setTags(tags);
return result;
return builder.build();
}
private DeviceConfiguration loadConfigurationEntry(Document dbObject) throws JsonDeserializationException, ParseException {
@@ -0,0 +1,66 @@
package com.sap.sailing.domain.coursetemplate;
import java.util.UUID;
import com.sap.sailing.domain.common.DeviceIdentifier;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.coursetemplate.impl.MarkPropertiesImpl;
import com.sap.sse.common.Color;
public class MarkPropertiesBuilder {
private final UUID id;
private final String name;
private final String shortName;
private final Color color;
private final String shape;
private final String pattern;
private final MarkType type;
private Iterable<String> tags;
private DeviceIdentifier deviceId;
private Position position;
public MarkPropertiesBuilder(UUID id, String name, String shortName, Color color, String shape, String pattern,
MarkType type) {
this.id = id;
this.name = name;
this.shortName = shortName;
this.color = color;
this.shape = shape;
this.pattern = pattern;
this.type = type;
}
public MarkPropertiesBuilder withTags(Iterable<String> tags) {
this.tags = tags;
return this;
}
public MarkPropertiesBuilder withDeviceId(DeviceIdentifier deviceId) {
this.deviceId = deviceId;
return this;
}
public MarkPropertiesBuilder withFixedPosition(Position position) {
this.position = position;
return this;
}
public MarkProperties build() {
MarkPropertiesImpl impl = new MarkPropertiesImpl(id, name, shortName, color, shape, pattern, type);
if (tags != null) {
impl.setTags(tags);
}
if (deviceId != null) {
impl.setTrackingDeviceIdentifier(deviceId);
}
if (position != null) {
impl.setFixedPosition(position);
}
return impl;
}
}