diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index df05b412072..300a1e166ad 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -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 loadAllMarkProperties() { - List result = new ArrayList<>(); - MongoCollection configurationCollection = database + final List result = new ArrayList<>(); + final MongoCollection 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 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 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 { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/MarkPropertiesBuilder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/MarkPropertiesBuilder.java new file mode 100644 index 00000000000..149b1b7923f --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/MarkPropertiesBuilder.java @@ -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 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 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; + } + +}