mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-25 06:58:39 +00:00
Bug 4819: added CRUD operations to SailingServiceImpl + adjusted
SwissTimingArchiveConfigurationWithSecurityDTO
This commit is contained in:
+6
-3
@@ -10,6 +10,8 @@ public interface SwissTimingArchiveConfiguration extends WithQualifiedObjectIden
|
||||
|
||||
String getJsonURL();
|
||||
|
||||
String getCreatorName();
|
||||
|
||||
@Override
|
||||
default String getName() {
|
||||
return getJsonURL();
|
||||
@@ -26,10 +28,11 @@ public interface SwissTimingArchiveConfiguration extends WithQualifiedObjectIden
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -69,6 +69,6 @@ public interface SwissTimingFactory {
|
||||
|
||||
SailMasterMessage createMessage(String message);
|
||||
|
||||
SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration(String string);
|
||||
SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration(String jsonUrl, String creatorName);
|
||||
|
||||
}
|
||||
|
||||
+8
-1
@@ -5,14 +5,21 @@ import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration
|
||||
public class SwissTimingArchiveConfigurationImpl implements SwissTimingArchiveConfiguration {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final String jsonUrl;
|
||||
private final String creatorName;
|
||||
|
||||
public SwissTimingArchiveConfigurationImpl(String jsonUrl) {
|
||||
public SwissTimingArchiveConfigurationImpl(String jsonUrl, String creatorName) {
|
||||
super();
|
||||
this.jsonUrl = jsonUrl;
|
||||
this.creatorName = creatorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJsonURL() {
|
||||
return jsonUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCreatorName() {
|
||||
return creatorName;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -125,7 +125,7 @@ public class SwissTimingFactoryImpl implements SwissTimingFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration(String jsonUrl) {
|
||||
return new SwissTimingArchiveConfigurationImpl(jsonUrl);
|
||||
public SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration(String jsonUrl, String creatorName) {
|
||||
return new SwissTimingArchiveConfigurationImpl(jsonUrl, creatorName);
|
||||
}
|
||||
}
|
||||
|
||||
+11
-8
@@ -38,7 +38,7 @@ import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationWithSecurityDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingReplayRaceDTO;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
import com.sap.sse.gwt.adminconsole.AdminConsoleTableResources;
|
||||
@@ -61,7 +61,7 @@ public class SwissTimingReplayConnectorPanel extends AbstractEventManagementPane
|
||||
private final LabeledAbstractFilterablePanel<SwissTimingReplayRaceDTO> filterablePanelEvents;
|
||||
private final ListDataProvider<SwissTimingReplayRaceDTO> raceList;
|
||||
private final CellTable<SwissTimingReplayRaceDTO> raceTable;
|
||||
private final Map<String, SwissTimingArchiveConfigurationDTO> previousConfigurations;
|
||||
private final Map<String, SwissTimingArchiveConfigurationWithSecurityDTO> previousConfigurations;
|
||||
private final ListBox previousConfigurationsComboBox;
|
||||
private final TextBox jsonUrlBox;
|
||||
private final Grid grid;
|
||||
@@ -79,7 +79,7 @@ public class SwissTimingReplayConnectorPanel extends AbstractEventManagementPane
|
||||
updateJsonUrlFromSelectedPreviousConfiguration();
|
||||
}
|
||||
});
|
||||
previousConfigurations = new HashMap<String, SwissTimingArchiveConfigurationDTO>();
|
||||
previousConfigurations = new HashMap<String, SwissTimingArchiveConfigurationWithSecurityDTO>();
|
||||
getConnectionHistory();
|
||||
|
||||
jsonUrlBox = new TextBox();
|
||||
@@ -296,7 +296,7 @@ public class SwissTimingReplayConnectorPanel extends AbstractEventManagementPane
|
||||
}
|
||||
|
||||
private void getConnectionHistory() {
|
||||
sailingService.getPreviousSwissTimingArchiveConfigurations(new AsyncCallback<List<SwissTimingArchiveConfigurationDTO>>() {
|
||||
sailingService.getPreviousSwissTimingArchiveConfigurations(new AsyncCallback<List<SwissTimingArchiveConfigurationWithSecurityDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Remote Procedure Call getPreviousConfigurations() - Failure: "
|
||||
@@ -304,11 +304,11 @@ public class SwissTimingReplayConnectorPanel extends AbstractEventManagementPane
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<SwissTimingArchiveConfigurationDTO> result) {
|
||||
public void onSuccess(List<SwissTimingArchiveConfigurationWithSecurityDTO> result) {
|
||||
previousConfigurationsComboBox.clear();
|
||||
previousConfigurations.clear();
|
||||
Collections.sort(result, (c1, c2) -> c1.getJsonUrl().compareTo(c2.getJsonUrl()));
|
||||
for (SwissTimingArchiveConfigurationDTO configEntry : result) {
|
||||
for (SwissTimingArchiveConfigurationWithSecurityDTO configEntry : result) {
|
||||
String name = configEntry.getJsonUrl();
|
||||
previousConfigurations.put(name, configEntry);
|
||||
previousConfigurationsComboBox.addItem(name);
|
||||
@@ -335,8 +335,10 @@ public class SwissTimingReplayConnectorPanel extends AbstractEventManagementPane
|
||||
raceList.getList().addAll(availableSwissTimingRaces);
|
||||
filterablePanelEvents.getTextBox().setText(null);
|
||||
filterablePanelEvents.updateAll(races);
|
||||
final SwissTimingArchiveConfigurationWithSecurityDTO stConfig = new SwissTimingArchiveConfigurationWithSecurityDTO(
|
||||
swissTimingJsonUrl, null);
|
||||
// store a successful configuration in the database for later retrieval
|
||||
sailingService.storeSwissTimingArchiveConfiguration(swissTimingJsonUrl,
|
||||
sailingService.createSwissTimingArchiveConfiguration(stConfig,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
@@ -347,7 +349,8 @@ public class SwissTimingReplayConnectorPanel extends AbstractEventManagementPane
|
||||
@Override
|
||||
public void onSuccess(Void voidResult) {
|
||||
// refresh list of previous configurations
|
||||
SwissTimingArchiveConfigurationDTO stConfig = new SwissTimingArchiveConfigurationDTO(swissTimingJsonUrl);
|
||||
// TODO: refresh table
|
||||
|
||||
if (previousConfigurations.put(stConfig.getJsonUrl(), stConfig) == null) {
|
||||
previousConfigurationsComboBox.addItem(stConfig.getJsonUrl());
|
||||
}
|
||||
|
||||
+10
-3
@@ -110,7 +110,7 @@ import com.sap.sailing.gwt.ui.shared.SimulatorResultsDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SliceRacePreperationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTOWithSecurity;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationWithSecurityDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingEventRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
@@ -512,9 +512,16 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
List<String> getOverallLeaderboardNamesContaining(String leaderboardName) throws UnauthorizedException;
|
||||
|
||||
List<SwissTimingArchiveConfigurationDTO> getPreviousSwissTimingArchiveConfigurations() throws UnauthorizedException;
|
||||
List<SwissTimingArchiveConfigurationWithSecurityDTO> getPreviousSwissTimingArchiveConfigurations() throws UnauthorizedException;
|
||||
|
||||
void storeSwissTimingArchiveConfiguration(String swissTimingUrl) throws UnauthorizedException, Exception;
|
||||
void createSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto)
|
||||
throws UnauthorizedException, Exception;
|
||||
|
||||
void updateSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto)
|
||||
throws UnauthorizedException, Exception;
|
||||
|
||||
void deleteSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto)
|
||||
throws UnauthorizedException, Exception;
|
||||
|
||||
void createCourseAreas(UUID eventId, String[] courseAreaNames) throws UnauthorizedException;
|
||||
|
||||
|
||||
+10
-3
@@ -95,7 +95,7 @@ import com.sap.sailing.gwt.ui.shared.SimulatorResultsDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SliceRacePreperationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTOWithSecurity;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationWithSecurityDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingEventRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
@@ -578,9 +578,16 @@ public interface SailingServiceAsync extends FileStorageManagementGwtServiceAsyn
|
||||
void getOverallLeaderboardNamesContaining(String leaderboardName, AsyncCallback<List<String>> asyncCallback);
|
||||
|
||||
void getPreviousSwissTimingArchiveConfigurations(
|
||||
AsyncCallback<List<SwissTimingArchiveConfigurationDTO>> asyncCallback);
|
||||
AsyncCallback<List<SwissTimingArchiveConfigurationWithSecurityDTO>> asyncCallback);
|
||||
|
||||
void storeSwissTimingArchiveConfiguration(String swissTimingUrl, AsyncCallback<Void> asyncCallback);
|
||||
void createSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void updateSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void deleteSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto,
|
||||
AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, UUID defaultCourseAreaUuid,
|
||||
RegattaConfigurationDTO regattaConfiguration, Double buoyZoneRadiusInHullLengths,
|
||||
|
||||
+31
-7
@@ -454,7 +454,7 @@ import com.sap.sailing.gwt.ui.shared.SliceRacePreperationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTOWithSecurity;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingArchiveConfigurationWithSecurityDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingEventRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
@@ -5213,20 +5213,44 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SwissTimingArchiveConfigurationDTO> getPreviousSwissTimingArchiveConfigurations() {
|
||||
public List<SwissTimingArchiveConfigurationWithSecurityDTO> getPreviousSwissTimingArchiveConfigurations() {
|
||||
Iterable<SwissTimingArchiveConfiguration> configs = swissTimingAdapterPersistence
|
||||
.getSwissTimingArchiveConfigurations();
|
||||
return getSecurityService().mapAndFilterByReadPermissionForCurrentUser(
|
||||
SecuredDomainType.SWISS_TIMING_ARCHIVE_ACCOUNT, configs,
|
||||
stArchiveConfig -> new SwissTimingArchiveConfigurationDTO(stArchiveConfig.getJsonURL()));
|
||||
stArchiveConfig -> {
|
||||
SwissTimingArchiveConfigurationWithSecurityDTO config = new SwissTimingArchiveConfigurationWithSecurityDTO(
|
||||
stArchiveConfig.getJsonURL(), stArchiveConfig.getCreatorName());
|
||||
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config, config.getIdentifier());
|
||||
return config;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeSwissTimingArchiveConfiguration(String swissTimingJsonUrl) throws Exception {
|
||||
public void createSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto)
|
||||
throws Exception {
|
||||
final String currentUserName = getSecurityService().getCurrentUser().getName();
|
||||
getSecurityService().setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.SWISS_TIMING_ACCOUNT, SwissTimingArchiveConfiguration.getTypeRelativeObjectIdentifier(swissTimingJsonUrl),
|
||||
swissTimingJsonUrl, () -> swissTimingAdapterPersistence.storeSwissTimingArchiveConfiguration(
|
||||
swissTimingFactory.createSwissTimingArchiveConfiguration(swissTimingJsonUrl)));
|
||||
SecuredDomainType.SWISS_TIMING_ACCOUNT, dto.getIdentifier().getTypeRelativeObjectIdentifier(),
|
||||
dto.getName(),
|
||||
() -> swissTimingAdapterPersistence.createSwissTimingArchiveConfiguration(
|
||||
swissTimingFactory.createSwissTimingArchiveConfiguration(dto.getJsonUrl(), currentUserName)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto)
|
||||
throws Exception {
|
||||
getSecurityService().checkCurrentUserUpdatePermission(dto);
|
||||
swissTimingAdapterPersistence.updateSwissTimingArchiveConfiguration(
|
||||
swissTimingFactory.createSwissTimingArchiveConfiguration(dto.getJsonUrl(), dto.getCreatorName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteSwissTimingArchiveConfiguration(SwissTimingArchiveConfigurationWithSecurityDTO dto)
|
||||
throws Exception {
|
||||
getSecurityService().checkPermissionAndDeleteOwnershipForObjectRemoval(dto.getIdentifier(),
|
||||
() -> swissTimingAdapterPersistence.deleteSwissTimingArchiveConfiguration(swissTimingFactory
|
||||
.createSwissTimingArchiveConfiguration(dto.getJsonUrl(), dto.getCreatorName())));
|
||||
}
|
||||
|
||||
protected com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory() {
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class SwissTimingArchiveConfigurationDTO implements IsSerializable {
|
||||
private String jsonUrl;
|
||||
|
||||
SwissTimingArchiveConfigurationDTO() {}
|
||||
|
||||
public SwissTimingArchiveConfigurationDTO(String jsonUrl) {
|
||||
super();
|
||||
this.jsonUrl = jsonUrl;
|
||||
}
|
||||
|
||||
public String getJsonUrl() {
|
||||
return jsonUrl;
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sse.security.shared.HasPermissions;
|
||||
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
|
||||
import com.sap.sse.security.shared.TypeRelativeObjectIdentifier;
|
||||
import com.sap.sse.security.shared.dto.AccessControlListDTO;
|
||||
import com.sap.sse.security.shared.dto.OwnershipDTO;
|
||||
import com.sap.sse.security.shared.dto.SecuredDTO;
|
||||
import com.sap.sse.security.shared.dto.SecurityInformationDTO;
|
||||
|
||||
public class SwissTimingArchiveConfigurationWithSecurityDTO implements IsSerializable, SecuredDTO {
|
||||
private static final long serialVersionUID = 108023338445751985L;
|
||||
|
||||
private String jsonUrl;
|
||||
private String creatorName;
|
||||
private SecurityInformationDTO securityInformation = new SecurityInformationDTO();
|
||||
|
||||
SwissTimingArchiveConfigurationWithSecurityDTO() {
|
||||
}
|
||||
|
||||
public SwissTimingArchiveConfigurationWithSecurityDTO(String jsonUrl, String creatorName) {
|
||||
super();
|
||||
this.jsonUrl = jsonUrl;
|
||||
this.creatorName = creatorName;
|
||||
}
|
||||
|
||||
public String getJsonUrl() {
|
||||
return jsonUrl;
|
||||
}
|
||||
|
||||
public String getCreatorName() {
|
||||
return creatorName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccessControlListDTO getAccessControlList() {
|
||||
return securityInformation.getAccessControlList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public OwnershipDTO getOwnership() {
|
||||
return securityInformation.getOwnership();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccessControlList(AccessControlListDTO createAccessControlListDTO) {
|
||||
securityInformation.setAccessControlList(createAccessControlListDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOwnership(OwnershipDTO createOwnershipDTO) {
|
||||
securityInformation.setOwnership(createOwnershipDTO);
|
||||
}
|
||||
|
||||
public SecurityInformationDTO getSecurityInformation() {
|
||||
return securityInformation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return jsonUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HasPermissions getType() {
|
||||
return SecuredDomainType.SWISS_TIMING_ARCHIVE_ACCOUNT;
|
||||
}
|
||||
|
||||
private TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier() {
|
||||
return creatorName == null ? new TypeRelativeObjectIdentifier(jsonUrl)
|
||||
: new TypeRelativeObjectIdentifier(jsonUrl, creatorName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QualifiedObjectIdentifier getIdentifier() {
|
||||
return getType().getQualifiedObjectIdentifier(getTypeRelativeObjectIdentifier());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user