mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-24 13:03:55 +00:00
# added server code to create, edit and delete device configurations
This commit is contained in:
1 parent
8a34842d14
commit
313085c456
37 files changed
+1335
-53
No files matched your search
@@ -26,8 +26,9 @@ import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RegattaRegistry;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
|
||||
import com.sap.sailing.domain.common.RaceFetcher;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaFetcher;
|
||||
@@ -555,10 +556,29 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
void setPersistentRegattaForRaceIDs(Regatta regatta, Iterable<String> raceIdStrings, boolean override);
|
||||
|
||||
/**
|
||||
* Returns a tablet's configuration.
|
||||
* Returns a mobile device's configuration.
|
||||
* @param identifier of the client (may include event)
|
||||
* @return the {@link DeviceConfiguration}
|
||||
*/
|
||||
DeviceConfiguration getDeviceConfiguration(DeviceConfigurationIdentifier identifier);
|
||||
|
||||
/**
|
||||
* Adds a device configuration.
|
||||
* @param matcher defining for which the configuration applies.
|
||||
* @param configuration of the device.
|
||||
*/
|
||||
void addDeviceConfiguration(DeviceConfigurationMatcher matcher, DeviceConfiguration configuration);
|
||||
|
||||
/**
|
||||
* Removes a configuration by its matching object.
|
||||
* @param matcher
|
||||
*/
|
||||
void removeDeviceConfiguration(DeviceConfigurationMatcher matcher);
|
||||
|
||||
/**
|
||||
* Returns all configurations and their matching objects.
|
||||
* @return the {@link DeviceConfiguration}s.
|
||||
*/
|
||||
Map<DeviceConfigurationMatcher, DeviceConfiguration> getAllDeviceConfigurations();
|
||||
|
||||
}
|
||||
+71
-10
@@ -34,8 +34,6 @@ import java.util.logging.Logger;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
@@ -47,7 +45,14 @@ import com.sap.sailing.domain.base.RegattaListener;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.DeviceConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
|
||||
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMapImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherAny;
|
||||
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherMulti;
|
||||
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMatcherSingle;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
@@ -191,7 +196,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
|
||||
/**
|
||||
* Leaderboards managed by this racing event service
|
||||
*/
|
||||
*/
|
||||
private final ConcurrentHashMap<String, Leaderboard> leaderboardsByName;
|
||||
|
||||
private final ConcurrentHashMap<String, LeaderboardGroup> leaderboardGroupsByName;
|
||||
@@ -229,6 +234,8 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
private final MediaDB mediaDB;
|
||||
|
||||
private final MediaLibrary mediaLibrary;
|
||||
|
||||
protected final DeviceConfigurationMapImpl configurationMap;
|
||||
|
||||
public RacingEventServiceImpl() {
|
||||
this(MongoFactory.INSTANCE.getDefaultDomainObjectFactory(), MongoFactory.INSTANCE
|
||||
@@ -272,6 +279,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
this.raceLogScoringReplicator = new RaceLogScoringReplicator(this);
|
||||
this.mediaDB = mediaDb;
|
||||
this.mediaLibrary = new MediaLibrary();
|
||||
this.configurationMap = new DeviceConfigurationMapImpl();
|
||||
|
||||
// Add one default leaderboard that aggregates all races currently tracked by this service.
|
||||
// This is more for debugging purposes than for anything else.
|
||||
@@ -282,6 +290,7 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
loadRaceIDToRegattaAssociations();
|
||||
loadStoredLeaderboardsAndGroups();
|
||||
loadMediaLibary();
|
||||
loadStoredDeviceConfigurations();
|
||||
}
|
||||
|
||||
public RacingEventServiceImpl(MongoDBService mongoDBService) {
|
||||
@@ -347,6 +356,30 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
mediaTrackAdded(mediaTrack);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadStoredDeviceConfigurations() {
|
||||
DeviceConfigurationMatcher anyMatcher = DeviceConfigurationMatcherAny.INSTANCE;
|
||||
DeviceConfigurationImpl configuration1 = new DeviceConfigurationImpl();
|
||||
configuration1.setAllowedCourseAreaNames(Arrays.asList("Alpha", "Beta", "Stadium"));
|
||||
configuration1.setMaximumRoundsForCourse(3);
|
||||
configuration1.setResultsMailRecipient("lukas.niemeier@sap.com");
|
||||
|
||||
DeviceConfigurationMatcher multiIdentifier = new DeviceConfigurationMatcherMulti(Arrays.asList("2", "3"));
|
||||
DeviceConfigurationImpl configuration2 = new DeviceConfigurationImpl();
|
||||
configuration2.setAllowedCourseAreaNames(Arrays.asList("GAMMA"));
|
||||
configuration2.setMaximumRoundsForCourse(3);
|
||||
|
||||
DeviceConfigurationMatcher identifier = new DeviceConfigurationMatcherSingle("3");
|
||||
DeviceConfigurationImpl configuration3 = new DeviceConfigurationImpl();
|
||||
configuration3.setAllowedCourseAreaNames(Arrays.asList("Timo"));
|
||||
configuration3.setMaximumRoundsForCourse(1);
|
||||
|
||||
synchronized (configurationMap) {
|
||||
configurationMap.put(anyMatcher, configuration1);
|
||||
configurationMap.put(identifier, configuration3);
|
||||
configurationMap.put(multiIdentifier, configuration2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addLeaderboard(Leaderboard leaderboard) {
|
||||
@@ -1769,7 +1802,14 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
for (MediaTrack lg : mediaLibrary.allTracks()) {
|
||||
logoutput.append(String.format("%3s\n", lg.toString()));
|
||||
}
|
||||
|
||||
|
||||
logger.info("Serializing configuration map...");
|
||||
oos.writeObject(configurationMap);
|
||||
logoutput.append("Serialized " + configurationMap.size() + " configuration entries\n");
|
||||
for (DeviceConfigurationMatcher matcher : configurationMap.keySet()) {
|
||||
logoutput.append(String.format("%3s\n", matcher.toString()));
|
||||
}
|
||||
|
||||
logger.info(logoutput.toString());
|
||||
}
|
||||
|
||||
@@ -1851,6 +1891,12 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
for (MediaTrack mediatrack : mediaLibrary.allTracks()) {
|
||||
logoutput.append(String.format("%3s\n", mediatrack.toString()));
|
||||
}
|
||||
|
||||
configurationMap.putAll((DeviceConfigurationMapImpl) ois.readObject());
|
||||
logoutput.append("Received " + configurationMap.size() + " NEW configuration entries\n");
|
||||
for (DeviceConfigurationMatcher matcher : configurationMap.keySet()) {
|
||||
logoutput.append(String.format("%3s\n", matcher.toString()));
|
||||
}
|
||||
|
||||
logger.info(logoutput.toString());
|
||||
logger.info("Done with initial replication on " + this);
|
||||
@@ -2098,11 +2144,26 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
|
||||
@Override
|
||||
public DeviceConfiguration getDeviceConfiguration(DeviceConfigurationIdentifier identifier) {
|
||||
DeviceConfigurationImpl configuration = new DeviceConfigurationImpl();
|
||||
configuration.setAllowedCourseAreaNames(Arrays.asList("Alpha", "Beta", "Stadium"));
|
||||
configuration.setMaximumRoundsForCourse(3);
|
||||
configuration.setResultsMailRecipient("lukas.niemeier@sap.com");
|
||||
return configuration;
|
||||
return configurationMap.getByMatch(identifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDeviceConfiguration(DeviceConfigurationMatcher matcher, DeviceConfiguration configuration) {
|
||||
synchronized (configurationMap) {
|
||||
configurationMap.put(matcher, configuration);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeDeviceConfiguration(DeviceConfigurationMatcher matcher) {
|
||||
synchronized (configurationMap) {
|
||||
configurationMap.remove(matcher);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<DeviceConfigurationMatcher, DeviceConfiguration> getAllDeviceConfigurations() {
|
||||
return new HashMap<DeviceConfigurationMatcher, DeviceConfiguration>(configurationMap);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user