Bug 5085: Added loading + improved storing capabilities for

MarkProperties
This commit is contained in:
Steffen Jacobs committed 2019-08-08 17:47:09 +02:00
1 parent ef5a294515
commit db8252aff3
4 files changed
+78 -4

No files matched your search

@@ -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<? extends Integer, ? extends Pair<DetailedRaceInfo, AnniversaryType>> getAnniversaryData() throws MalformedURLException;
Iterable<MarkProperties> loadAllMarkProperties();
}
@@ -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<MarkProperties> loadAllMarkProperties() {
List<MarkProperties> result = new ArrayList<>();
MongoCollection<Document> 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<String> 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;
@@ -1333,9 +1333,8 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
MarkProperties markProperties) {
MongoCollection<Document> 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;
}
@@ -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<String> 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<String> getTags() {
return this.tags;
}
public void setTags(Iterable<String> tags) {
this.tags = tags;
}
}