mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-20 19:20:04 +00:00
initial storeage impl for anniversaries to mongodb
This commit is contained in:
1 parent
bfad7d0869
commit
390b240042
8 files changed
+354
-204
No files matched your search
+6
@@ -2,9 +2,11 @@ package com.sap.sailing.domain.persistence;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.net.URL;
|
||||
import java.util.Map;
|
||||
|
||||
import com.mongodb.DB;
|
||||
import com.mongodb.DBObject;
|
||||
import com.sap.sailing.domain.anniversary.AnniversaryRaceInfo;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -181,4 +183,8 @@ public interface MongoObjectFactory {
|
||||
* objects obtained through {@link DomainObjectFactory#loadConnectivityParametersForRacesToRestore(Consumer<RaceTrackingConnectivityParameter>)}.
|
||||
*/
|
||||
void removeAllConnectivityParametersForRacesToRestore();
|
||||
|
||||
void storeAnniversaryData(Map<Integer, AnniversaryRaceInfo> data);
|
||||
|
||||
Map<Integer, AnniversaryRaceInfo> getAnniversaryData();
|
||||
}
|
||||
+5
@@ -107,4 +107,9 @@ public enum CollectionNames {
|
||||
* way by corresponding implementations of the RaceTrackingConnectivityParametersMongoHandler} interface.
|
||||
*/
|
||||
CONNECTIVITY_PARAMS_FOR_RACES_TO_BE_RESTORED,
|
||||
|
||||
/**
|
||||
* Contains the known anniversaries
|
||||
*/
|
||||
ANNIVERSARIES
|
||||
}
|
||||
+286
-162
File diff suppressed because it is too large.
Load diff
@@ -40,6 +40,7 @@ Export-Package: com.sap.sailing.domain.abstractlog,
|
||||
com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl,
|
||||
com.sap.sailing.domain.abstractlog.shared.analyzing,
|
||||
com.sap.sailing.domain.abstractlog.shared.events,
|
||||
com.sap.sailing.domain.anniversary,
|
||||
com.sap.sailing.domain.base,
|
||||
com.sap.sailing.domain.base.configuration,
|
||||
com.sap.sailing.domain.base.configuration.impl,
|
||||
|
||||
+14
-1
@@ -6,8 +6,11 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
|
||||
public class AnniversaryRaceInfo {
|
||||
public AnniversaryRaceInfo(RegattaAndRaceIdentifier identifier, String leaderboardName, Date startOfRace,
|
||||
String eventID,String remoteUrl) {
|
||||
String eventID, String remoteUrl) {
|
||||
super();
|
||||
if(identifier == null || leaderboardName == null || startOfRace == null || eventID==null||remoteUrl==null){
|
||||
throw new IllegalStateException("Anniversary Data is not allowed to contain any null values!");
|
||||
}
|
||||
this.identifier = identifier;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.startOfRace = startOfRace;
|
||||
@@ -36,4 +39,14 @@ public class AnniversaryRaceInfo {
|
||||
public String getEventID() {
|
||||
return eventID;
|
||||
}
|
||||
|
||||
public String getRemoteUrl() {
|
||||
return remoteUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AnniversaryRaceInfo [identifier=" + identifier + ", leaderboardName=" + leaderboardName
|
||||
+ ", startOfRace=" + startOfRace + ", eventID=" + eventID + ", remoteUrl=" + remoteUrl + "]";
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -19,7 +19,7 @@ import com.sap.sailing.server.RacingEventService;
|
||||
|
||||
public class AnniversaryCalculator implements Runnable {
|
||||
private static final long INITIAL_DELAY = 1000;
|
||||
private static final long DELAY = 5000;
|
||||
private static final long DELAY = 50000;
|
||||
private RacingEventService racingEventService;
|
||||
private AnniversaryConflictResolver resolver = new AnniversaryConflictResolver();
|
||||
private int lastAmount = -1;
|
||||
@@ -68,7 +68,7 @@ public class AnniversaryCalculator implements Runnable {
|
||||
AnniversaryRaceInfo current = anniversaryRaceList.get(raceIdentifier);
|
||||
AnniversaryRaceInfo raceInfo = new AnniversaryRaceInfo(raceIdentifier,
|
||||
leaderboard.getName(), trackedRace.getStartOfRace().asDate(),
|
||||
event.getId().toString(),null);
|
||||
event.getId().toString(),"todo remoteurl");
|
||||
if(current == null){
|
||||
anniversaryRaceList.put(raceIdentifier, raceInfo);
|
||||
}else{
|
||||
|
||||
+39
-38
@@ -5,66 +5,67 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.sap.sailing.domain.anniversary.AnniversaryRaceInfo;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.server.anniversary.AnniversaryCalculator.ChangeListener;
|
||||
|
||||
public class AnniversaryDeterminator implements ChangeListener {
|
||||
private static int[] anniversaries = new int[]{10,25, 50,75};
|
||||
private static int[] anniversaries = new int[] { 10, 25, 50, 75 };
|
||||
ConcurrentHashMap<Integer, AnniversaryRaceInfo> knownAnniversaries = new ConcurrentHashMap<>();
|
||||
private MongoObjectFactory mongoObjectFactory;
|
||||
|
||||
public AnniversaryDeterminator() {
|
||||
knownAnniversaries.putAll(load());
|
||||
public AnniversaryDeterminator(MongoObjectFactory mongoObjectFactory) {
|
||||
this.mongoObjectFactory = mongoObjectFactory;
|
||||
knownAnniversaries.putAll(mongoObjectFactory.getAnniversaryData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(Collection<AnniversaryRaceInfo> collection) {
|
||||
ArrayList<AnniversaryRaceInfo> allRaces = new ArrayList<>(collection);
|
||||
Collections.sort(allRaces,new Comparator<AnniversaryRaceInfo>() {
|
||||
Collections.sort(allRaces, new Comparator<AnniversaryRaceInfo>() {
|
||||
|
||||
@Override
|
||||
public int compare(AnniversaryRaceInfo o1, AnniversaryRaceInfo o2) {
|
||||
return o1.getStartOfRace().compareTo(o2.getStartOfRace());
|
||||
}
|
||||
});
|
||||
checkForAnnivesaries(allRaces);
|
||||
}
|
||||
|
||||
private void checkForAnnivesaries(List<AnniversaryRaceInfo> collection) {
|
||||
int newAmount = collection.size();
|
||||
int factor = 1;
|
||||
while(true){
|
||||
for(int anniversary:anniversaries){
|
||||
int anniversaryToCheck = anniversary*factor;
|
||||
if(anniversaryToCheck > newAmount){
|
||||
return;
|
||||
}
|
||||
if(newAmount<anniversaryToCheck){
|
||||
onAnniversaryTraverse(anniversaryToCheck,collection.get(anniversaryToCheck));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onAnniversaryTraverse(int anniversaryToCheck, AnniversaryRaceInfo anniversaryRaceInfo) {
|
||||
AnniversaryRaceInfo knownAnniversary = knownAnniversaries.get(anniversaryToCheck);
|
||||
if(knownAnniversary != null){
|
||||
System.out.println("Skipping anniversary " + anniversaryToCheck + " as it is already known");
|
||||
}else{
|
||||
System.out.println("New anniversary " + anniversaryToCheck + " " + anniversaryRaceInfo);
|
||||
knownAnniversaries.put(anniversaryToCheck, anniversaryRaceInfo);
|
||||
persist();
|
||||
boolean requiresPersist = checkForAnnivesaries(allRaces);
|
||||
if(requiresPersist){
|
||||
mongoObjectFactory.storeAnniversaryData(knownAnniversaries);
|
||||
}
|
||||
}
|
||||
|
||||
private void persist() {
|
||||
// TODO Auto-generated method stub
|
||||
private boolean checkForAnnivesaries(List<AnniversaryRaceInfo> collection) {
|
||||
int newAmount = collection.size();
|
||||
int factor = 1;
|
||||
boolean requiresPersist = false;
|
||||
while (true) {
|
||||
for (int anniversary : anniversaries) {
|
||||
int anniversaryToCheck = anniversary * factor;
|
||||
if (anniversaryToCheck > newAmount) {
|
||||
return requiresPersist;
|
||||
}
|
||||
if (newAmount > anniversaryToCheck) {
|
||||
boolean requiresPersistSingle = onAnniversaryTraverse(anniversaryToCheck, collection.get(anniversaryToCheck));
|
||||
if(requiresPersistSingle){
|
||||
requiresPersist = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Map<Integer, AnniversaryRaceInfo> load() {
|
||||
return Collections.emptyMap();
|
||||
|
||||
private boolean onAnniversaryTraverse(int anniversaryToCheck, AnniversaryRaceInfo anniversaryRaceInfo) {
|
||||
AnniversaryRaceInfo knownAnniversary = knownAnniversaries.get(anniversaryToCheck);
|
||||
if (knownAnniversary != null) {
|
||||
System.out.println("Skipping anniversary " + anniversaryToCheck + " as it is already known");
|
||||
return false;
|
||||
} else {
|
||||
System.out.println("New anniversary " + anniversaryToCheck + " " + anniversaryRaceInfo);
|
||||
knownAnniversaries.put(anniversaryToCheck, anniversaryRaceInfo);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,7 +117,7 @@ public class Activator implements BundleActivator {
|
||||
racingEventService = new RacingEventServiceImpl(clearPersistentCompetitors, serviceFinderFactory,
|
||||
trackedRegattaListener, notificationService, restoreTrackedRaces,anniversaryCalculator);
|
||||
notificationService.setRacingEventService(racingEventService);
|
||||
anniversaryCalculator.addListener(new AnniversaryDeterminator());
|
||||
anniversaryCalculator.addListener(new AnniversaryDeterminator(racingEventService.getMongoObjectFactory()));
|
||||
anniversaryCalculator.setRacingEventService(racingEventService);
|
||||
|
||||
masterDataImportClassLoaderServiceTracker = new ServiceTracker<MasterDataImportClassLoaderService, MasterDataImportClassLoaderService>(
|
||||
|
||||
Reference in new issue
Block a user