mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 09:26:44 +00:00
Merge remote-tracking branch 'origin/gwt' into gwt-5
Conflicts: java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java
This commit is contained in:
+54
-39
@@ -18,25 +18,30 @@ import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.persistence.SwissTimingAdapterPersistence;
|
||||
import com.sap.sailing.mongodb.MongoDBService;
|
||||
|
||||
public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPersistence {
|
||||
|
||||
private final DB database;
|
||||
|
||||
private final SwissTimingFactory swissTimingFactory;
|
||||
|
||||
private static final Logger logger = Logger.getLogger(SwissTimingAdapterPersistenceImpl.class.getName());
|
||||
|
||||
/** this race cache should only be used for checks in the storeSailMasterMessage method to ensure
|
||||
* that we have always a valid race for a message (also in case we missed a RAC message)
|
||||
private final SwissTimingFactory swissTimingFactory;
|
||||
|
||||
private static final Logger logger = Logger.getLogger(SwissTimingAdapterPersistenceImpl.class.getName());
|
||||
|
||||
private final DBCollection lastMessageCountCollection;
|
||||
|
||||
/**
|
||||
* this race cache should only be used for checks in the storeSailMasterMessage method to ensure that we have always
|
||||
* a valid race for a message (also in case we missed a RAC message)
|
||||
*/
|
||||
private HashMap<String, Race> cachedRaces = new HashMap<String, Race>();
|
||||
|
||||
public SwissTimingAdapterPersistenceImpl(MongoDBService mongoDB, SwissTimingFactory swissTimingFactory) {
|
||||
|
||||
private long lastMessageCount;
|
||||
|
||||
public SwissTimingAdapterPersistenceImpl(DB db, SwissTimingFactory swissTimingFactory) {
|
||||
super();
|
||||
this.database = mongoDB.getDB();
|
||||
this.database = db;
|
||||
this.swissTimingFactory = swissTimingFactory;
|
||||
lastMessageCountCollection = db.getCollection(CollectionNames.LAST_MESSAGE_COUNT.name());
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -49,22 +54,22 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
indexKeysRaceMsgs.put(FieldNames.RACE_ID.name(), 1);
|
||||
|
||||
racesMessageCollection.ensureIndex(indexKeysRaceMsgs, IndexNames.INDEX_RACES_MESSAGES.name(), true);
|
||||
|
||||
|
||||
// ensure the required indexes for the collection of command messages
|
||||
DBCollection cmdMessagesCollection = database.getCollection(CollectionNames.COMMAND_MESSAGES.name());
|
||||
|
||||
|
||||
BasicDBObject indexKeysCmdMsgs = new BasicDBObject();
|
||||
indexKeysCmdMsgs.put(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1);
|
||||
|
||||
cmdMessagesCollection.ensureIndex(indexKeysCmdMsgs, IndexNames.INDEX_COMMAND_MESSAGES.name(), true);
|
||||
|
||||
|
||||
// initially fill the races cache
|
||||
Iterable<Race> races = getRaces();
|
||||
for(Race race: races) {
|
||||
for (Race race : races) {
|
||||
cachedRaces.put(race.getRaceID(), race);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Iterable<SwissTimingConfiguration> getSwissTimingConfigurations() {
|
||||
List<SwissTimingConfiguration> result = new ArrayList<SwissTimingConfiguration>();
|
||||
@@ -75,8 +80,9 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
result.add(stConfig);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
// something went wrong during DB access; report, then use empty new wind track
|
||||
logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load recorded TracTrac configurations. Check MongoDB settings.");
|
||||
// something went wrong during DB access; report, then use empty new wind track
|
||||
logger.log(Level.SEVERE,
|
||||
"Error connecting to MongoDB, unable to load recorded TracTrac configurations. Check MongoDB settings.");
|
||||
logger.throwing(SwissTimingAdapterPersistenceImpl.class.getName(), "getTracTracConfigurations", t);
|
||||
}
|
||||
return result;
|
||||
@@ -85,9 +91,8 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
private SwissTimingConfiguration loadSwissTimingConfiguration(DBObject object) {
|
||||
Boolean canSendRequests = (Boolean) object.get(FieldNames.ST_CONFIG_CAN_SEND_REQUESTS.name());
|
||||
return swissTimingFactory.createSwissTimingConfiguration((String) object.get(FieldNames.ST_CONFIG_NAME.name()),
|
||||
(String) object.get(FieldNames.ST_CONFIG_HOSTNAME.name()),
|
||||
(Integer) object.get(FieldNames.ST_CONFIG_PORT.name()),
|
||||
canSendRequests==null?false:canSendRequests);
|
||||
(String) object.get(FieldNames.ST_CONFIG_HOSTNAME.name()), (Integer) object
|
||||
.get(FieldNames.ST_CONFIG_PORT.name()), canSendRequests == null ? false : canSendRequests);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -111,11 +116,12 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
DBCollection racesMessagesCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
|
||||
BasicDBObject query = new BasicDBObject();
|
||||
query.append(FieldNames.RACE_ID.name(), raceID);
|
||||
DBCursor results = racesMessagesCollection.find(query).sort(new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1));
|
||||
DBCursor results = racesMessagesCollection.find(query).sort(
|
||||
new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1));
|
||||
List<SailMasterMessage> result = new ArrayList<SailMasterMessage>();
|
||||
for (DBObject o : results) {
|
||||
SailMasterMessage msg = swissTimingFactory.createMessage((String) o.get(FieldNames.MESSAGE_CONTENT.name()),
|
||||
(Long) o.get(FieldNames.MESSAGE_SEQUENCE_NUMBER.name()));
|
||||
SailMasterMessage msg = swissTimingFactory.createMessage((String) o.get(FieldNames.MESSAGE_CONTENT.name()),
|
||||
(Long) o.get(FieldNames.MESSAGE_SEQUENCE_NUMBER.name()));
|
||||
result.add(msg);
|
||||
}
|
||||
return result;
|
||||
@@ -124,17 +130,17 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
@Override
|
||||
public List<SailMasterMessage> loadCommandMessages() {
|
||||
DBCollection cmdMessagesCollection = database.getCollection(CollectionNames.COMMAND_MESSAGES.name());
|
||||
DBCursor results = cmdMessagesCollection.find().sort(new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1));
|
||||
DBCursor results = cmdMessagesCollection.find().sort(
|
||||
new BasicDBObject().append(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), 1));
|
||||
List<SailMasterMessage> result = new ArrayList<SailMasterMessage>();
|
||||
for (DBObject o : results) {
|
||||
SailMasterMessage msg = swissTimingFactory.createMessage((String) o.get(FieldNames.MESSAGE_CONTENT.name()),
|
||||
(Long) o.get(FieldNames.MESSAGE_SEQUENCE_NUMBER.name()));
|
||||
SailMasterMessage msg = swissTimingFactory.createMessage((String) o.get(FieldNames.MESSAGE_CONTENT.name()),
|
||||
(Long) o.get(FieldNames.MESSAGE_SEQUENCE_NUMBER.name()));
|
||||
result.add(msg);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Race getRace(String raceID) {
|
||||
DBCollection races = database.getCollection(CollectionNames.RACES_MASTERDATA.name());
|
||||
@@ -143,9 +149,9 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
DBObject o = races.findOne(query);
|
||||
if (o != null) {
|
||||
Long startTimeAsMillis = (Long) o.get(FieldNames.RACE_STARTTIME.name());
|
||||
Race race = swissTimingFactory.createRace((String) o.get(FieldNames.RACE_ID.name()),
|
||||
(String) o.get(FieldNames.RACE_DESCRIPTION.name()),
|
||||
startTimeAsMillis == null ? null : new MillisecondsTimePoint(startTimeAsMillis));
|
||||
Race race = swissTimingFactory.createRace((String) o.get(FieldNames.RACE_ID.name()), (String) o
|
||||
.get(FieldNames.RACE_DESCRIPTION.name()), startTimeAsMillis == null ? null
|
||||
: new MillisecondsTimePoint(startTimeAsMillis));
|
||||
return race;
|
||||
}
|
||||
return null;
|
||||
@@ -158,9 +164,9 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
List<Race> result = new ArrayList<Race>();
|
||||
for (DBObject o : results) {
|
||||
Long startTimeAsMillis = (Long) o.get(FieldNames.RACE_STARTTIME.name());
|
||||
Race race = swissTimingFactory.createRace((String) o.get(FieldNames.RACE_ID.name()),
|
||||
(String) o.get(FieldNames.RACE_DESCRIPTION.name()),
|
||||
startTimeAsMillis == null ? null : new MillisecondsTimePoint(startTimeAsMillis));
|
||||
Race race = swissTimingFactory.createRace((String) o.get(FieldNames.RACE_ID.name()), (String) o
|
||||
.get(FieldNames.RACE_DESCRIPTION.name()), startTimeAsMillis == null ? null
|
||||
: new MillisecondsTimePoint(startTimeAsMillis));
|
||||
result.add(race);
|
||||
}
|
||||
return result;
|
||||
@@ -178,7 +184,7 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
result.put(FieldNames.ST_CONFIG_HOSTNAME.name(), swissTimingConfiguration.getHostname());
|
||||
result.put(FieldNames.ST_CONFIG_PORT.name(), swissTimingConfiguration.getPort());
|
||||
result.put(FieldNames.ST_CONFIG_CAN_SEND_REQUESTS.name(), swissTimingConfiguration.canSendRequests());
|
||||
|
||||
|
||||
stConfigCollection.insert(result);
|
||||
}
|
||||
|
||||
@@ -194,6 +200,14 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
if(type.isRaceSpecific()) {
|
||||
objToInsert.put(FieldNames.RACE_ID.name(), message.getRaceID());
|
||||
messageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
|
||||
if (message.getSequenceNumber() == null){
|
||||
DBObject emptyQuery = new BasicDBObject();
|
||||
DBObject incrementLastMessageCountQuery = new BasicDBObject().
|
||||
append("$inc", new BasicDBObject().append(FieldNames.LAST_MESSAGE_COUNT.name(), 1));
|
||||
DBObject newCountRecord = lastMessageCountCollection.findAndModify(emptyQuery, incrementLastMessageCountQuery);
|
||||
lastMessageCount = (Long) newCountRecord.get(FieldNames.LAST_MESSAGE_COUNT.name());
|
||||
objToInsert.put(FieldNames.MESSAGE_SEQUENCE_NUMBER.name(), lastMessageCount);
|
||||
}
|
||||
} else {
|
||||
messageCollection = database.getCollection(CollectionNames.COMMAND_MESSAGES.name());
|
||||
}
|
||||
@@ -226,8 +240,8 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
private List<Race> parseAvailableRacesMessage(SailMasterMessage availableRacesMessage) {
|
||||
int count = Integer.valueOf(availableRacesMessage.getSections()[1]);
|
||||
List<Race> result = new ArrayList<Race>();
|
||||
for (int i=0; i<count; i++) {
|
||||
String[] idAndDescription = availableRacesMessage.getSections()[2+i].split(";");
|
||||
for (int i = 0; i < count; i++) {
|
||||
String[] idAndDescription = availableRacesMessage.getSections()[2 + i].split(";");
|
||||
result.add(SwissTimingFactory.INSTANCE.createRace(idAndDescription[0], idAndDescription[1], null));
|
||||
}
|
||||
return result;
|
||||
@@ -241,8 +255,9 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
BasicDBObject result = new BasicDBObject();
|
||||
result.put(FieldNames.RACE_ID.name(), race.getRaceID());
|
||||
result.put(FieldNames.RACE_DESCRIPTION.name(), race.getDescription());
|
||||
result.put(FieldNames.RACE_STARTTIME.name(), race.getStartTime() == null ? null : new Long(race.getStartTime().asMillis()));
|
||||
racesCollection.update(query, result, /* upsrt */ true, /* multi */ false);
|
||||
result.put(FieldNames.RACE_STARTTIME.name(), race.getStartTime() == null ? null : new Long(race.getStartTime()
|
||||
.asMillis()));
|
||||
racesCollection.update(query, result, /* upsrt */true, /* multi */false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -250,7 +265,7 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
DBCollection racesCollection = database.getCollection(CollectionNames.RACES_MASTERDATA.name());
|
||||
racesCollection.drop();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void dropAllMessageData() {
|
||||
DBCollection racesMessageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name());
|
||||
|
||||
Reference in New Issue
Block a user