From db8252aff3a04446b2af8d41de6fc917029a7417 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Thu, 8 Aug 2019 17:47:09 +0200 Subject: [PATCH] Bug 5085: Added loading + improved storing capabilities for MarkProperties --- .../persistence/DomainObjectFactory.java | 3 + .../impl/DomainObjectFactoryImpl.java | 56 +++++++++++++++++++ .../impl/MongoObjectFactoryImpl.java | 13 +++-- .../impl/MarkPropertiesImpl.java | 10 ++++ 4 files changed, 78 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java index 79feed71242..e73788b1ff3 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java @@ -28,6 +28,7 @@ import com.sap.sailing.domain.base.impl.DynamicCompetitor; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.common.dto.AnniversaryType; +import com.sap.sailing.domain.coursetemplate.MarkProperties; import com.sap.sailing.domain.leaderboard.EventResolver; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; @@ -216,4 +217,6 @@ public interface DomainObjectFactory { * Loads all stored anniversary races. */ Map> getAnniversaryData() throws MalformedURLException; + + Iterable loadAllMarkProperties(); } 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 09e8506af99..df05b412072 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 @@ -33,6 +33,7 @@ import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; +import com.mongodb.BasicDBList; import com.mongodb.MongoException; import com.mongodb.MongoNamespace; import com.mongodb.client.FindIterable; @@ -199,6 +200,8 @@ import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; 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.leaderboard.DelayedLeaderboardCorrections; import com.sap.sailing.domain.leaderboard.EventResolver; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; @@ -2597,6 +2600,59 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return result; } + @Override + public Iterable loadAllMarkProperties() { + List result = new ArrayList<>(); + MongoCollection configurationCollection = database + .getCollection(CollectionNames.MARK_PROPERTIES.name()); + try { + for (Document dbObject : configurationCollection.find()) { + MarkProperties entry = loadMarkPropertiesEntry(dbObject); + result.add(entry); + } + } catch (Exception e) { + logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load mark properties."); + logger.log(Level.SEVERE, "loadAllMarkProperties", e); + } + + return result; + } + + private MarkProperties loadMarkPropertiesEntry(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); + final String pattern = dbObject.getString(FieldNames.MARK_PROPERTIES_PATTERN); + final String shape = dbObject.getString(FieldNames.MARK_PROPERTIES_SHAPE); + + final String type = dbObject.getString(FieldNames.MARK_PROPERTIES_TYPE); + final MarkType markType = MarkType.valueOf(type); + + 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); + + try { + final DeviceIdentifier deviceIdentifier = loadDeviceId(deviceIdentifierServiceFinder, + dbObject.get(FieldNames.MARK_PROPERTIES_TRACKING_DEVICE_IDENTIFIER, Document.class)); + result.setTrackingDeviceIdentifier(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; + } + private DeviceConfiguration loadConfigurationEntry(Document dbObject) throws JsonDeserializationException, ParseException { final String idAsString = dbObject.getString(FieldNames.CONFIGURATION_ID_AS_STRING.name()); final DeviceConfiguration configuration; diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 622d392706f..0e6df1eeb6f 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -1333,9 +1333,8 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { MarkProperties markProperties) { MongoCollection collection = database.getCollection(CollectionNames.MARK_PROPERTIES.name()); Document query = new Document(FieldNames.MARK_PROPERTIES_ID.name(), markProperties.getId().toString()); - Document entry; try { - entry = storeMarkPropertiesToDocument(deviceIdentifierServiceFinder, markProperties); + Document entry = storeMarkPropertiesToDocument(deviceIdentifierServiceFinder, markProperties); collection.withWriteConcern(WriteConcern.ACKNOWLEDGED).replaceOne(query, entry, new UpdateOptions().upsert(true)); } catch (TransformationException | NoCorrespondingServiceRegisteredException e) { @@ -1356,10 +1355,16 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { result.put(FieldNames.MARK_PROPERTIES_PATTERN.name(), markProperties.getPattern()); result.put(FieldNames.MARK_PROPERTIES_SHAPE.name(), markProperties.getShape()); result.put(FieldNames.MARK_PROPERTIES_SHORT_NAME.name(), markProperties.getShortName()); - result.put(FieldNames.MARK_PROPERTIES_TAGS.name(), markProperties.getTags()); + + BasicDBList tags = new BasicDBList(); + markProperties.getTags().forEach(t -> tags.add(t)); + result.put(FieldNames.MARK_PROPERTIES_TAGS.name(), tags); + result.put(FieldNames.MARK_PROPERTIES_TRACKING_DEVICE_IDENTIFIER.name(), storeDeviceId(deviceIdentifierServiceFinder, markProperties.getTrackingDeviceIdentifier())); - result.put(FieldNames.MARK_PROPERTIES_TYPE.name(), markProperties.getType()); + + result.put(FieldNames.MARK_PROPERTIES_TYPE.name(), + markProperties.getType() == null ? null : markProperties.getType().name()); return result; } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/impl/MarkPropertiesImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/impl/MarkPropertiesImpl.java index abbc3a40ee5..2d46cf3b748 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/impl/MarkPropertiesImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/coursetemplate/impl/MarkPropertiesImpl.java @@ -12,6 +12,7 @@ public class MarkPropertiesImpl extends CommonMarkPropertiesImpl implements Mark private static final long serialVersionUID = -5588202720707030502L; private DeviceIdentifier trackingDeviceIdentifier; private Position fixedPosition; + private Iterable tags; public MarkPropertiesImpl(String name, String shortName, Color color, String shape, String pattern, MarkType type) { super(name, shortName, color, shape, pattern, type); @@ -67,4 +68,13 @@ public class MarkPropertiesImpl extends CommonMarkPropertiesImpl implements Mark this.fixedPosition = fixedPosition; } + @Override + public Iterable getTags() { + return this.tags; + } + + public void setTags(Iterable tags) { + this.tags = tags; + } + }