mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-22 21:55:39 +00:00
Bug 4819: added CRUD operations for SwissTimingAdapter +
SailingServiceImpl -> SwissTiming
This commit is contained in:
+6
-2
@@ -14,11 +14,15 @@ public interface SwissTimingAdapterPersistence {
|
||||
|
||||
Iterable<SwissTimingArchiveConfiguration> getSwissTimingArchiveConfigurations();
|
||||
|
||||
void storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration);
|
||||
|
||||
void createSwissTimingArchiveConfiguration(SwissTimingArchiveConfiguration swissTimingArchiveConfiguration);
|
||||
|
||||
void updateSwissTimingArchiveConfiguration(SwissTimingArchiveConfiguration swissTimingArchiveConfiguration);
|
||||
|
||||
void deleteSwissTimingArchiveConfiguration(SwissTimingArchiveConfiguration swissTimingArchiveConfiguration);
|
||||
|
||||
void deleteSwissTimingConfiguration(String creatorName, String jsonURL);
|
||||
|
||||
void updateSwissTimingConfiguration(SwissTimingConfiguration createSwissTimingConfiguration);
|
||||
|
||||
void createSwissTimingConfiguration(SwissTimingConfiguration createSwissTimingConfiguration);
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ package com.sap.sailing.domain.swisstimingadapter.persistence.impl;
|
||||
public enum FieldNames {
|
||||
// SwissTiming configuration parameters:
|
||||
ST_CONFIG_NAME, ST_CONFIG_HOSTNAME, ST_CONFIG_PORT, ST_CONFIG_JSON_URL, ST_CONFIG_UPDATE_URL,
|
||||
ST_CONFIG_UPDATE_USERNAME, ST_CONFIG_UPDATE_PASSWORD, ST_ARCHIVE_JSON_URL, ST_ARCHIVE_CREATOR_NAME,
|
||||
ST_CONFIG_UPDATE_USERNAME, ST_CONFIG_UPDATE_PASSWORD, ST_CONFIG_CREATOR_NAME, ST_ARCHIVE_JSON_URL, ST_ARCHIVE_CREATOR_NAME,
|
||||
|
||||
// last message count field:
|
||||
LAST_MESSAGE_COUNT,
|
||||
|
||||
+35
-6
@@ -60,7 +60,9 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
String updateURL = (String) object.get(FieldNames.ST_CONFIG_UPDATE_URL.name());
|
||||
String updateUsername = (String) object.get(FieldNames.ST_CONFIG_UPDATE_USERNAME.name());
|
||||
String updatePassword = (String) object.get(FieldNames.ST_CONFIG_UPDATE_PASSWORD.name());
|
||||
return swissTimingFactory.createSwissTimingConfiguration(name, jsonURL, hostname, port, updateURL, updateUsername, updatePassword);
|
||||
String creatorName = object.getString(FieldNames.ST_CONFIG_CREATOR_NAME.name());
|
||||
return swissTimingFactory.createSwissTimingConfiguration(name, jsonURL, hostname, port, updateURL,
|
||||
updateUsername, updatePassword, creatorName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -88,8 +90,16 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration) {
|
||||
public void createSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration) {
|
||||
MongoCollection<org.bson.Document> stConfigCollection = database.getCollection(CollectionNames.SWISSTIMING_CONFIGURATIONS.name());
|
||||
Document result = storeSwissTimingConfiguration(swissTimingConfiguration);
|
||||
final Document updateQuery = new Document(FieldNames.ST_CONFIG_JSON_URL.name(),
|
||||
swissTimingConfiguration.getJsonURL());
|
||||
stConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).replaceOne(updateQuery, result,
|
||||
new UpdateOptions().upsert(true));
|
||||
}
|
||||
|
||||
private Document storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration) {
|
||||
Document result = new Document();
|
||||
result.put(FieldNames.ST_CONFIG_NAME.name(), swissTimingConfiguration.getName());
|
||||
result.put(FieldNames.ST_CONFIG_JSON_URL.name(), swissTimingConfiguration.getJsonURL());
|
||||
@@ -98,10 +108,8 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
result.put(FieldNames.ST_CONFIG_UPDATE_URL.name(), swissTimingConfiguration.getUpdateURL());
|
||||
result.put(FieldNames.ST_CONFIG_UPDATE_USERNAME.name(), swissTimingConfiguration.getUpdateUsername());
|
||||
result.put(FieldNames.ST_CONFIG_UPDATE_PASSWORD.name(), swissTimingConfiguration.getUpdatePassword());
|
||||
final Document updateQuery = new Document(FieldNames.ST_CONFIG_JSON_URL.name(),
|
||||
swissTimingConfiguration.getJsonURL());
|
||||
stConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).replaceOne(updateQuery, result,
|
||||
new UpdateOptions().upsert(true));
|
||||
result.put(FieldNames.ST_CONFIG_CREATOR_NAME.name(), swissTimingConfiguration.getCreatorName());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -137,4 +145,25 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
|
||||
Document result = storeSwissTimingArchiveConfiguration(config);
|
||||
stArchiveConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).deleteOne(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteSwissTimingConfiguration(String creatorName, String jsonURL) {
|
||||
MongoCollection<org.bson.Document> stArchiveConfigCollection = database
|
||||
.getCollection(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name());
|
||||
Document result = new Document();
|
||||
result.put(FieldNames.ST_CONFIG_JSON_URL.name(), jsonURL);
|
||||
result.put(FieldNames.ST_CONFIG_CREATOR_NAME.name(), creatorName);
|
||||
stArchiveConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).deleteOne(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSwissTimingConfiguration(SwissTimingConfiguration config) {
|
||||
MongoCollection<org.bson.Document> stArchiveConfigCollection = database
|
||||
.getCollection(CollectionNames.SWISSTIMING_CONFIGURATIONS.name());
|
||||
Document result = storeSwissTimingConfiguration(config);
|
||||
final Document updateQuery = new Document(FieldNames.ST_CONFIG_JSON_URL.name(), config.getJsonURL());
|
||||
updateQuery.put(FieldNames.ST_CONFIG_CREATOR_NAME.name(), config.getCreatorName());
|
||||
stArchiveConfigCollection.withWriteConcern(WriteConcern.ACKNOWLEDGED).replaceOne(updateQuery, result,
|
||||
new UpdateOptions().upsert(true));
|
||||
}
|
||||
}
|
||||
|
||||
+6
-3
@@ -13,6 +13,8 @@ import com.sap.sse.security.shared.WithQualifiedObjectIdentifier;
|
||||
*
|
||||
*/
|
||||
public interface SwissTimingConfiguration extends WithQualifiedObjectIdentifier {
|
||||
|
||||
String getCreatorName();
|
||||
String getName();
|
||||
|
||||
String getJsonURL();
|
||||
@@ -38,10 +40,11 @@ public interface SwissTimingConfiguration extends WithQualifiedObjectIdentifier
|
||||
}
|
||||
|
||||
default TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier() {
|
||||
return getTypeRelativeObjectIdentifier(getJsonURL());
|
||||
return getTypeRelativeObjectIdentifier(getJsonURL(), getCreatorName());
|
||||
}
|
||||
|
||||
public static TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier(String jsonUrl) {
|
||||
return new TypeRelativeObjectIdentifier(jsonUrl);
|
||||
public static TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier(String jsonUrl, String username) {
|
||||
return username == null ? new TypeRelativeObjectIdentifier(jsonUrl)
|
||||
: new TypeRelativeObjectIdentifier(jsonUrl, username);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -53,7 +53,8 @@ public interface SwissTimingFactory {
|
||||
|
||||
SailMasterTransceiver createSailMasterTransceiver();
|
||||
|
||||
SwissTimingConfiguration createSwissTimingConfiguration(String name, String jsonURL, String hostname, Integer port, String updateURL, String updateUsername, String updatePassword);
|
||||
SwissTimingConfiguration createSwissTimingConfiguration(String name, String jsonURL, String hostname, Integer port,
|
||||
String updateURL, String updateUsername, String updatePassword, String creatorName);
|
||||
|
||||
SwissTimingRaceTracker createRaceTracker(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, WindStore windStore,
|
||||
DomainFactory domainFactory, TrackedRegattaRegistry trackedRegattaRegistry, RaceLogResolver raceLogResolver, SwissTimingTrackingConnectivityParameters connectivityParams,
|
||||
|
||||
+9
-1
@@ -11,8 +11,10 @@ public class SwissTimingConfigurationImpl implements SwissTimingConfiguration {
|
||||
private final String updateURL;
|
||||
private final String updateUsername;
|
||||
private final String updatePassword;
|
||||
private String creatorName;
|
||||
|
||||
public SwissTimingConfigurationImpl(String name, String jsonURL, String hostname, Integer port, String updateURL, String updateUsername, String updatePassword) {
|
||||
public SwissTimingConfigurationImpl(String name, String jsonURL, String hostname, Integer port, String updateURL,
|
||||
String updateUsername, String updatePassword, String creatorName) {
|
||||
super();
|
||||
this.name = name;
|
||||
this.jsonURL = jsonURL;
|
||||
@@ -21,6 +23,12 @@ public class SwissTimingConfigurationImpl implements SwissTimingConfiguration {
|
||||
this.updateURL = updateURL;
|
||||
this.updateUsername = updateUsername;
|
||||
this.updatePassword = updatePassword;
|
||||
this.creatorName = creatorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCreatorName() {
|
||||
return creatorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -85,8 +85,9 @@ public class SwissTimingFactoryImpl implements SwissTimingFactory {
|
||||
|
||||
@Override
|
||||
public SwissTimingConfiguration createSwissTimingConfiguration(String name, String jsonURL, String hostname,
|
||||
Integer port, String updateURL, String updateUsername, String updatePassword) {
|
||||
return new SwissTimingConfigurationImpl(name, jsonURL, hostname, port, updateURL, updateUsername, updatePassword);
|
||||
Integer port, String updateURL, String updateUsername, String updatePassword, String creatorName) {
|
||||
return new SwissTimingConfigurationImpl(name, jsonURL, hostname, port, updateURL, updateUsername,
|
||||
updatePassword, creatorName);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-1
@@ -507,7 +507,8 @@ public class SwissTimingEventManagementPanel extends AbstractEventManagementPane
|
||||
final String hostname = result.trackingDataHost;
|
||||
final Integer port = result.trackingDataPort;
|
||||
final String configName = result.eventName;
|
||||
sailingService.storeSwissTimingConfiguration(configName, jsonUrl, hostname, port, updateURL, updateUsername, updatePassword,
|
||||
sailingService.createSwissTimingConfiguration(configName, jsonUrl, hostname, port, updateURL,
|
||||
updateUsername, updatePassword,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
|
||||
+7
-1
@@ -375,9 +375,15 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
SwissTimingEventRecordDTO getRacesOfSwissTimingEvent(String eventJsonURL) throws UnauthorizedException, Exception;
|
||||
|
||||
void storeSwissTimingConfiguration(String configName, String jsonURL, String hostname, Integer port,
|
||||
void createSwissTimingConfiguration(String configName, String jsonURL, String hostname, Integer port,
|
||||
String updateURL, String updateUsername, String updatePassword) throws UnauthorizedException, Exception;
|
||||
|
||||
void deleteSwissTimingConfiguration(SwissTimingConfigurationWithSecurityDTO configuration)
|
||||
throws UnauthorizedException, Exception;
|
||||
|
||||
void updateSwissTimingConfiguration(SwissTimingConfigurationWithSecurityDTO configuration)
|
||||
throws UnauthorizedException, Exception;
|
||||
|
||||
String[] getCountryCodes() throws UnauthorizedException;
|
||||
|
||||
Map<CompetitorDTO, List<GPSFixDTOWithSpeedWindTackAndLegType>> getDouglasPoints(
|
||||
|
||||
+7
-1
@@ -367,9 +367,15 @@ public interface SailingServiceAsync extends FileStorageManagementGwtServiceAsyn
|
||||
|
||||
void getRacesOfSwissTimingEvent(String eventJsonUrl, AsyncCallback<SwissTimingEventRecordDTO> asyncCallback);
|
||||
|
||||
void storeSwissTimingConfiguration(String configName, String jsonURL, String hostname, Integer port,
|
||||
void createSwissTimingConfiguration(String configName, String jsonURL, String hostname, Integer port,
|
||||
String updateURL, String updateUsername, String updatePassword, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void updateSwissTimingConfiguration(SwissTimingConfigurationWithSecurityDTO configuration,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void deleteSwissTimingConfiguration(SwissTimingConfigurationWithSecurityDTO configuration,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void getCountryCodes(AsyncCallback<String[]> callback);
|
||||
|
||||
void getDouglasPoints(RegattaAndRaceIdentifier raceIdentifier, Map<CompetitorDTO, TimeRange> competitorTimeRanges,
|
||||
|
||||
+41
-15
@@ -3177,9 +3177,48 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
public List<SwissTimingConfigurationWithSecurityDTO> getPreviousSwissTimingConfigurations() {
|
||||
Iterable<SwissTimingConfiguration> configs = swissTimingAdapterPersistence.getSwissTimingConfigurations();
|
||||
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(SecuredDomainType.SWISS_TIMING_ACCOUNT, configs,
|
||||
stConfig -> new SwissTimingConfigurationWithSecurityDTO(stConfig.getName(), stConfig.getJsonURL(),
|
||||
stConfig -> {
|
||||
final SwissTimingConfigurationWithSecurityDTO config = new SwissTimingConfigurationWithSecurityDTO(
|
||||
stConfig.getName(), stConfig.getJsonURL(),
|
||||
stConfig.getHostname(), stConfig.getPort(), stConfig.getUpdateURL(),
|
||||
stConfig.getUpdateUsername(), stConfig.getUpdatePassword(), null));
|
||||
stConfig.getUpdateUsername(), stConfig.getUpdatePassword(), null);
|
||||
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config, config.getIdentifier());
|
||||
return config;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createSwissTimingConfiguration(String configName, String jsonURL, String hostname, Integer port,
|
||||
String updateURL, String updateUsername, String updatePassword) throws Exception {
|
||||
if (!jsonURL.equalsIgnoreCase("test")) {
|
||||
final String currentUserName = getSecurityService().getCurrentUser().getName();
|
||||
getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.SWISS_TIMING_ACCOUNT,
|
||||
SwissTimingConfiguration.getTypeRelativeObjectIdentifier(jsonURL, currentUserName), configName,
|
||||
() -> swissTimingAdapterPersistence
|
||||
.createSwissTimingConfiguration(
|
||||
swissTimingFactory.createSwissTimingConfiguration(configName,
|
||||
jsonURL, hostname, port, updateURL, updateUsername, updatePassword,
|
||||
currentUserName)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteSwissTimingConfiguration(SwissTimingConfigurationWithSecurityDTO configuration) {
|
||||
getSecurityService().checkCurrentUserDeletePermission(configuration);
|
||||
getSecurityService().checkPermissionAndDeleteOwnershipForObjectRemoval(configuration,
|
||||
() -> swissTimingAdapterPersistence.deleteSwissTimingConfiguration(configuration.getCreatorName(),
|
||||
configuration.getJsonURL()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSwissTimingConfiguration(SwissTimingConfigurationWithSecurityDTO configuration)
|
||||
throws Exception {
|
||||
getSecurityService().checkCurrentUserUpdatePermission(configuration);
|
||||
swissTimingAdapterPersistence.updateSwissTimingConfiguration(swissTimingFactory.createSwissTimingConfiguration(
|
||||
configuration.getName(), configuration.getJsonURL(), configuration.getHostname(),
|
||||
configuration.getPort(), configuration.getUpdateURL(), configuration.getUpdateUsername(),
|
||||
configuration.getUpdatePassword(), configuration.getCreatorName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -3213,19 +3252,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeSwissTimingConfiguration(String configName, String jsonURL, String hostname, Integer port,
|
||||
String updateURL, String updateUsername, String updatePassword) throws Exception {
|
||||
if (!jsonURL.equalsIgnoreCase("test")) {
|
||||
getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.SWISS_TIMING_ACCOUNT, SwissTimingConfiguration.getTypeRelativeObjectIdentifier(jsonURL),
|
||||
configName,
|
||||
() -> swissTimingAdapterPersistence
|
||||
.storeSwissTimingConfiguration(swissTimingFactory.createSwissTimingConfiguration(configName,
|
||||
jsonURL, hostname, port, updateURL, updateUsername, updatePassword)));
|
||||
}
|
||||
}
|
||||
|
||||
private RaceLogStore getRaceLogStore() {
|
||||
return MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
|
||||
|
||||
Reference in New Issue
Block a user