From 67e5239873ddb5dddf01ce33d756cb71082de923 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Thu, 16 May 2019 17:18:47 +0200 Subject: [PATCH 01/24] Bug5040: added ServerAction CAN_EXPORT_MASTERDATA --- .../com/sap/sse/security/shared/impl/SecuredSecurityTypes.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java index d693a0ba890..9aedbcc0f66 100644 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java @@ -83,6 +83,7 @@ public class SecuredSecurityTypes extends HasPermissionsImpl { DATA_MINING, CAN_IMPORT_MASTERDATA, + CAN_EXPORT_MASTERDATA, /** * Secures replication actions on the master side. */ From 4d6196b09684672b5d9f9e445a303d06f85a4842 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Thu, 16 May 2019 17:19:46 +0200 Subject: [PATCH 02/24] Bug 5040: added method to check if user has a server permission to SecurityService --- .../src/com/sap/sse/security/SecurityService.java | 4 +++- .../src/com/sap/sse/security/impl/SecurityServiceImpl.java | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java index 441ef4719ed..37d1ddcaa28 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java @@ -42,9 +42,9 @@ import com.sap.sse.security.shared.WithQualifiedObjectIdentifier; import com.sap.sse.security.shared.impl.AccessControlList; import com.sap.sse.security.shared.impl.Ownership; import com.sap.sse.security.shared.impl.Role; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; import com.sap.sse.security.shared.impl.User; import com.sap.sse.security.shared.impl.UserGroup; -import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; /** * A service interface for security management. Intended to be used as an OSGi service that can be registered, e.g., by @@ -606,4 +606,6 @@ public interface SecurityService extends ReplicableWithObjectInputStream T setOwnershipWithoutCheckPermissionForObjectCreationAndRevertOnError(HasPermissions type, TypeRelativeObjectIdentifier typeIdentifier, String securityDisplayName, Callable actionWithResult) { From f670492d3237ca64a5023a1a1a936e46207d1b3d Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Thu, 16 May 2019 17:20:12 +0200 Subject: [PATCH 03/24] Bug5040: added check for ServerActions.CAN_EXPORT_MASTERDATA to MasterDataResource --- .../sailing/server/gateway/jaxrs/spi/MasterDataResource.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 471b6edcdfa..914f2f5f57a 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -36,6 +36,7 @@ import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.masterdataimport.TopLevelMasterData; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sse.security.SecurityService; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; import com.sap.sse.security.shared.impl.User; @Path("/v1/masterdata/leaderboardgroups") @@ -50,9 +51,11 @@ public class MasterDataResource extends AbstractSailingServerResource { throws UnsupportedEncodingException { final SecurityService securityService = getSecurityService(); User user = securityService.getCurrentUser(); - if (user == null) { + + if (!securityService.hasCurrentUserServerPermission(ServerActions.CAN_EXPORT_MASTERDATA)) { return Response.status(Status.FORBIDDEN).build(); } + final long startTime = System.currentTimeMillis(); logger.info("Masterdataexport has started; requesting user: "+user); if (compress == null) { From 9584885623d803695486ef4b82969affa0c493ed Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Thu, 16 May 2019 17:51:29 +0200 Subject: [PATCH 04/24] Bug 5040: added permission check for RACE_MANAGER_APP_DEVICE_CONFIGURATION:READ during masterdata export --- .../sailing/server/gateway/jaxrs/spi/MasterDataResource.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 914f2f5f57a..556bb2ef3f5 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -103,8 +103,9 @@ public class MasterDataResource extends AbstractSailingServerResource { Set raceManagerDeviceConfigurations = new HashSet<>(); if (exportDeviceConfigs) { for (DeviceConfiguration deviceConfig : getAllDeviceConfigs()) { - // FIXME here permission check? - raceManagerDeviceConfigurations.add(deviceConfig); + if (securityService.hasCurrentUserReadPermission(deviceConfig)) { + raceManagerDeviceConfigurations.add(deviceConfig); + } } } ArrayList events = new ArrayList<>(); From f844c86922893e067f5318c0dbdcf9c16fced584 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Thu, 16 May 2019 18:26:21 +0200 Subject: [PATCH 05/24] Bug 5040: Customization of Competitor serialization to prune personal data in case of missing READ permission --- .../domain/base/impl/CompetitorImpl.java | 8 ++++ .../CompetitorSerializationCustomizer.java | 46 +++++++++++++++++++ .../base/impl/CompetitorWithBoatImpl.java | 9 ++++ .../gateway/jaxrs/spi/MasterDataResource.java | 29 +++++++++--- 4 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorSerializationCustomizer.java diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorImpl.java index b8f14712ff4..6236deb7432 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorImpl.java @@ -46,6 +46,14 @@ public class CompetitorImpl implements DynamicCompetitor { this.searchTag = searchTag; this.listeners = new HashSet(); } + + private Object writeReplace() { + if (CompetitorSerializationCustomizer.getCurrentCustomizer().removalOfPersonalDataNecessary(this)) { + return new CompetitorImpl(id, name, shortName, color, /* email */ null, flagImage, team, timeOnTimeFactor, + timeOnDistanceAllowancePerNauticalMile, searchTag); + } + return this; + } private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { ois.defaultReadObject(); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorSerializationCustomizer.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorSerializationCustomizer.java new file mode 100644 index 00000000000..b18bad37b63 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorSerializationCustomizer.java @@ -0,0 +1,46 @@ +package com.sap.sailing.domain.base.impl; + +import java.util.function.Supplier; + +import com.sap.sailing.domain.base.Competitor; + +public interface CompetitorSerializationCustomizer { + + boolean removalOfPersonalDataNecessary(Competitor competitor); + + public static final ThreadLocal threadLocalCustomizer = new ThreadLocal<>(); + + public static final CompetitorSerializationCustomizer defaultCustomizer = new CompetitorSerializationCustomizer() { + @Override + public boolean removalOfPersonalDataNecessary(Competitor competitor) { + return false; + } + }; + + public static CompetitorSerializationCustomizer getCurrentCustomizer() { + CompetitorSerializationCustomizer result = threadLocalCustomizer.get(); + if (result == null) { + result = defaultCustomizer; + } + return result; + } + + public static void doWithCustomizer(CompetitorSerializationCustomizer customizer, Runnable action) { + threadLocalCustomizer.set(customizer); + try { + action.run(); + } finally { + threadLocalCustomizer.remove(); + } + } + + public static T doWithCustomizer(CompetitorSerializationCustomizer customizer, Supplier action) { + threadLocalCustomizer.set(customizer); + try { + return action.get(); + } finally { + threadLocalCustomizer.remove(); + } + } + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorWithBoatImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorWithBoatImpl.java index 284cf5fa6c9..d10eb123b9f 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorWithBoatImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/CompetitorWithBoatImpl.java @@ -26,6 +26,15 @@ public class CompetitorWithBoatImpl extends CompetitorImpl implements DynamicCom competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag(), boat); } + private Object writeReplace() { + if (CompetitorSerializationCustomizer.getCurrentCustomizer().removalOfPersonalDataNecessary(this)) { + return new CompetitorWithBoatImpl(getId(), getName(), getShortName(), getColor(), /* email */ null, + getFlagImage(), getTeam(), getTimeOnTimeFactor(), getTimeOnDistanceAllowancePerNauticalMile(), + getSearchTag(), boat); + } + return this; + } + public Competitor resolve(SharedDomainFactory domainFactory) { final Competitor result; if (!hasBoat()) { diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 556bb2ef3f5..560adf76484 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -24,18 +24,23 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; + +import org.apache.shiro.SecurityUtils; + import javax.ws.rs.core.StreamingOutput; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.configuration.DeviceConfiguration; +import com.sap.sailing.domain.base.impl.CompetitorSerializationCustomizer; import com.sap.sailing.domain.common.media.MediaTrack; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; import com.sap.sailing.domain.masterdataimport.TopLevelMasterData; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sse.security.SecurityService; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.PublicReadableActions; import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; import com.sap.sse.security.shared.impl.User; @@ -130,13 +135,23 @@ public class MasterDataResource extends AbstractSailingServerResource { final TopLevelMasterData masterData = new TopLevelMasterData(groupsToExport, events, regattaRaceIds, mediaTracks, getService().getSensorFixStore(), exportWind, raceManagerDeviceConfigurations); - final StreamingOutput streamingOutput; - if (compress) { - streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime); - } else { - streamingOutput = new NonCompressingStreamingOutput(masterData, competitorIds, startTime); - } - final ResponseBuilder resp = Response.ok(streamingOutput); + final boolean compressValue= compress; + final ResponseBuilder resp = CompetitorSerializationCustomizer.doWithCustomizer(c -> { + boolean result = false; + if (!securityService.hasCurrentUserReadPermission(c)) { + SecurityUtils.getSubject().checkPermission(c.getIdentifier().getStringPermission(PublicReadableActions.READ_PUBLIC)); + result = c.getEmail() != null; + } + return result; + }, () -> { + final StreamingOutput streamingOutput; + if (compressValue) { + streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime); + } else { + streamingOutput = new NonCompressingStreamingOutput(masterData, competitorIds, startTime); + } + return Response.ok(streamingOutput); + }); if (compress) { resp.header("Content-Encoding", "gzip"); } From e4858c7b8365f4e3ce63b6ad8927ae7115eb7f25 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Mon, 20 May 2019 13:58:46 +0200 Subject: [PATCH 06/24] Bug 5040: Reworked permission checks and filtering in MasterDataResource --- .../gateway/jaxrs/spi/MasterDataResource.java | 89 +++++++++++++------ 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 560adf76484..d054a538315 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -24,11 +24,11 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; - -import org.apache.shiro.SecurityUtils; - import javax.ws.rs.core.StreamingOutput; +import org.apache.shiro.authz.AuthorizationException; + +import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.Regatta; @@ -37,6 +37,7 @@ import com.sap.sailing.domain.base.impl.CompetitorSerializationCustomizer; import com.sap.sailing.domain.common.media.MediaTrack; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; import com.sap.sailing.domain.masterdataimport.TopLevelMasterData; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sse.security.SecurityService; @@ -78,29 +79,57 @@ public class MasterDataResource extends AbstractSailingServerResource { Set groupsToExport = new HashSet(); if (requestedLeaderboardGroups.isEmpty()) { - // add all visible + // Add all visible LeaderboardGroups. + // The request will not fail due to missing LeaderboardGroup READ permissions. for (LeaderboardGroup group : allLeaderboardGroups.values()) { if (securityService.hasCurrentUserReadPermission(group)) { groupsToExport.add(group); } } } else { - // add all requested, that are visible + // Add all requested LeaderboardGroups. + // The request will fail due to missing LeaderboardGroup READ permissions. for (String name : requestedLeaderboardGroups) { LeaderboardGroup group = allLeaderboardGroups.get(name); if (group != null) { - if (securityService.hasCurrentUserReadPermission(group)) { - groupsToExport.add(group); + if (!securityService.hasCurrentUserReadPermission(group)) { + throw new AuthorizationException("No permission to read leaderboard group '" + name + "'"); } + groupsToExport.add(group); } } } final List competitorIds = new ArrayList(); for (LeaderboardGroup lg : groupsToExport) { for (Leaderboard leaderboard : lg.getLeaderboards()) { - if (securityService.hasCurrentUserReadPermission(leaderboard)) { - for (Competitor competitor : leaderboard.getAllCompetitors()) { - competitorIds.add(competitor.getId()); + // All Leaderboards/Regattas contained in the LeaderboardGroup need to be visible + // to ensure consistency during import. A partial/pruned import is not intended to take place. + if (!securityService.hasCurrentUserReadPermission(leaderboard) + || ((leaderboard instanceof RegattaLeaderboard) && !securityService + .hasCurrentUserReadPermission(((RegattaLeaderboard) leaderboard).getRegatta()))) { + throw new AuthorizationException( + "No permission to read all leaderboards and regattas of leaderboard group '" + lg.getName() + + "'"); + } + for (Competitor competitor : leaderboard.getAllCompetitors()) { + // All competitors reachable by Leaderboards contained in a LeaderboardGroup + // need to be readable (READ or READ_PUBLIC) to allow the import. + // Pruning of personal data (email) is done during serialization if the user has READ_PUBLIC but no + // READ permission. + if (!securityService.hasCurrentUserOneOfExplicitPermissions(competitor, + PublicReadableActions.READ_AND_READ_PUBLIC_ACTIONS)) { + throw new AuthorizationException("No permission to read competitor " + competitor.getId() + + " for leaderboard '" + leaderboard.getName() + "'"); + } + competitorIds.add(competitor.getId()); + } + for (Boat boat : leaderboard.getAllBoats()) { + // All boats reachable by Leaderboards contained in a LeaderboardGroup + // need to be readable (READ or READ_PUBLIC) to allow the import. + if (!securityService.hasCurrentUserOneOfExplicitPermissions(boat, + PublicReadableActions.READ_AND_READ_PUBLIC_ACTIONS)) { + throw new AuthorizationException("No permission to read boat " + boat.getId() + + " for leaderboard '" + leaderboard.getName() + "'"); } } } @@ -108,6 +137,9 @@ public class MasterDataResource extends AbstractSailingServerResource { Set raceManagerDeviceConfigurations = new HashSet<>(); if (exportDeviceConfigs) { for (DeviceConfiguration deviceConfig : getAllDeviceConfigs()) { + // DeviceConfiguration are explicitly filtered by their permissions + // because no filtering based on the selected LeaderboardGroups is done. + // This is the only way to allow importing DeviceConfigurations at all. if (securityService.hasCurrentUserReadPermission(deviceConfig)) { raceManagerDeviceConfigurations.add(deviceConfig); } @@ -115,35 +147,38 @@ public class MasterDataResource extends AbstractSailingServerResource { } ArrayList events = new ArrayList<>(); for (Event event : getService().getAllEvents()) { - if (securityService.hasCurrentUserReadPermission(event)) { - events.add(event); - } + events.add(event); } ArrayList mediaTracks = new ArrayList<>(); for (MediaTrack mediaTrack : getService().getAllMediaTracks()) { - if (securityService.hasCurrentUserReadPermission(mediaTrack)) { - mediaTracks.add(mediaTrack); - } + mediaTracks.add(mediaTrack); } Map regattaRaceIds = new HashMap<>(); for (Entry regattaRaceMap : getService().getPersistentRegattasForRaceIDs().entrySet()) { - if (securityService.hasCurrentUserReadPermission(regattaRaceMap.getValue())) { - regattaRaceIds.put(regattaRaceMap.getKey(), regattaRaceMap.getValue()); - } + regattaRaceIds.put(regattaRaceMap.getKey(), regattaRaceMap.getValue()); } final TopLevelMasterData masterData = new TopLevelMasterData(groupsToExport, events, regattaRaceIds, mediaTracks, getService().getSensorFixStore(), exportWind, raceManagerDeviceConfigurations); - final boolean compressValue= compress; - final ResponseBuilder resp = CompetitorSerializationCustomizer.doWithCustomizer(c -> { - boolean result = false; - if (!securityService.hasCurrentUserReadPermission(c)) { - SecurityUtils.getSubject().checkPermission(c.getIdentifier().getStringPermission(PublicReadableActions.READ_PUBLIC)); - result = c.getEmail() != null; + + // Checking permissions after filtering of Events to be transferred. + for (Event event: masterData.getAllEvents()) { + if (!securityService.hasCurrentUserReadPermission(event)) { + throw new AuthorizationException("No permission to read event " + event.getId()); } - return result; - }, () -> { + } + + // Checking permissions after filtering of MediaTracks to be transferred. + for (MediaTrack mediaTrack : masterData.getFilteredMediaTracks()) { + if (!securityService.hasCurrentUserReadPermission(mediaTrack)) { + throw new AuthorizationException("No permission to read media track " + mediaTrack.dbId); + } + } + + final boolean compressValue= compress; + final ResponseBuilder resp = CompetitorSerializationCustomizer + .doWithCustomizer(c -> !securityService.hasCurrentUserReadPermission(c) && c.getEmail() != null, () -> { final StreamingOutput streamingOutput; if (compressValue) { streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime); From 15d65f4c875e8659e8d0c26923cef10b527ea9af Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Tue, 21 May 2019 11:43:36 +0200 Subject: [PATCH 07/24] Bug 5040: attempt to fix Unit-Test for MasterDataImport --- .../com/sap/sailing/server/test/MasterDataImportTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index 9a944a4da70..0679e3a175b 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -37,6 +37,7 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.mockito.Matchers; import org.mockito.Mockito; import com.mongodb.WriteConcern; @@ -152,6 +153,8 @@ import com.sap.sse.mongodb.MongoDBConfiguration; import com.sap.sse.mongodb.MongoDBService; import com.sap.sse.security.SecurityService; import com.sap.sse.security.shared.WithQualifiedObjectIdentifier; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.PublicReadableActions; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; import com.sap.sse.security.shared.impl.User; import com.sap.sse.security.shared.impl.UserGroupImpl; import com.sap.sse.shared.media.ImageDescriptor; @@ -205,6 +208,10 @@ public class MasterDataImportTest { Mockito.doReturn(true).when(securityService) .hasCurrentUserReadPermission(Mockito.any(WithQualifiedObjectIdentifier.class)); + Mockito.doReturn(true).when(securityService) + .hasCurrentUserServerPermission(ServerActions.CAN_EXPORT_MASTERDATA); + Mockito.doReturn(true).when(securityService).hasCurrentUserOneOfExplicitPermissions( + Mockito.any(WithQualifiedObjectIdentifier.class), Matchers. anyVararg()); Mockito.doReturn(true).when(fakeSubject).isAuthenticated(); From 1498e5e7e77459ea3162a248694ec80cde4dd202 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Tue, 21 May 2019 14:08:51 +0200 Subject: [PATCH 08/24] Bug 5040: added CAN_EXPORT_MASTERDATA to SecuredSecurityTypes.ALL_ACTIONS --- .../com/sap/sse/security/shared/impl/SecuredSecurityTypes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java index 9aedbcc0f66..8f434d81df9 100644 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/SecuredSecurityTypes.java @@ -98,7 +98,7 @@ public class SecuredSecurityTypes extends HasPermissionsImpl { READ_REPLICATOR; private static final Action[] ALL_ACTIONS = new Action[] { CONFIGURE_FILE_STORAGE, CONFIGURE_LOCAL_SERVER, - CONFIGURE_REMOTE_INSTANCES, CREATE_OBJECT, CAN_IMPORT_MASTERDATA, DATA_MINING, + CONFIGURE_REMOTE_INSTANCES, CREATE_OBJECT, CAN_IMPORT_MASTERDATA, CAN_EXPORT_MASTERDATA, DATA_MINING, REPLICATE, START_REPLICATION, READ_REPLICATOR, DefaultActions.CHANGE_OWNERSHIP, DefaultActions.CHANGE_ACL, DefaultActions.UPDATE }; } From aabb0da7b89820054b0456d304d0fbf035e1f470 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Tue, 21 May 2019 14:27:34 +0200 Subject: [PATCH 09/24] Bug 5040: fixed server permission check --- .../src/com/sap/sse/security/impl/SecurityServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java b/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java index 62dadf828be..b26dc36c206 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java @@ -1704,7 +1704,7 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat public boolean hasCurrentUserServerPermission(ServerActions action) { return SecurityUtils.getSubject().isPermitted( SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.CREATE_OBJECT, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + action, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); } @Override From bf0a73d9b538c267a38f839dd8bf7e916d6241b6 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Tue, 21 May 2019 14:28:15 +0200 Subject: [PATCH 10/24] Bug 5040: filter media tracks instead of failing the master data export if the user is missing a read permission on only one media track --- .../domain/masterdataimport/TopLevelMasterData.java | 6 ++++++ .../server/gateway/jaxrs/spi/MasterDataResource.java | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java index 9fbe9849bd8..dca9284ad2d 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java @@ -317,4 +317,10 @@ public class TopLevelMasterData implements Serializable { public Iterable getDeviceConfigurations() { return deviceConfigurations; } + + public void setFilteredMediaTracks(Collection mediaTracksToKeep) { + this.filteredMediaTracks.clear(); + this.filteredMediaTracks.addAll(mediaTracksToKeep); + + } } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index d054a538315..5ad306acceb 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -7,6 +7,7 @@ import java.io.OutputStream; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -170,12 +171,17 @@ public class MasterDataResource extends AbstractSailingServerResource { } // Checking permissions after filtering of MediaTracks to be transferred. + Collection mediaTracksToKeep = new ArrayList<>(); for (MediaTrack mediaTrack : masterData.getFilteredMediaTracks()) { if (!securityService.hasCurrentUserReadPermission(mediaTrack)) { - throw new AuthorizationException("No permission to read media track " + mediaTrack.dbId); + logger.info("No permission to read media track " + mediaTrack.dbId + " -> pruning."); + } + else { + mediaTracksToKeep.add(mediaTrack); } } - + masterData.setFilteredMediaTracks(mediaTracksToKeep); + final boolean compressValue= compress; final ResponseBuilder resp = CompetitorSerializationCustomizer .doWithCustomizer(c -> !securityService.hasCurrentUserReadPermission(c) && c.getEmail() != null, () -> { From 9bdbb25b9aa2f53b465f391cca49a2910a8c957d Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Tue, 21 May 2019 15:43:19 +0200 Subject: [PATCH 11/24] Revert "Bug 5040: filter media tracks instead of failing the master data export if the user is missing a read permission on only one media track" This reverts commit bf0a73d9b538c267a38f839dd8bf7e916d6241b6. --- .../domain/masterdataimport/TopLevelMasterData.java | 6 ------ .../server/gateway/jaxrs/spi/MasterDataResource.java | 10 ++-------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java index dca9284ad2d..9fbe9849bd8 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/masterdataimport/TopLevelMasterData.java @@ -317,10 +317,4 @@ public class TopLevelMasterData implements Serializable { public Iterable getDeviceConfigurations() { return deviceConfigurations; } - - public void setFilteredMediaTracks(Collection mediaTracksToKeep) { - this.filteredMediaTracks.clear(); - this.filteredMediaTracks.addAll(mediaTracksToKeep); - - } } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 5ad306acceb..d054a538315 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -7,7 +7,6 @@ import java.io.OutputStream; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -171,17 +170,12 @@ public class MasterDataResource extends AbstractSailingServerResource { } // Checking permissions after filtering of MediaTracks to be transferred. - Collection mediaTracksToKeep = new ArrayList<>(); for (MediaTrack mediaTrack : masterData.getFilteredMediaTracks()) { if (!securityService.hasCurrentUserReadPermission(mediaTrack)) { - logger.info("No permission to read media track " + mediaTrack.dbId + " -> pruning."); - } - else { - mediaTracksToKeep.add(mediaTrack); + throw new AuthorizationException("No permission to read media track " + mediaTrack.dbId); } } - masterData.setFilteredMediaTracks(mediaTracksToKeep); - + final boolean compressValue= compress; final ResponseBuilder resp = CompetitorSerializationCustomizer .doWithCustomizer(c -> !securityService.hasCurrentUserReadPermission(c) && c.getEmail() != null, () -> { From 8ceab16f3a6ec7a5233b342ad19ac27c0dd7d932 Mon Sep 17 00:00:00 2001 From: Steffen Jacobs Date: Tue, 21 May 2019 15:58:36 +0200 Subject: [PATCH 12/24] Bug 5040: attempt to fix MediaReplicationTest.testMaterDataImportForMediaTracks --- .../server/replication/test/MediaReplicationTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/MediaReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/MediaReplicationTest.java index ba0259953f0..ba103027386 100644 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/MediaReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/MediaReplicationTest.java @@ -22,7 +22,9 @@ import java.util.UUID; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; +import org.junit.Assert; import org.junit.Test; +import org.mockito.Matchers; import org.mockito.Mockito; import com.sap.sailing.domain.base.DomainFactory; @@ -50,11 +52,11 @@ import com.sap.sse.mongodb.MongoDBService; import com.sap.sse.security.SecurityService; import com.sap.sse.security.interfaces.UserImpl; import com.sap.sse.security.shared.WithQualifiedObjectIdentifier; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.PublicReadableActions; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; import com.sap.sse.security.shared.impl.User; import com.sap.sse.security.shared.impl.UserGroupImpl; -import org.junit.Assert; - public class MediaReplicationTest extends AbstractServerReplicationTest { private void waitSomeTime() throws InterruptedException { @@ -202,7 +204,10 @@ public class MediaReplicationTest extends AbstractServerReplicationTest { Mockito.doNothing().when(securityService).checkCurrentUserReadPermission(Mockito.any()); Mockito.doReturn(true).when(securityService) .hasCurrentUserReadPermission(Mockito.any(WithQualifiedObjectIdentifier.class)); - + Mockito.doReturn(true).when(securityService) + .hasCurrentUserServerPermission(ServerActions.CAN_EXPORT_MASTERDATA); + Mockito.doReturn(true).when(securityService).hasCurrentUserOneOfExplicitPermissions( + Mockito.any(WithQualifiedObjectIdentifier.class), Matchers. anyVararg()); // Setup source service RacingEventServiceImpl sourceService = Mockito.spy(new RacingEventServiceImpl()); From d32002074bd088d06ab3adb48f748ffacc7b20b1 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Wed, 22 May 2019 13:16:43 +0200 Subject: [PATCH 13/24] Bug 5040: Adjusted pruning of competitors' email adresses in MasterDataResource --- .../gateway/jaxrs/spi/MasterDataResource.java | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index d054a538315..8d5307c6b4b 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -176,21 +176,17 @@ public class MasterDataResource extends AbstractSailingServerResource { } } - final boolean compressValue= compress; - final ResponseBuilder resp = CompetitorSerializationCustomizer - .doWithCustomizer(c -> !securityService.hasCurrentUserReadPermission(c) && c.getEmail() != null, () -> { - final StreamingOutput streamingOutput; - if (compressValue) { - streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime); - } else { - streamingOutput = new NonCompressingStreamingOutput(masterData, competitorIds, startTime); - } - return Response.ok(streamingOutput); - }); + final StreamingOutput streamingOutput; + if (compress) { + streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime, securityService); + } else { + streamingOutput = new NonCompressingStreamingOutput(masterData, competitorIds, startTime, securityService); + } + ResponseBuilder resp = Response.ok(streamingOutput); if (compress) { resp.header("Content-Encoding", "gzip"); } - Response builtResponse = resp.build(); + final Response builtResponse = resp.build(); long timeToExport = System.currentTimeMillis() - startTime; logger.info(String.format("Took %s ms to start masterdataexport-streaming.", timeToExport)); return builtResponse; @@ -204,39 +200,50 @@ public class MasterDataResource extends AbstractSailingServerResource { private final TopLevelMasterData masterData; private final List competitorIds; private final long startTime; + private final SecurityService securityService; - protected AbstractStreamingOutput(TopLevelMasterData masterData, List competitorIds, long startTime) { + protected AbstractStreamingOutput(TopLevelMasterData masterData, List competitorIds, long startTime, SecurityService securityService) { super(); this.masterData = masterData; this.competitorIds = competitorIds; this.startTime = startTime; + this.securityService = securityService; } protected abstract OutputStream wrapOutputStream(OutputStream outputStream) throws IOException; @Override public void write(OutputStream output) throws IOException, WebApplicationException { - ObjectOutputStream objectOutputStream = null; - try { - OutputStream gzipOrNot = wrapOutputStream(output); - OutputStream outputStreamWithByteCounter = new ByteCountOutputStreamDecorator(gzipOrNot); - objectOutputStream = new ObjectOutputStream(outputStreamWithByteCounter); - masterData.setMasterDataExportFlagOnRaceColumns(true); - // Actual start of streaming - writeObjects(competitorIds, masterData, objectOutputStream); - } finally { - objectOutputStream.close(); - masterData.setMasterDataExportFlagOnRaceColumns(false); - } - long timeToExport = System.currentTimeMillis() - startTime; - logger.info(String.format("Took %s ms to finish masterdataexport", timeToExport)); + CompetitorSerializationCustomizer + .doWithCustomizer(c -> { + return !securityService.hasCurrentUserReadPermission(c) && c.getEmail() != null; + }, () -> { + try { + ObjectOutputStream objectOutputStream = null; + try { + OutputStream gzipOrNot = wrapOutputStream(output); + OutputStream outputStreamWithByteCounter = new ByteCountOutputStreamDecorator(gzipOrNot); + objectOutputStream = new ObjectOutputStream(outputStreamWithByteCounter); + masterData.setMasterDataExportFlagOnRaceColumns(true); + // Actual start of streaming + writeObjects(competitorIds, masterData, objectOutputStream); + } finally { + objectOutputStream.close(); + masterData.setMasterDataExportFlagOnRaceColumns(false); + } + long timeToExport = System.currentTimeMillis() - startTime; + logger.info(String.format("Took %s ms to finish masterdataexport", timeToExport)); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); } } private class NonCompressingStreamingOutput extends AbstractStreamingOutput { protected NonCompressingStreamingOutput(TopLevelMasterData masterData, List competitorIds, - long startTime) { - super(masterData, competitorIds, startTime); + long startTime, SecurityService securityService) { + super(masterData, competitorIds, startTime, securityService); } @Override @@ -247,8 +254,8 @@ public class MasterDataResource extends AbstractSailingServerResource { private class CompressingStreamingOutput extends AbstractStreamingOutput { protected CompressingStreamingOutput(TopLevelMasterData masterData, List competitorIds, - long startTime) { - super(masterData, competitorIds, startTime); + long startTime, SecurityService securityService) { + super(masterData, competitorIds, startTime, securityService); } @Override From e4fe92476ac36575492b603632ba95a8ac66c2ec Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 25 May 2019 11:11:57 +0200 Subject: [PATCH 14/24] added alias names for boat class "Star" Change-Id: I1bb329fd41820776a8c560036cd0b0e38dfb04b0 --- .../src/com/sap/sailing/domain/common/BoatClassMasterdata.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java index 3b5518c248d..65206d76c12 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java @@ -108,7 +108,7 @@ public enum BoatClassMasterdata { SPLASH_BLUE ("Splash Blue", true, 3.50, 1.50, BoatHullType.MONOHULL, false, "Splash_Blue"), SPLASH_RED ("Splash Red", true, 3.50, 1.50, BoatHullType.MONOHULL, false, "Splash_Red"), SPLASH_GREEN ("Splash Green", true, 3.50, 1.50, BoatHullType.MONOHULL, false, "Splash_Green"), - STAR ("Star", true, 6.92, 1.74, BoatHullType.MONOHULL, false, "STR"), + STAR ("Star", true, 6.92, 1.74, BoatHullType.MONOHULL, false, "STR", "STARBOOT", "STARBOAT"), STREAMLINE ("Streamline", true, 7.15, 2.55, BoatHullType.MONOHULL, true), SUNBEAM_22 ("Sunbeam 22", true, 6.70, 2.15, BoatHullType.MONOHULL, true, "Sunbeam 22.1"), SWAN_45 ("Swan 45", true, 13.83, 3.91, BoatHullType.MONOHULL, true, "Swan", "Swan-45"), From 6bdb973ff9da925cfd640f4b71dea1a524232afe Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 25 May 2019 12:12:28 +0200 Subject: [PATCH 15/24] bug5053: obtain boat from CompetitorWithBoat or race log if possible Change-Id: Ib2992ac2aaa417556970c0c9378039111963d7d2 --- .../impl/AbstractLeaderboardWithCache.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java index 3f9d47db486..db9d59f35a4 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardWithCache.java @@ -27,8 +27,10 @@ import java.util.logging.Logger; import com.sap.sailing.domain.abstractlog.race.InvalidatesLeaderboardCache; import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; +import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.Fleet; @@ -585,8 +587,24 @@ public abstract class AbstractLeaderboardWithCache implements Leaderboard { LeaderboardEntryDTO entryDTO = new LeaderboardEntryDTO(); TrackedRace trackedRace = raceColumn.getTrackedRace(competitor); entryDTO.race = trackedRace == null ? null : trackedRace.getRaceIdentifier(); - // TODO bug2822: Should this rather come from raceColumn.getBoatOfCompetitor() ? - entryDTO.boat = trackedRace == null ? null : baseDomainFactory.convertToBoatDTO(trackedRace.getBoatOfCompetitor(competitor)); + Boat boat; + if (trackedRace != null) { + boat = trackedRace.getBoatOfCompetitor(competitor); + } else { + // check if it's a CompetitorWithBoat: + if (competitor.hasBoat()) { + boat = ((CompetitorWithBoat) competitor).getBoat(); + } else { + final Fleet fleetOfCompetitor = raceColumn.getFleetOfCompetitor(competitor); + if (fleetOfCompetitor != null) { + final Map competitorsAndTheirBoats = raceColumn.getCompetitorsRegisteredInRacelog(fleetOfCompetitor); + boat = competitorsAndTheirBoats.get(competitor); + } else { + boat = null; + } + } + } + entryDTO.boat = boat == null ? null : baseDomainFactory.convertToBoatDTO(boat); entryDTO.totalPoints = entry.getTotalPoints(); if (fillTotalPointsUncorrected) { entryDTO.totalPointsUncorrected = entry.getTotalPointsUncorrected(); From d3698bc608d60f40b174040010ba244b6178ecd7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 25 May 2019 22:51:43 +0200 Subject: [PATCH 16/24] bug5054: use ConcurrentWeakHashMap instead of WeakHashMap for SecurityWebSessionManager.sessionsAlreadyScheduledForOnChange Change-Id: I47b3418b177ebaa00c526952ad05ad1b062220ab --- .../src/com/sap/sse/security/SecurityWebSessionManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java index ee10cc17df9..c3783bdba2f 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java @@ -1,7 +1,5 @@ package com.sap.sse.security; -import java.util.WeakHashMap; - import org.apache.shiro.session.InvalidSessionException; import org.apache.shiro.session.Session; import org.apache.shiro.session.SessionException; @@ -13,6 +11,7 @@ import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import com.sap.sse.common.Duration; import com.sap.sse.common.impl.MillisecondsDurationImpl; import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.concurrent.ConcurrentWeakHashMap; import com.sap.sse.util.TimerWithRunnable; /** @@ -39,7 +38,7 @@ public class SecurityWebSessionManager extends DefaultWebSessionManager { */ private static final Duration MAX_DURATION_AFTER_WHICH_TO_PING_SESSION = Duration.ONE_HOUR; - private static final WeakHashMap sessionsAlreadyScheduledForOnChange = new WeakHashMap<>(); + private static final ConcurrentWeakHashMap sessionsAlreadyScheduledForOnChange = new ConcurrentWeakHashMap<>(); public SecurityWebSessionManager() { super(); From e75d1b17b844933165a08013da26f2707fedee7a Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 27 May 2019 10:03:50 +0200 Subject: [PATCH 17/24] aftermath for d3698bc608d60f40b174040010ba244b6178ecd7: ConcurrentWeakHashMap cannot deal with null values; using dummy object instead Change-Id: I2f3c892aed8e35ffc3efda098e1ff2d611250a48 --- .../src/com/sap/sse/security/SecurityWebSessionManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java index c3783bdba2f..e13eecb32b6 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityWebSessionManager.java @@ -38,7 +38,9 @@ public class SecurityWebSessionManager extends DefaultWebSessionManager { */ private static final Duration MAX_DURATION_AFTER_WHICH_TO_PING_SESSION = Duration.ONE_HOUR; - private static final ConcurrentWeakHashMap sessionsAlreadyScheduledForOnChange = new ConcurrentWeakHashMap<>(); + private static final Object DUMMY = new Object(); // for use as dummy value in sessionsAlreadyScheduledForOnChange + + private static final ConcurrentWeakHashMap sessionsAlreadyScheduledForOnChange = new ConcurrentWeakHashMap<>(); public SecurityWebSessionManager() { super(); @@ -55,7 +57,7 @@ public class SecurityWebSessionManager extends DefaultWebSessionManager { private void triggerOnChangeLatestInHalfTimeoutPeriod(Session s) { Duration sendDurationLatestIn = new MillisecondsDurationImpl(s.getTimeout()).minus(MAX_DURATION_ASSUMED_FOR_MESSAGE_DELIVERY); if (!sessionsAlreadyScheduledForOnChange.containsKey(s)) { - sessionsAlreadyScheduledForOnChange.put(s, null); + sessionsAlreadyScheduledForOnChange.put(s, DUMMY); timer.schedule(()->{ onChange(s); sessionsAlreadyScheduledForOnChange.remove(s); }, MillisecondsTimePoint.now().plus( sendDurationLatestIn.compareTo(MAX_DURATION_AFTER_WHICH_TO_PING_SESSION) > 0 ? From 9f965a9218b779e0dd3fb6fe3616b2861af2b443 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Mon, 27 May 2019 10:36:18 +0200 Subject: [PATCH 18/24] Bug 5040: Improved permission check in MasterDataResource and reduced code duplication by introducing SecurityService.checkCurrentUserServerPermission --- .../gwt/ui/server/DataMiningServiceImpl.java | 14 ++++------ .../gwt/ui/server/SailingServiceImpl.java | 28 +++++-------------- .../gateway/jaxrs/spi/MasterDataResource.java | 5 +--- .../impl/ExpeditionAllInOneImporter.java | 8 +----- .../com/sap/sse/security/SecurityService.java | 11 ++++++++ .../security/impl/SecurityServiceImpl.java | 18 ++++++++---- 6 files changed, 38 insertions(+), 46 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java index 179c371170c..e92a60cad26 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java @@ -14,13 +14,11 @@ import java.util.Locale; import java.util.Map; import java.util.Map.Entry; -import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.osgi.framework.BundleContext; import org.osgi.util.tracker.ServiceTracker; import com.sap.sailing.server.interfaces.RacingEventService; -import com.sap.sse.ServerInfo; import com.sap.sse.common.settings.SerializableSettings; import com.sap.sse.datamining.DataMiningServer; import com.sap.sse.datamining.Query; @@ -51,7 +49,6 @@ import com.sap.sse.datamining.shared.impl.dto.ReducedDimensionsDTO; import com.sap.sse.datamining.shared.impl.dto.StoredDataMiningQueryDTOImpl; import com.sap.sse.datamining.ui.client.DataMiningService; import com.sap.sse.gwt.server.ProxiedRemoteServiceServlet; -import com.sap.sse.gwt.client.ServerInfoDTO; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.security.SecurityService; import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; @@ -74,7 +71,7 @@ public class DataMiningServiceImpl extends ProxiedRemoteServiceServlet implement dataMiningServerTracker = createAndOpenDataMiningServerTracker(context); securityServiceTracker = ServiceTrackerFactory.createAndOpen(context, SecurityService.class); - storedDataMiningQueryPersistor = new StoredDataMiningQueryPersisterImpl(securityServiceTracker.getService()); + storedDataMiningQueryPersistor = new StoredDataMiningQueryPersisterImpl(getSecurityService()); dtoFactory = new DataMiningDTOFactory(); } @@ -89,6 +86,10 @@ public class DataMiningServiceImpl extends ProxiedRemoteServiceServlet implement private DataMiningServer getDataMiningServer() { return dataMiningServerTracker.getService(); } + + private SecurityService getSecurityService() { + return securityServiceTracker.getService(); + } @Override public Date getComponentsChangedTimepoint() { @@ -116,10 +117,7 @@ public class DataMiningServiceImpl extends ProxiedRemoteServiceServlet implement * if permission does not exist */ private void checkDataMiningPermission() { - // TODO: should be moved to one place (not the ServerInfoDTO) -> could not be moved to ServerInfo, since - // sse.security is not available - SecurityUtils.getSubject().checkPermission(new ServerInfoDTO(ServerInfo.getName(), ServerInfo.getBuildVersion()) - .getIdentifier().getStringPermission(ServerActions.DATA_MINING)); + getSecurityService().checkCurrentUserServerPermission(ServerActions.DATA_MINING); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index a4ee5565d2f..dd232b6c28e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -4290,9 +4290,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet @Override public ReplicationStateDTO getReplicaInfo() { - SecurityUtils.getSubject().checkPermission( - SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier(ServerActions.READ_REPLICATOR, - new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.READ_REPLICATOR); ReplicationService service = getReplicationService(); Set replicaDTOs = new HashSet(); for (ReplicaDescriptor replicaDescriptor : service.getReplicaInfo()) { @@ -4333,9 +4331,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet public void startReplicatingFromMaster(String messagingHost, String masterHostName, String exchangeName, int servletPort, int messagingPort, String usernameOrNull, String passwordOrNull) throws IOException, ClassNotFoundException, InterruptedException { - SecurityUtils.getSubject() - .checkPermission(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.START_REPLICATION, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.START_REPLICATION); // The queue name must always be the same for this server. In order to achieve // this we're using the unique server identifier final ReplicationService replicationService = getReplicationService(); @@ -5126,9 +5122,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet @Override public void updateServerConfiguration(ServerConfigurationDTO serverConfiguration) { - SecurityUtils.getSubject() - .checkPermission(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.CONFIGURE_LOCAL_SERVER, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.CONFIGURE_LOCAL_SERVER); getService().apply(new UpdateServerConfiguration( new SailingServerConfigurationImpl(serverConfiguration.isStandaloneServer()))); if (serverConfiguration.isSelfService() != null) { @@ -5623,9 +5617,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet @Override public void stopReplicatingFromMaster() { - SecurityUtils.getSubject() - .checkPermission(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.START_REPLICATION, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.START_REPLICATION); try { getReplicationService().stopToReplicateFromMaster(); } catch (IOException e) { @@ -5636,9 +5628,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet @Override public void stopAllReplicas() { - SecurityUtils.getSubject() - .checkPermission(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.REPLICATE, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.REPLICATE); try { getReplicationService().stopAllReplicas(); } catch (IOException e) { @@ -5649,9 +5639,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet @Override public void stopSingleReplicaInstance(String identifier) { - SecurityUtils.getSubject() - .checkPermission(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.REPLICATE, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.REPLICATE); UUID uuid = UUID.fromString(identifier); try { getReplicationService().unregisterReplica(uuid); @@ -5767,9 +5755,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet public UUID importMasterData(final String urlAsString, final String[] groupNames, final boolean override, final boolean compress, final boolean exportWind, final boolean exportDeviceConfigurations, String targetServerUsername, String targetServerPassword) { - // FIXME should the targetserver also check this? - SecurityUtils.getSubject().isPermitted(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier( - ServerActions.CAN_IMPORT_MASTERDATA, new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + getSecurityService().checkCurrentUserServerPermission(ServerActions.CAN_IMPORT_MASTERDATA); String token = RemoteServerUtil.resolveBearerTokenForRemoteServer(urlAsString, targetServerUsername, targetServerPassword); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 8d5307c6b4b..6f30203161e 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -23,7 +23,6 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; -import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.StreamingOutput; import org.apache.shiro.authz.AuthorizationException; @@ -58,9 +57,7 @@ public class MasterDataResource extends AbstractSailingServerResource { final SecurityService securityService = getSecurityService(); User user = securityService.getCurrentUser(); - if (!securityService.hasCurrentUserServerPermission(ServerActions.CAN_EXPORT_MASTERDATA)) { - return Response.status(Status.FORBIDDEN).build(); - } + securityService.checkCurrentUserServerPermission(ServerActions.CAN_EXPORT_MASTERDATA); final long startTime = System.currentTimeMillis(); logger.info("Masterdataexport has started; requesting user: "+user); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/ExpeditionAllInOneImporter.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/ExpeditionAllInOneImporter.java index 94249ca9a1c..025002e3592 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/ExpeditionAllInOneImporter.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/ExpeditionAllInOneImporter.java @@ -26,7 +26,6 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; import org.apache.commons.fileupload.FileItem; -import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; import org.json.simple.parser.ParseException; @@ -96,7 +95,6 @@ import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard import com.sap.sailing.server.operationaltransformation.UpdateEvent; import com.sap.sailing.server.security.PermissionAwareRaceTrackingHandler; import com.sap.sailing.server.util.WaitForTrackedRaceUtil; -import com.sap.sse.ServerInfo; import com.sap.sse.common.Duration; import com.sap.sse.common.NoCorrespondingServiceRegisteredException; import com.sap.sse.common.TimePoint; @@ -108,8 +106,6 @@ import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.security.SecurityService; import com.sap.sse.security.shared.HasPermissions.DefaultActions; -import com.sap.sse.security.shared.TypeRelativeObjectIdentifier; -import com.sap.sse.security.shared.impl.SecuredSecurityTypes; import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; /** @@ -287,9 +283,7 @@ public class ExpeditionAllInOneImporter { public ImporterResult importFiles(final String filenameWithSuffix, final FileItem fileItem, final String boatClassName, ImportMode importMode, String existingRegattaName, boolean importStartData) throws AllInOneImportException, IOException, FormatNotSupportedException { - SecurityUtils.getSubject().checkPermission( - SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier(ServerActions.CREATE_OBJECT, - new TypeRelativeObjectIdentifier(ServerInfo.getName()))); + securityService.checkCurrentUserServerPermission(ServerActions.CREATE_OBJECT); final List errors = new ArrayList<>(); final String importTimeString = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.now(ZoneOffset.UTC)); final String filename = ExpeditionImportFilenameUtils.truncateFilenameExtentions(filenameWithSuffix); diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java index 37d1ddcaa28..60afdbb4eb0 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java @@ -42,6 +42,7 @@ import com.sap.sse.security.shared.WithQualifiedObjectIdentifier; import com.sap.sse.security.shared.impl.AccessControlList; import com.sap.sse.security.shared.impl.Ownership; import com.sap.sse.security.shared.impl.Role; +import com.sap.sse.security.shared.impl.SecuredSecurityTypes; import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions; import com.sap.sse.security.shared.impl.User; import com.sap.sse.security.shared.impl.UserGroup; @@ -606,6 +607,16 @@ public interface SecurityService extends ReplicableWithObjectInputStream Date: Mon, 27 May 2019 11:15:32 +0200 Subject: [PATCH 19/24] handle empty boat class during M2S import using ? as default; removed permission filter for M2S import that was too strict Change-Id: I79cc9e74c1de9e4ce55fc6ea01c68fd07ce34a5a --- .../StructureImportManagementPanel.java | 3 +-- .../gwt/ui/server/SailingServiceImpl.java | 4 +--- .../release_notes_admin.html | 6 ++++++ .../xrr/structureimport/StructureImporter.java | 17 ++++++++++++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java index d881cbbac40..ee8149f72fa 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/StructureImportManagementPanel.java @@ -452,8 +452,7 @@ public class StructureImportManagementPanel extends SimplePanel implements Regat return result; } - private void createRegattas(final Iterable selectedOriginalRegattasFromXRR, - EventDTO newEvent) { + private void createRegattas(final Iterable selectedOriginalRegattasFromXRR, EventDTO newEvent) { eventManagementPanel.fillEvents(); final Set regattaConfigurationsToCreate = new HashSet<>(); for (RegattaDTO originalRegattaFromXRR : selectedOriginalRegattasFromXRR) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index d4192234640..bc7d7da738d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -5427,9 +5427,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet List regattaDTOs = new ArrayList(); Iterable regattas = structureImporter.getRegattas(parsedEvent); for (Regatta regatta : regattas) { - if (getSecurityService().hasCurrentUserReadPermission(regatta)) { - regattaDTOs.add(convertToRegattaDTO(regatta)); - } + regattaDTOs.add(convertToRegattaDTO(regatta)); } return regattaDTOs; } diff --git a/java/com.sap.sailing.www/release_notes_admin.html b/java/com.sap.sailing.www/release_notes_admin.html index 9102203011c..14e23fab71c 100755 --- a/java/com.sap.sailing.www/release_notes_admin.html +++ b/java/com.sap.sailing.www/release_notes_admin.html @@ -39,6 +39,12 @@ the current session's user as their owner, and the current session's user's default creation group as their owning group. +
  • Fixed issues with Manage2Sail regatta structure import: Imports of regattas with + no "ClassName" property, such as handicap / Yardstick regattas, will now create + regattas with "?" as boat class name to avoid other problems; furthermore, + due to a permission check that was too restrictive, regattas to import could not + be seen unless the user had "super-admin" power. +
  • April 2019

    diff --git a/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java b/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java index f5f77368012..cb0c8483d56 100755 --- a/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java +++ b/java/com.sap.sailing.xrr.structureimport/src/com/sap/sailing/xrr/structureimport/StructureImporter.java @@ -30,6 +30,7 @@ import com.sap.sailing.domain.base.impl.PersonImpl; import com.sap.sailing.domain.base.impl.RegattaImpl; import com.sap.sailing.domain.base.impl.SeriesImpl; import com.sap.sailing.domain.base.impl.TeamImpl; +import com.sap.sailing.domain.common.BoatClassMasterdata; import com.sap.sailing.domain.common.CompetitorRegistrationType; import com.sap.sailing.domain.common.FleetColors; import com.sap.sailing.domain.common.LeaderboardNameConstants; @@ -64,6 +65,7 @@ public class StructureImporter { private LinkedHashMap boatForPerson; private final DomainFactory baseDomainFactory; private final SetRacenumberStrategy setRacenumberStrategy; + private final static String UNKNOWN_BOATCLASS_NAME = "?"; public StructureImporter(SetRacenumberStrategy setRacenumber, DomainFactory baseDomainFactory) { this.setRacenumberStrategy = setRacenumber; @@ -98,9 +100,18 @@ public class StructureImporter { BuildStructure buildStructure = new BuildStructure(races); final TimePoint startDate = null; // TODO can regatta start time be inferred from XRR document? final TimePoint endDate = null; // TODO can regatta end time be inferred from XRR document? - RegattaImpl regatta = new RegattaImpl(RegattaImpl.getDefaultName(event.getTitle(), ((Division) event - .getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()), - baseDomainFactory.getOrCreateBoatClass(result.getA().getBoatClass()), + final String regattaName = RegattaImpl.getDefaultName(event.getTitle(), ((Division) event + .getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()); + final String boatClassName; + if (result.getA().getBoatClass() != null) { + boatClassName = result.getA().getBoatClass(); + } else { + // we need a boat class; use some default + logger.warning("No boat class set in regatta to import: "+regattaName+". Setting to \""+UNKNOWN_BOATCLASS_NAME+"\""); + boatClassName = UNKNOWN_BOATCLASS_NAME; + } + RegattaImpl regatta = new RegattaImpl(regattaName, + baseDomainFactory.getOrCreateBoatClass(boatClassName), /* canBoatsOfCompetitorsChangePerRace */ true, CompetitorRegistrationType.CLOSED, startDate, endDate, getSeries(buildStructure), false, this.baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getEventID(), null, From 8e1191f1850ee6d02abf392c2122d3b443f857d2 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Mon, 27 May 2019 12:58:29 +0200 Subject: [PATCH 20/24] Bug 5040: Implemented logging of AuthorizationExceptions in REST APIs --- .../ShiroAuthorizationExceptionTo401ResponseMapper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/ShiroAuthorizationExceptionTo401ResponseMapper.java b/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/ShiroAuthorizationExceptionTo401ResponseMapper.java index bac0245a0f0..ff7e10b8e75 100755 --- a/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/ShiroAuthorizationExceptionTo401ResponseMapper.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/ShiroAuthorizationExceptionTo401ResponseMapper.java @@ -1,5 +1,8 @@ package com.sap.sse.security.jaxrs; +import java.util.logging.Level; +import java.util.logging.Logger; + import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.ext.ExceptionMapper; @@ -9,8 +12,10 @@ import org.apache.shiro.authz.AuthorizationException; @Provider public class ShiroAuthorizationExceptionTo401ResponseMapper implements ExceptionMapper { + private static final Logger logger = Logger.getLogger(ShiroAuthorizationExceptionTo401ResponseMapper.class.getName()); @Override public Response toResponse(AuthorizationException exception) { + logger.log(Level.WARNING, "AuthorizationException occurred in REST call: " + exception.getMessage()); return Response.status(Status.UNAUTHORIZED).entity(exception.getMessage()).build(); } } From f2fe1e3ac7a8899f4b804b1f4a8d26d5135b5112 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Mon, 27 May 2019 13:17:53 +0200 Subject: [PATCH 21/24] Bug 5040: Added release notes --- java/com.sap.sailing.www/release_notes_admin.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/com.sap.sailing.www/release_notes_admin.html b/java/com.sap.sailing.www/release_notes_admin.html index 14e23fab71c..cafc0699e99 100755 --- a/java/com.sap.sailing.www/release_notes_admin.html +++ b/java/com.sap.sailing.www/release_notes_admin.html @@ -45,6 +45,11 @@ due to a permission check that was too restrictive, regattas to import could not be seen unless the user had "super-admin" power. +
  • Introduced a new permission SERVER:CAN_EXPORT_MASTERDATA:<server-name> + which controls if a user is allowed to export masterdata used by the MDI. + In addition, the user still needs to be able to read the data to be imported. + On the importing server, the user needs to have the permission SERVER:CAN_IMPORT_MASTERDATA:<server-name>. +
  • April 2019

    From 218b871747721bf63e8f5f27eb5929ca876bc330 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 27 May 2019 18:03:13 +0200 Subject: [PATCH 22/24] bug5055: using HttpURLConnection.getErrorStream() to obtain a useful line of error message from a response Change-Id: Iddd87f483cc669c077629d27eb5cc9c1fa24a64f --- .../gwt/ui/server/SailingServiceImpl.java | 23 +++++++++++-------- .../gateway/jaxrs/spi/MasterDataResource.java | 8 ------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index ab94ece7ec2..da4a75d772f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1,6 +1,7 @@ package com.sap.sailing.gwt.ui.server; import java.awt.image.BufferedImage; +import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; @@ -5754,15 +5755,11 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet final boolean compress, final boolean exportWind, final boolean exportDeviceConfigurations, String targetServerUsername, String targetServerPassword) { getSecurityService().checkCurrentUserServerPermission(ServerActions.CAN_IMPORT_MASTERDATA); - String token = RemoteServerUtil.resolveBearerTokenForRemoteServer(urlAsString, targetServerUsername, targetServerPassword); - final UUID importOperationId = UUID.randomUUID(); - getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.0, DataImportSubProgress.INIT, - 0.0); + getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.0, DataImportSubProgress.INIT, 0.0); final User user = getSecurityService().getCurrentUser(); final UserGroup tenant = getSecurityService().getDefaultTenantForCurrentUser(); - // Create a progress indicator for as long as the server gets data from the other server. // As soon as the server starts the import operation, a progress object will be built on every server Runnable masterDataImportTask = new Runnable() { @@ -5797,13 +5794,21 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet inputStream = new TimeoutExtendingInputStream(connection.getInputStream(), connection); } final MasterDataImporter importer = new MasterDataImporter(baseDomainFactory, getService(), - user, - tenant); + user, tenant); importer.importFromStream(inputStream, importOperationId, override); } catch (Throwable e) { // do not assume that RuntimeException is logged properly - logger.log(Level.SEVERE, e.getMessage(), e); - getService().setDataImportFailedWithReplication(importOperationId, e.getMessage() + String message = e.getMessage(); + if (connection instanceof HttpURLConnection) { + // try to obtain an error message from the connection's error stream: + try { + message = new BufferedReader(new InputStreamReader(((HttpURLConnection) connection).getErrorStream())).readLine(); + } catch (Exception exceptionTryingToReadErrorStream) { + // in this case we just stay with the exception's message + } + } + logger.log(Level.SEVERE, message, e); + getService().setDataImportFailedWithReplication(importOperationId, message + "\n\nHave you checked if the" + " versions (commit-wise) of the importing and exporting servers are compatible with each other? " + "If the error still occurs, when both servers are running the same version, please report the problem."); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java index 6f30203161e..0162476c95d 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/spi/MasterDataResource.java @@ -56,9 +56,7 @@ public class MasterDataResource extends AbstractSailingServerResource { throws UnsupportedEncodingException { final SecurityService securityService = getSecurityService(); User user = securityService.getCurrentUser(); - securityService.checkCurrentUserServerPermission(ServerActions.CAN_EXPORT_MASTERDATA); - final long startTime = System.currentTimeMillis(); logger.info("Masterdataexport has started; requesting user: "+user); if (compress == null) { @@ -72,9 +70,7 @@ public class MasterDataResource extends AbstractSailingServerResource { } logger.info(String.format("Masterdataexport gzip compression is turned %s", compress ? "on" : "off")); Map allLeaderboardGroups = getService().getLeaderboardGroups(); - Set groupsToExport = new HashSet(); - if (requestedLeaderboardGroups.isEmpty()) { // Add all visible LeaderboardGroups. // The request will not fail due to missing LeaderboardGroup READ permissions. @@ -146,7 +142,6 @@ public class MasterDataResource extends AbstractSailingServerResource { for (Event event : getService().getAllEvents()) { events.add(event); } - ArrayList mediaTracks = new ArrayList<>(); for (MediaTrack mediaTrack : getService().getAllMediaTracks()) { mediaTracks.add(mediaTrack); @@ -158,21 +153,18 @@ public class MasterDataResource extends AbstractSailingServerResource { final TopLevelMasterData masterData = new TopLevelMasterData(groupsToExport, events, regattaRaceIds, mediaTracks, getService().getSensorFixStore(), exportWind, raceManagerDeviceConfigurations); - // Checking permissions after filtering of Events to be transferred. for (Event event: masterData.getAllEvents()) { if (!securityService.hasCurrentUserReadPermission(event)) { throw new AuthorizationException("No permission to read event " + event.getId()); } } - // Checking permissions after filtering of MediaTracks to be transferred. for (MediaTrack mediaTrack : masterData.getFilteredMediaTracks()) { if (!securityService.hasCurrentUserReadPermission(mediaTrack)) { throw new AuthorizationException("No permission to read media track " + mediaTrack.dbId); } } - final StreamingOutput streamingOutput; if (compress) { streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime, securityService); From 063484e29f9cbb53598d486bfa493582062a5dd7 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 27 May 2019 22:53:30 +0200 Subject: [PATCH 23/24] removed PluginNature from our OSGi bundles; they are not Eclipse plugins --- java/com.github.branflake2267.gwt-maps-api/.project | 1 - java/com.google.gwt.ajaxloader/.project | 1 - java/com.google.gwt.dev/.project | 1 - java/com.google.gwt.servlet/.project | 1 - java/com.google.gwt.user/.project | 1 - java/com.googlecode.java-diff-utils.test/.project | 1 - java/com.googlecode.java-diff-utils/.project | 1 - java/com.googlecode.mgwt/.project | 1 - java/com.sap.sailing.barbados.resultimport.test/.project | 1 - java/com.sap.sailing.barbados.resultimport/.project | 1 - java/com.sap.sailing.competitorimport/.project | 1 - java/com.sap.sailing.dashboards.gwt/.project | 1 - java/com.sap.sailing.datamining.provider/.project | 1 - java/com.sap.sailing.datamining.shared/.project | 1 - java/com.sap.sailing.datamining.test/.project | 1 - java/com.sap.sailing.datamining/.project | 1 - java/com.sap.sailing.declination.test/.project | 1 - java/com.sap.sailing.declination/.project | 1 - java/com.sap.sailing.domain.bravoadapter/.project | 1 - java/com.sap.sailing.domain.common/.project | 1 - java/com.sap.sailing.domain.deckmanadapter.test/.project | 1 - java/com.sap.sailing.domain.deckmanadapter/.project | 1 - java/com.sap.sailing.domain.expeditionadapter/.project | 1 - java/com.sap.sailing.domain.igtimiadapter.gateway/.project | 1 - java/com.sap.sailing.domain.igtimiadapter.persistence/.project | 1 - java/com.sap.sailing.domain.igtimiadapter.test/.project | 1 - java/com.sap.sailing.domain.igtimiadapter/.project | 1 - java/com.sap.sailing.domain.persistence/.project | 1 - java/com.sap.sailing.domain.racelogtrackingadapter.test/.project | 1 - .../.project | 1 - java/com.sap.sailing.domain.racelogtrackingadapter/.project | 1 - java/com.sap.sailing.domain.shared.android.test/.project | 1 - java/com.sap.sailing.domain.shared.android/.project | 1 - .../.project | 1 - java/com.sap.sailing.domain.swisstimingadapter.test/.project | 1 - java/com.sap.sailing.domain.swisstimingadapter/.project | 1 - .../.project | 1 - java/com.sap.sailing.domain.swisstimingreplayadapter/.project | 1 - java/com.sap.sailing.domain.test/.project | 1 - java/com.sap.sailing.domain.tractracadapter.persistence/.project | 1 - java/com.sap.sailing.domain.tractracadapter/.project | 1 - java/com.sap.sailing.domain.windfinderadapter.test/.project | 1 - java/com.sap.sailing.domain.windfinderadapter/.project | 1 - java/com.sap.sailing.domain/.project | 1 - java/com.sap.sailing.ess40.resultimport.test/.project | 1 - java/com.sap.sailing.ess40.resultimport/.project | 1 - java/com.sap.sailing.expeditionconnector.common/.project | 1 - java/com.sap.sailing.expeditionconnector.persistence/.project | 1 - java/com.sap.sailing.expeditionconnector.test/.project | 1 - java/com.sap.sailing.expeditionconnector/.project | 1 - java/com.sap.sailing.freg.resultimport.test/.project | 1 - java/com.sap.sailing.freg.resultimport/.project | 1 - java/com.sap.sailing.geocoding.test/.project | 1 - java/com.sap.sailing.geocoding/.project | 1 - java/com.sap.sailing.grib.test/.project | 1 - java/com.sap.sailing.grib/.project | 1 - java/com.sap.sailing.gwt.ui.test/.project | 1 - java/com.sap.sailing.gwt.ui/.project | 1 - java/com.sap.sailing.kiworesultimport.test/.project | 1 - java/com.sap.sailing.kiworesultimport/.project | 1 - java/com.sap.sailing.manage2sail.resultimport.test/.project | 1 - java/com.sap.sailing.manage2sail.resultimport/.project | 1 - java/com.sap.sailing.manage2sail/.project | 1 - java/com.sap.sailing.media.persistence.test/.project | 1 - java/com.sap.sailing.mongodb.test/.project | 1 - java/com.sap.sailing.monitoring/.project | 1 - java/com.sap.sailing.news/.project | 1 - java/com.sap.sailing.nmeaconnector.test/.project | 1 - java/com.sap.sailing.nmeaconnector/.project | 1 - java/com.sap.sailing.polars.datamining.shared/.project | 1 - java/com.sap.sailing.polars.datamining/.project | 1 - java/com.sap.sailing.polars.test/.project | 1 - java/com.sap.sailing.polars/.project | 1 - java/com.sap.sailing.resultimport/.project | 1 - java/com.sap.sailing.routeconverterjava11extension/.project | 1 - java/com.sap.sailing.sailwave.resultimport.test/.project | 1 - java/com.sap.sailing.sailwave.resultimport/.project | 1 - java/com.sap.sailing.selenium.test/.project | 1 - .../.project | 1 - java/com.sap.sailing.server.gateway.serialization.test/.project | 1 - java/com.sap.sailing.server.gateway.serialization/.project | 1 - java/com.sap.sailing.server.gateway.test.support/.project | 1 - java/com.sap.sailing.server.gateway.test/.project | 1 - java/com.sap.sailing.server.gateway/.project | 1 - java/com.sap.sailing.server.interface/.project | 1 - java/com.sap.sailing.server.replication.test/.project | 1 - java/com.sap.sailing.server.test/.project | 1 - java/com.sap.sailing.server.testsupport/.project | 1 - java/com.sap.sailing.server.trackfiles.test/.project | 1 - java/com.sap.sailing.server.trackfiles/.project | 1 - java/com.sap.sailing.server/.project | 1 - java/com.sap.sailing.simulator.test/.project | 1 - java/com.sap.sailing.simulator/.project | 1 - java/com.sap.sailing.udpconnector/.project | 1 - java/com.sap.sailing.velum.resultimport.test/.project | 1 - java/com.sap.sailing.velum.resultimport/.project | 1 - java/com.sap.sailing.www/.project | 1 - java/com.sap.sailing.xmlexport.test/.project | 1 - java/com.sap.sailing.xmlexport/.project | 1 - java/com.sap.sailing.xrr.resultimport.test/.project | 1 - java/com.sap.sailing.xrr.resultimport/.project | 1 - java/com.sap.sailing.xrr.schema/.project | 1 - java/com.sap.sailing.xrr.structureimport/.project | 1 - java/com.sap.sailing.yachtscoring.resultimport.test/.project | 1 - java/com.sap.sailing.yachtscoring.resultimport/.project | 1 - java/com.sap.sse.common.test/.project | 1 - java/com.sap.sse.common/.project | 1 - java/com.sap.sse.datamining.annotations/.project | 1 - java/com.sap.sse.datamining.shared/.project | 1 - java/com.sap.sse.datamining.test/.project | 1 - java/com.sap.sse.datamining.ui.test/.project | 1 - java/com.sap.sse.datamining.ui/.project | 1 - java/com.sap.sse.datamining/.project | 1 - java/com.sap.sse.filestorage.test/.project | 1 - java/com.sap.sse.filestorage/.project | 1 - java/com.sap.sse.gwt.adminconsole/.project | 1 - java/com.sap.sse.gwt.test/.project | 1 - java/com.sap.sse.jersey.jaxbdependencyfragment/.project | 1 - java/com.sap.sse.jettyextensions/.project | 1 - java/com.sap.sse.mail.replication.test/.project | 1 - java/com.sap.sse.mail.replication.testsupport/.project | 1 - java/com.sap.sse.mail/.project | 1 - java/com.sap.sse.mongodb/.project | 1 - java/com.sap.sse.operationaltransformation.test/.project | 1 - java/com.sap.sse.operationaltransformation/.project | 1 - java/com.sap.sse.replication.interfaces/.project | 1 - java/com.sap.sse.replication.testsupport/.project | 1 - java/com.sap.sse.replication/.project | 1 - java/com.sap.sse.security.common/.project | 1 - java/com.sap.sse.security.interface/.project | 1 - java/com.sap.sse.security.persistence.test/.project | 1 - java/com.sap.sse.security.persistence/.project | 1 - java/com.sap.sse.security.replication.test/.project | 1 - java/com.sap.sse.security.test/.project | 1 - java/com.sap.sse.security.testsupport/.project | 1 - java/com.sap.sse.security.ui/.project | 1 - java/com.sap.sse.security.userstore.mongodb/.project | 1 - java/com.sap.sse.security/.project | 1 - java/com.sap.sse.shared.android.test/.project | 1 - java/com.sap.sse.shared.android/.project | 1 - java/com.sap.sse.test/.project | 1 - java/com.sap.sse.threadmanager/.project | 1 - java/com.sap.sse/.project | 1 - java/com.tractrac.clientmodule/.project | 1 - java/net.sf.marineapi.test/.project | 1 - java/net.sf.marineapi/.project | 1 - java/org.json.simple/.project | 1 - java/org.moxieapps.gwt.highcharts/.project | 1 - java/org.mp4parser.isoparser/.project | 1 - java/org.openqa.selenium.osgi/.project | 1 - 150 files changed, 150 deletions(-) diff --git a/java/com.github.branflake2267.gwt-maps-api/.project b/java/com.github.branflake2267.gwt-maps-api/.project index 5447b2c01ac..adb1377b722 100644 --- a/java/com.github.branflake2267.gwt-maps-api/.project +++ b/java/com.github.branflake2267.gwt-maps-api/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.google.gwt.ajaxloader/.project b/java/com.google.gwt.ajaxloader/.project index 29bd272350b..a4a980a65d1 100644 --- a/java/com.google.gwt.ajaxloader/.project +++ b/java/com.google.gwt.ajaxloader/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.google.gwt.dev/.project b/java/com.google.gwt.dev/.project index 07fec1d03ba..254d973cede 100644 --- a/java/com.google.gwt.dev/.project +++ b/java/com.google.gwt.dev/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.google.gwt.servlet/.project b/java/com.google.gwt.servlet/.project index 4019bf222f8..432f3f92371 100644 --- a/java/com.google.gwt.servlet/.project +++ b/java/com.google.gwt.servlet/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.google.gwt.user/.project b/java/com.google.gwt.user/.project index 5a611228710..398ee1616d5 100644 --- a/java/com.google.gwt.user/.project +++ b/java/com.google.gwt.user/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.googlecode.java-diff-utils.test/.project b/java/com.googlecode.java-diff-utils.test/.project index 30644bdeb0a..2ad1c2d4652 100755 --- a/java/com.googlecode.java-diff-utils.test/.project +++ b/java/com.googlecode.java-diff-utils.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.googlecode.java-diff-utils/.project b/java/com.googlecode.java-diff-utils/.project index 8da7abc7b55..05c89df62e7 100755 --- a/java/com.googlecode.java-diff-utils/.project +++ b/java/com.googlecode.java-diff-utils/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.googlecode.mgwt/.project b/java/com.googlecode.mgwt/.project index 64cd0a55b18..c174cdc7b09 100644 --- a/java/com.googlecode.mgwt/.project +++ b/java/com.googlecode.mgwt/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.barbados.resultimport.test/.project b/java/com.sap.sailing.barbados.resultimport.test/.project index 000b089d063..e87ff532c2a 100644 --- a/java/com.sap.sailing.barbados.resultimport.test/.project +++ b/java/com.sap.sailing.barbados.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.barbados.resultimport/.project b/java/com.sap.sailing.barbados.resultimport/.project index 82a6c202035..b951ba424f4 100644 --- a/java/com.sap.sailing.barbados.resultimport/.project +++ b/java/com.sap.sailing.barbados.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.competitorimport/.project b/java/com.sap.sailing.competitorimport/.project index 4371e50fca6..562e9855501 100644 --- a/java/com.sap.sailing.competitorimport/.project +++ b/java/com.sap.sailing.competitorimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.dashboards.gwt/.project b/java/com.sap.sailing.dashboards.gwt/.project index 520fc2bd59d..1c8cf650668 100644 --- a/java/com.sap.sailing.dashboards.gwt/.project +++ b/java/com.sap.sailing.dashboards.gwt/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.datamining.provider/.project b/java/com.sap.sailing.datamining.provider/.project index 13699a1a554..58f8d7b572b 100755 --- a/java/com.sap.sailing.datamining.provider/.project +++ b/java/com.sap.sailing.datamining.provider/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.datamining.shared/.project b/java/com.sap.sailing.datamining.shared/.project index 3e76c7f629f..37fbf76b38a 100644 --- a/java/com.sap.sailing.datamining.shared/.project +++ b/java/com.sap.sailing.datamining.shared/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.datamining.test/.project b/java/com.sap.sailing.datamining.test/.project index 91f4fe867cc..29b1df0edae 100644 --- a/java/com.sap.sailing.datamining.test/.project +++ b/java/com.sap.sailing.datamining.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.datamining/.project b/java/com.sap.sailing.datamining/.project index f40554ff5f4..7d404a89907 100644 --- a/java/com.sap.sailing.datamining/.project +++ b/java/com.sap.sailing.datamining/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.declination.test/.project b/java/com.sap.sailing.declination.test/.project index 58850df91c8..4cf28739efa 100755 --- a/java/com.sap.sailing.declination.test/.project +++ b/java/com.sap.sailing.declination.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.declination/.project b/java/com.sap.sailing.declination/.project index d4ad11c6d72..3aea99e9711 100755 --- a/java/com.sap.sailing.declination/.project +++ b/java/com.sap.sailing.declination/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.bravoadapter/.project b/java/com.sap.sailing.domain.bravoadapter/.project index b9978a06950..afa1083609c 100755 --- a/java/com.sap.sailing.domain.bravoadapter/.project +++ b/java/com.sap.sailing.domain.bravoadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.common/.project b/java/com.sap.sailing.domain.common/.project index 7779c8b14a0..8bcc64d7d6b 100755 --- a/java/com.sap.sailing.domain.common/.project +++ b/java/com.sap.sailing.domain.common/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.domain.deckmanadapter.test/.project b/java/com.sap.sailing.domain.deckmanadapter.test/.project index fd1b6107082..1e33e21430e 100755 --- a/java/com.sap.sailing.domain.deckmanadapter.test/.project +++ b/java/com.sap.sailing.domain.deckmanadapter.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.deckmanadapter/.project b/java/com.sap.sailing.domain.deckmanadapter/.project index 93bbb09883e..7fc0ea71872 100755 --- a/java/com.sap.sailing.domain.deckmanadapter/.project +++ b/java/com.sap.sailing.domain.deckmanadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.expeditionadapter/.project b/java/com.sap.sailing.domain.expeditionadapter/.project index a413084a0cd..11525013504 100755 --- a/java/com.sap.sailing.domain.expeditionadapter/.project +++ b/java/com.sap.sailing.domain.expeditionadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.igtimiadapter.gateway/.project b/java/com.sap.sailing.domain.igtimiadapter.gateway/.project index fb064dabaca..a1fcbd29f75 100644 --- a/java/com.sap.sailing.domain.igtimiadapter.gateway/.project +++ b/java/com.sap.sailing.domain.igtimiadapter.gateway/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.igtimiadapter.persistence/.project b/java/com.sap.sailing.domain.igtimiadapter.persistence/.project index 7d52cb74c97..7710c4efbbd 100755 --- a/java/com.sap.sailing.domain.igtimiadapter.persistence/.project +++ b/java/com.sap.sailing.domain.igtimiadapter.persistence/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.igtimiadapter.test/.project b/java/com.sap.sailing.domain.igtimiadapter.test/.project index 4ec7f1c59af..835b376a16f 100755 --- a/java/com.sap.sailing.domain.igtimiadapter.test/.project +++ b/java/com.sap.sailing.domain.igtimiadapter.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.igtimiadapter/.project b/java/com.sap.sailing.domain.igtimiadapter/.project index 97dd7581430..4a0ffb203e3 100755 --- a/java/com.sap.sailing.domain.igtimiadapter/.project +++ b/java/com.sap.sailing.domain.igtimiadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.persistence/.project b/java/com.sap.sailing.domain.persistence/.project index 63ad26fbdd7..020fbf0fca3 100755 --- a/java/com.sap.sailing.domain.persistence/.project +++ b/java/com.sap.sailing.domain.persistence/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.project b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.project index 30f37c10090..2431af52485 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/.project +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.project b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.project index f3c0beddc15..fdd64c33d54 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.project +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.testsupport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/.project b/java/com.sap.sailing.domain.racelogtrackingadapter/.project index 6d8ea47c43e..e4bfd178b79 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/.project +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.shared.android.test/.project b/java/com.sap.sailing.domain.shared.android.test/.project index b20b2f876c0..913923f097c 100644 --- a/java/com.sap.sailing.domain.shared.android.test/.project +++ b/java/com.sap.sailing.domain.shared.android.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.shared.android/.project b/java/com.sap.sailing.domain.shared.android/.project index eba6e1dade9..56066863cbe 100644 --- a/java/com.sap.sailing.domain.shared.android/.project +++ b/java/com.sap.sailing.domain.shared.android/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/.project b/java/com.sap.sailing.domain.swisstimingadapter.persistence/.project index b059e9ad7ed..c27a4a9ab4a 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/.project +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/.project b/java/com.sap.sailing.domain.swisstimingadapter.test/.project index 0310bcf9121..c15701a305d 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/.project +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.swisstimingadapter/.project b/java/com.sap.sailing.domain.swisstimingadapter/.project index a087e0f7357..d0b79376fe1 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/.project +++ b/java/com.sap.sailing.domain.swisstimingadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.project b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.project index 8bc1b12493d..9e3d1b58809 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.project +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.swisstimingreplayadapter/.project b/java/com.sap.sailing.domain.swisstimingreplayadapter/.project index 1d9da58cdab..74b2d2c52f4 100644 --- a/java/com.sap.sailing.domain.swisstimingreplayadapter/.project +++ b/java/com.sap.sailing.domain.swisstimingreplayadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.test/.project b/java/com.sap.sailing.domain.test/.project index 0a9550a016b..7448bbefb9c 100755 --- a/java/com.sap.sailing.domain.test/.project +++ b/java/com.sap.sailing.domain.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.tractracadapter.persistence/.project b/java/com.sap.sailing.domain.tractracadapter.persistence/.project index 343c04d4a85..078c002c4e9 100755 --- a/java/com.sap.sailing.domain.tractracadapter.persistence/.project +++ b/java/com.sap.sailing.domain.tractracadapter.persistence/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.tractracadapter/.project b/java/com.sap.sailing.domain.tractracadapter/.project index f8cd2e2d499..7ecc9e35862 100755 --- a/java/com.sap.sailing.domain.tractracadapter/.project +++ b/java/com.sap.sailing.domain.tractracadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.windfinderadapter.test/.project b/java/com.sap.sailing.domain.windfinderadapter.test/.project index f4e90b744ba..aee841b7223 100644 --- a/java/com.sap.sailing.domain.windfinderadapter.test/.project +++ b/java/com.sap.sailing.domain.windfinderadapter.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain.windfinderadapter/.project b/java/com.sap.sailing.domain.windfinderadapter/.project index 8efe69d0cbe..a50d5c03434 100644 --- a/java/com.sap.sailing.domain.windfinderadapter/.project +++ b/java/com.sap.sailing.domain.windfinderadapter/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.domain/.project b/java/com.sap.sailing.domain/.project index 667ec7791d2..daaff4b5dae 100755 --- a/java/com.sap.sailing.domain/.project +++ b/java/com.sap.sailing.domain/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.ess40.resultimport.test/.project b/java/com.sap.sailing.ess40.resultimport.test/.project index bacaddea80a..77c9ca46d48 100755 --- a/java/com.sap.sailing.ess40.resultimport.test/.project +++ b/java/com.sap.sailing.ess40.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.ess40.resultimport/.project b/java/com.sap.sailing.ess40.resultimport/.project index b665aeee3fb..958ac0c075a 100755 --- a/java/com.sap.sailing.ess40.resultimport/.project +++ b/java/com.sap.sailing.ess40.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.expeditionconnector.common/.project b/java/com.sap.sailing.expeditionconnector.common/.project index 255447215e5..bcd9181d7e4 100755 --- a/java/com.sap.sailing.expeditionconnector.common/.project +++ b/java/com.sap.sailing.expeditionconnector.common/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.expeditionconnector.persistence/.project b/java/com.sap.sailing.expeditionconnector.persistence/.project index c6034e7c533..e42db9b1e26 100755 --- a/java/com.sap.sailing.expeditionconnector.persistence/.project +++ b/java/com.sap.sailing.expeditionconnector.persistence/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.expeditionconnector.test/.project b/java/com.sap.sailing.expeditionconnector.test/.project index cb065b0d8fb..025209a6648 100755 --- a/java/com.sap.sailing.expeditionconnector.test/.project +++ b/java/com.sap.sailing.expeditionconnector.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.expeditionconnector/.project b/java/com.sap.sailing.expeditionconnector/.project index 1c71354f3f4..ded7ee340a0 100755 --- a/java/com.sap.sailing.expeditionconnector/.project +++ b/java/com.sap.sailing.expeditionconnector/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.freg.resultimport.test/.project b/java/com.sap.sailing.freg.resultimport.test/.project index 87d00f1126b..2d6c83b16d3 100755 --- a/java/com.sap.sailing.freg.resultimport.test/.project +++ b/java/com.sap.sailing.freg.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.freg.resultimport/.project b/java/com.sap.sailing.freg.resultimport/.project index a99382aeabe..1bb09fc83ed 100755 --- a/java/com.sap.sailing.freg.resultimport/.project +++ b/java/com.sap.sailing.freg.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.geocoding.test/.project b/java/com.sap.sailing.geocoding.test/.project index ccee6e7ad13..1a803b11191 100644 --- a/java/com.sap.sailing.geocoding.test/.project +++ b/java/com.sap.sailing.geocoding.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.geocoding/.project b/java/com.sap.sailing.geocoding/.project index 18680f3dc59..3f8614412de 100644 --- a/java/com.sap.sailing.geocoding/.project +++ b/java/com.sap.sailing.geocoding/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.grib.test/.project b/java/com.sap.sailing.grib.test/.project index 9bc15e55f91..a8dd7de79a6 100644 --- a/java/com.sap.sailing.grib.test/.project +++ b/java/com.sap.sailing.grib.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.grib/.project b/java/com.sap.sailing.grib/.project index d0428178f93..9069daa0b2c 100644 --- a/java/com.sap.sailing.grib/.project +++ b/java/com.sap.sailing.grib/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.gwt.ui.test/.project b/java/com.sap.sailing.gwt.ui.test/.project index 1b5fe668904..c12f174b9ff 100755 --- a/java/com.sap.sailing.gwt.ui.test/.project +++ b/java/com.sap.sailing.gwt.ui.test/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.gwt.ui/.project b/java/com.sap.sailing.gwt.ui/.project index c684e289776..0187ad26fa5 100755 --- a/java/com.sap.sailing.gwt.ui/.project +++ b/java/com.sap.sailing.gwt.ui/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature org.eclipse.wst.jsdt.core.jsNature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.kiworesultimport.test/.project b/java/com.sap.sailing.kiworesultimport.test/.project index 1421921fba3..e9f86490481 100644 --- a/java/com.sap.sailing.kiworesultimport.test/.project +++ b/java/com.sap.sailing.kiworesultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.kiworesultimport/.project b/java/com.sap.sailing.kiworesultimport/.project index a1aa50371ad..3e12ea22645 100644 --- a/java/com.sap.sailing.kiworesultimport/.project +++ b/java/com.sap.sailing.kiworesultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.manage2sail.resultimport.test/.project b/java/com.sap.sailing.manage2sail.resultimport.test/.project index 8f4948ee364..52ae2ce037f 100644 --- a/java/com.sap.sailing.manage2sail.resultimport.test/.project +++ b/java/com.sap.sailing.manage2sail.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.manage2sail.resultimport/.project b/java/com.sap.sailing.manage2sail.resultimport/.project index a2606335bd9..9e3bc68ae26 100644 --- a/java/com.sap.sailing.manage2sail.resultimport/.project +++ b/java/com.sap.sailing.manage2sail.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.manage2sail/.project b/java/com.sap.sailing.manage2sail/.project index ca7605b13f9..c8f2b042fbb 100644 --- a/java/com.sap.sailing.manage2sail/.project +++ b/java/com.sap.sailing.manage2sail/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.media.persistence.test/.project b/java/com.sap.sailing.media.persistence.test/.project index ab02faa2b7c..c8fd9906d3c 100644 --- a/java/com.sap.sailing.media.persistence.test/.project +++ b/java/com.sap.sailing.media.persistence.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.mongodb.test/.project b/java/com.sap.sailing.mongodb.test/.project index a4a000d741a..be107c0949e 100755 --- a/java/com.sap.sailing.mongodb.test/.project +++ b/java/com.sap.sailing.mongodb.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.monitoring/.project b/java/com.sap.sailing.monitoring/.project index 5bf2c3ba6d0..c2a34d888fd 100644 --- a/java/com.sap.sailing.monitoring/.project +++ b/java/com.sap.sailing.monitoring/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.news/.project b/java/com.sap.sailing.news/.project index cba19cda41d..dee836e5af0 100644 --- a/java/com.sap.sailing.news/.project +++ b/java/com.sap.sailing.news/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.nmeaconnector.test/.project b/java/com.sap.sailing.nmeaconnector.test/.project index c521410104f..f634c612681 100755 --- a/java/com.sap.sailing.nmeaconnector.test/.project +++ b/java/com.sap.sailing.nmeaconnector.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.nmeaconnector/.project b/java/com.sap.sailing.nmeaconnector/.project index c8d00592061..56e2e35c113 100755 --- a/java/com.sap.sailing.nmeaconnector/.project +++ b/java/com.sap.sailing.nmeaconnector/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.polars.datamining.shared/.project b/java/com.sap.sailing.polars.datamining.shared/.project index 6dc505ab246..eca7faa4577 100644 --- a/java/com.sap.sailing.polars.datamining.shared/.project +++ b/java/com.sap.sailing.polars.datamining.shared/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.polars.datamining/.project b/java/com.sap.sailing.polars.datamining/.project index a217a17527e..f055cc6d5d6 100644 --- a/java/com.sap.sailing.polars.datamining/.project +++ b/java/com.sap.sailing.polars.datamining/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.polars.test/.project b/java/com.sap.sailing.polars.test/.project index 7980f4925e6..02c4c142cc3 100644 --- a/java/com.sap.sailing.polars.test/.project +++ b/java/com.sap.sailing.polars.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.polars/.project b/java/com.sap.sailing.polars/.project index b2e142dedfa..395d11a7d0f 100644 --- a/java/com.sap.sailing.polars/.project +++ b/java/com.sap.sailing.polars/.project @@ -23,6 +23,5 @@ org.eclipse.jdt.core.javanature - org.eclipse.pde.PluginNature diff --git a/java/com.sap.sailing.resultimport/.project b/java/com.sap.sailing.resultimport/.project index f36785ea507..588f69ad820 100644 --- a/java/com.sap.sailing.resultimport/.project +++ b/java/com.sap.sailing.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.routeconverterjava11extension/.project b/java/com.sap.sailing.routeconverterjava11extension/.project index 6fc2819bb00..57ae627c81e 100755 --- a/java/com.sap.sailing.routeconverterjava11extension/.project +++ b/java/com.sap.sailing.routeconverterjava11extension/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.sailwave.resultimport.test/.project b/java/com.sap.sailing.sailwave.resultimport.test/.project index 818efda9dc5..fe11b55df93 100644 --- a/java/com.sap.sailing.sailwave.resultimport.test/.project +++ b/java/com.sap.sailing.sailwave.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.sailwave.resultimport/.project b/java/com.sap.sailing.sailwave.resultimport/.project index 598a39f33d8..7e7c1299f8d 100644 --- a/java/com.sap.sailing.sailwave.resultimport/.project +++ b/java/com.sap.sailing.sailwave.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.selenium.test/.project b/java/com.sap.sailing.selenium.test/.project index 6d980ffd37d..b41449cf208 100644 --- a/java/com.sap.sailing.selenium.test/.project +++ b/java/com.sap.sailing.selenium.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/.project b/java/com.sap.sailing.server.gateway.serialization.shared.android/.project index 0802e21577c..ef3070b2707 100755 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/.project +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.gateway.serialization.test/.project b/java/com.sap.sailing.server.gateway.serialization.test/.project index 8fd93b5b758..1735422c292 100644 --- a/java/com.sap.sailing.server.gateway.serialization.test/.project +++ b/java/com.sap.sailing.server.gateway.serialization.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.gateway.serialization/.project b/java/com.sap.sailing.server.gateway.serialization/.project index cc12d1eed4a..87f6adf6722 100644 --- a/java/com.sap.sailing.server.gateway.serialization/.project +++ b/java/com.sap.sailing.server.gateway.serialization/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.gateway.test.support/.project b/java/com.sap.sailing.server.gateway.test.support/.project index edc0549576d..c86eab62472 100644 --- a/java/com.sap.sailing.server.gateway.test.support/.project +++ b/java/com.sap.sailing.server.gateway.test.support/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.gateway.test/.project b/java/com.sap.sailing.server.gateway.test/.project index 4cf34e53fa2..8d4cd9ae3b6 100644 --- a/java/com.sap.sailing.server.gateway.test/.project +++ b/java/com.sap.sailing.server.gateway.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.gateway/.project b/java/com.sap.sailing.server.gateway/.project index d04cc8ee9a6..91167a58644 100644 --- a/java/com.sap.sailing.server.gateway/.project +++ b/java/com.sap.sailing.server.gateway/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.interface/.project b/java/com.sap.sailing.server.interface/.project index 8f602d997ba..86ee88aaa78 100755 --- a/java/com.sap.sailing.server.interface/.project +++ b/java/com.sap.sailing.server.interface/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.replication.test/.project b/java/com.sap.sailing.server.replication.test/.project index 6fb67f82008..d65f2d2d8c1 100644 --- a/java/com.sap.sailing.server.replication.test/.project +++ b/java/com.sap.sailing.server.replication.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.test/.project b/java/com.sap.sailing.server.test/.project index 7c0a92e867a..00790a85381 100755 --- a/java/com.sap.sailing.server.test/.project +++ b/java/com.sap.sailing.server.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.testsupport/.project b/java/com.sap.sailing.server.testsupport/.project index fc826dcca0d..a0f185411c2 100644 --- a/java/com.sap.sailing.server.testsupport/.project +++ b/java/com.sap.sailing.server.testsupport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.trackfiles.test/.project b/java/com.sap.sailing.server.trackfiles.test/.project index 19d323089ec..c403e1e47bc 100644 --- a/java/com.sap.sailing.server.trackfiles.test/.project +++ b/java/com.sap.sailing.server.trackfiles.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server.trackfiles/.project b/java/com.sap.sailing.server.trackfiles/.project index d4063f95610..df2f53072a2 100644 --- a/java/com.sap.sailing.server.trackfiles/.project +++ b/java/com.sap.sailing.server.trackfiles/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.server/.project b/java/com.sap.sailing.server/.project index a8b7a47686a..44872190a23 100755 --- a/java/com.sap.sailing.server/.project +++ b/java/com.sap.sailing.server/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.simulator.test/.project b/java/com.sap.sailing.simulator.test/.project index 6e91001fe19..1a788f5bab5 100644 --- a/java/com.sap.sailing.simulator.test/.project +++ b/java/com.sap.sailing.simulator.test/.project @@ -33,7 +33,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.simulator/.project b/java/com.sap.sailing.simulator/.project index f86820f24df..3a5a0c2b90e 100644 --- a/java/com.sap.sailing.simulator/.project +++ b/java/com.sap.sailing.simulator/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sailing.udpconnector/.project b/java/com.sap.sailing.udpconnector/.project index 4fd650e213a..d0418e99ebc 100755 --- a/java/com.sap.sailing.udpconnector/.project +++ b/java/com.sap.sailing.udpconnector/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.velum.resultimport.test/.project b/java/com.sap.sailing.velum.resultimport.test/.project index 0727bc8ef05..97b3c7d224f 100644 --- a/java/com.sap.sailing.velum.resultimport.test/.project +++ b/java/com.sap.sailing.velum.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.velum.resultimport/.project b/java/com.sap.sailing.velum.resultimport/.project index 11d2ba9be5d..cf49e0d27b2 100644 --- a/java/com.sap.sailing.velum.resultimport/.project +++ b/java/com.sap.sailing.velum.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.www/.project b/java/com.sap.sailing.www/.project index 9df335c4c2e..b12c4005bb7 100644 --- a/java/com.sap.sailing.www/.project +++ b/java/com.sap.sailing.www/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.xmlexport.test/.project b/java/com.sap.sailing.xmlexport.test/.project index 934210d75df..cd47961f79c 100755 --- a/java/com.sap.sailing.xmlexport.test/.project +++ b/java/com.sap.sailing.xmlexport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.xmlexport/.project b/java/com.sap.sailing.xmlexport/.project index bd3d72fce05..ec76adc89c7 100755 --- a/java/com.sap.sailing.xmlexport/.project +++ b/java/com.sap.sailing.xmlexport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.xrr.resultimport.test/.project b/java/com.sap.sailing.xrr.resultimport.test/.project index 45f7b28d352..2517026127f 100755 --- a/java/com.sap.sailing.xrr.resultimport.test/.project +++ b/java/com.sap.sailing.xrr.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.xrr.resultimport/.project b/java/com.sap.sailing.xrr.resultimport/.project index f10ca5c0495..abcada1b2e1 100755 --- a/java/com.sap.sailing.xrr.resultimport/.project +++ b/java/com.sap.sailing.xrr.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.xrr.schema/.project b/java/com.sap.sailing.xrr.schema/.project index 764fa04e83c..87143d30c4d 100755 --- a/java/com.sap.sailing.xrr.schema/.project +++ b/java/com.sap.sailing.xrr.schema/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.xrr.structureimport/.project b/java/com.sap.sailing.xrr.structureimport/.project index e45cbe00588..91d75987eac 100755 --- a/java/com.sap.sailing.xrr.structureimport/.project +++ b/java/com.sap.sailing.xrr.structureimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.yachtscoring.resultimport.test/.project b/java/com.sap.sailing.yachtscoring.resultimport.test/.project index cabaf35e444..53fa925c263 100644 --- a/java/com.sap.sailing.yachtscoring.resultimport.test/.project +++ b/java/com.sap.sailing.yachtscoring.resultimport.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sailing.yachtscoring.resultimport/.project b/java/com.sap.sailing.yachtscoring.resultimport/.project index 7de1281b339..b18c82ab8e6 100644 --- a/java/com.sap.sailing.yachtscoring.resultimport/.project +++ b/java/com.sap.sailing.yachtscoring.resultimport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.common.test/.project b/java/com.sap.sse.common.test/.project index c108b8c5327..54b8a7f747d 100644 --- a/java/com.sap.sse.common.test/.project +++ b/java/com.sap.sse.common.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.common/.project b/java/com.sap.sse.common/.project index c28bb7a5e5a..030e33f04a1 100644 --- a/java/com.sap.sse.common/.project +++ b/java/com.sap.sse.common/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.datamining.annotations/.project b/java/com.sap.sse.datamining.annotations/.project index 58c1e5bd5f5..8987fe5d1af 100644 --- a/java/com.sap.sse.datamining.annotations/.project +++ b/java/com.sap.sse.datamining.annotations/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.datamining.shared/.project b/java/com.sap.sse.datamining.shared/.project index 4930800502d..e249f61c253 100644 --- a/java/com.sap.sse.datamining.shared/.project +++ b/java/com.sap.sse.datamining.shared/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.datamining.test/.project b/java/com.sap.sse.datamining.test/.project index 3867b76f31a..b9bc7178bb5 100644 --- a/java/com.sap.sse.datamining.test/.project +++ b/java/com.sap.sse.datamining.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.datamining.ui.test/.project b/java/com.sap.sse.datamining.ui.test/.project index ad59090e252..947c121d794 100644 --- a/java/com.sap.sse.datamining.ui.test/.project +++ b/java/com.sap.sse.datamining.ui.test/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.datamining.ui/.project b/java/com.sap.sse.datamining.ui/.project index 003e74ffac2..8fe32bc8da4 100644 --- a/java/com.sap.sse.datamining.ui/.project +++ b/java/com.sap.sse.datamining.ui/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.datamining/.project b/java/com.sap.sse.datamining/.project index 233a003e667..853ccbc27ae 100644 --- a/java/com.sap.sse.datamining/.project +++ b/java/com.sap.sse.datamining/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.filestorage.test/.project b/java/com.sap.sse.filestorage.test/.project index abfcae8ae1a..bde66d2313d 100644 --- a/java/com.sap.sse.filestorage.test/.project +++ b/java/com.sap.sse.filestorage.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.filestorage/.project b/java/com.sap.sse.filestorage/.project index d769cf7f224..e6e174381b7 100755 --- a/java/com.sap.sse.filestorage/.project +++ b/java/com.sap.sse.filestorage/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.gwt.adminconsole/.project b/java/com.sap.sse.gwt.adminconsole/.project index 045c56ed0c0..27df14a5add 100755 --- a/java/com.sap.sse.gwt.adminconsole/.project +++ b/java/com.sap.sse.gwt.adminconsole/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.gwt.test/.project b/java/com.sap.sse.gwt.test/.project index 537b0feb168..66bec80c524 100644 --- a/java/com.sap.sse.gwt.test/.project +++ b/java/com.sap.sse.gwt.test/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.jersey.jaxbdependencyfragment/.project b/java/com.sap.sse.jersey.jaxbdependencyfragment/.project index 9036413ab0b..9aa7b45b542 100755 --- a/java/com.sap.sse.jersey.jaxbdependencyfragment/.project +++ b/java/com.sap.sse.jersey.jaxbdependencyfragment/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.jettyextensions/.project b/java/com.sap.sse.jettyextensions/.project index a895d460939..87a4878e94d 100755 --- a/java/com.sap.sse.jettyextensions/.project +++ b/java/com.sap.sse.jettyextensions/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.mail.replication.test/.project b/java/com.sap.sse.mail.replication.test/.project index 51fa2fe50fb..aaa106da7ac 100755 --- a/java/com.sap.sse.mail.replication.test/.project +++ b/java/com.sap.sse.mail.replication.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.mail.replication.testsupport/.project b/java/com.sap.sse.mail.replication.testsupport/.project index 1d1e9965612..e89959d9584 100755 --- a/java/com.sap.sse.mail.replication.testsupport/.project +++ b/java/com.sap.sse.mail.replication.testsupport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.mail/.project b/java/com.sap.sse.mail/.project index a9824e60a43..9a8b9d7a5de 100755 --- a/java/com.sap.sse.mail/.project +++ b/java/com.sap.sse.mail/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.mongodb/.project b/java/com.sap.sse.mongodb/.project index c39b3395c38..a8f6e0d5c84 100755 --- a/java/com.sap.sse.mongodb/.project +++ b/java/com.sap.sse.mongodb/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.operationaltransformation.test/.project b/java/com.sap.sse.operationaltransformation.test/.project index 5545736d716..14979299b19 100755 --- a/java/com.sap.sse.operationaltransformation.test/.project +++ b/java/com.sap.sse.operationaltransformation.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.operationaltransformation/.project b/java/com.sap.sse.operationaltransformation/.project index de9bfe64079..69dcc0d88bc 100755 --- a/java/com.sap.sse.operationaltransformation/.project +++ b/java/com.sap.sse.operationaltransformation/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.replication.interfaces/.project b/java/com.sap.sse.replication.interfaces/.project index 6379d22889e..e035a961c24 100755 --- a/java/com.sap.sse.replication.interfaces/.project +++ b/java/com.sap.sse.replication.interfaces/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.replication.testsupport/.project b/java/com.sap.sse.replication.testsupport/.project index b9ba602570e..41db88d512b 100755 --- a/java/com.sap.sse.replication.testsupport/.project +++ b/java/com.sap.sse.replication.testsupport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.replication/.project b/java/com.sap.sse.replication/.project index 968a30d87fa..a87afbfadce 100644 --- a/java/com.sap.sse.replication/.project +++ b/java/com.sap.sse.replication/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.common/.project b/java/com.sap.sse.security.common/.project index f250403412d..c0398336b8d 100755 --- a/java/com.sap.sse.security.common/.project +++ b/java/com.sap.sse.security.common/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.security.interface/.project b/java/com.sap.sse.security.interface/.project index a1bdef0ba7a..f06070b860d 100644 --- a/java/com.sap.sse.security.interface/.project +++ b/java/com.sap.sse.security.interface/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.persistence.test/.project b/java/com.sap.sse.security.persistence.test/.project index 204d81c317e..07ddced6727 100755 --- a/java/com.sap.sse.security.persistence.test/.project +++ b/java/com.sap.sse.security.persistence.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.persistence/.project b/java/com.sap.sse.security.persistence/.project index a155be2d55a..fa493986490 100755 --- a/java/com.sap.sse.security.persistence/.project +++ b/java/com.sap.sse.security.persistence/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.replication.test/.project b/java/com.sap.sse.security.replication.test/.project index f22f7fea878..99c8fa740ec 100755 --- a/java/com.sap.sse.security.replication.test/.project +++ b/java/com.sap.sse.security.replication.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.test/.project b/java/com.sap.sse.security.test/.project index 5d73df4afae..1bed205b6f2 100644 --- a/java/com.sap.sse.security.test/.project +++ b/java/com.sap.sse.security.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.testsupport/.project b/java/com.sap.sse.security.testsupport/.project index 00fe204247e..5421c54b5b2 100755 --- a/java/com.sap.sse.security.testsupport/.project +++ b/java/com.sap.sse.security.testsupport/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security.ui/.project b/java/com.sap.sse.security.ui/.project index b2c40005b31..9eb58d17896 100644 --- a/java/com.sap.sse.security.ui/.project +++ b/java/com.sap.sse.security.ui/.project @@ -32,7 +32,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature com.gwtplugins.gwt.eclipse.core.gwtNature diff --git a/java/com.sap.sse.security.userstore.mongodb/.project b/java/com.sap.sse.security.userstore.mongodb/.project index e444758d688..86c213b04ce 100644 --- a/java/com.sap.sse.security.userstore.mongodb/.project +++ b/java/com.sap.sse.security.userstore.mongodb/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.security/.project b/java/com.sap.sse.security/.project index e77bf03511e..9e4d21d0786 100644 --- a/java/com.sap.sse.security/.project +++ b/java/com.sap.sse.security/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.shared.android.test/.project b/java/com.sap.sse.shared.android.test/.project index a32b5afbd2d..5b23c8744f2 100644 --- a/java/com.sap.sse.shared.android.test/.project +++ b/java/com.sap.sse.shared.android.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.shared.android/.project b/java/com.sap.sse.shared.android/.project index 1ced6293522..353ba7cc333 100755 --- a/java/com.sap.sse.shared.android/.project +++ b/java/com.sap.sse.shared.android/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.test/.project b/java/com.sap.sse.test/.project index fefd499bfc5..24a5af0d237 100644 --- a/java/com.sap.sse.test/.project +++ b/java/com.sap.sse.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse.threadmanager/.project b/java/com.sap.sse.threadmanager/.project index f7b52e2c2e9..07348460594 100644 --- a/java/com.sap.sse.threadmanager/.project +++ b/java/com.sap.sse.threadmanager/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.sap.sse/.project b/java/com.sap.sse/.project index ae82bf33116..b43816a868d 100755 --- a/java/com.sap.sse/.project +++ b/java/com.sap.sse/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/com.tractrac.clientmodule/.project b/java/com.tractrac.clientmodule/.project index 3d2dfd4b8b0..eae30e2cd37 100755 --- a/java/com.tractrac.clientmodule/.project +++ b/java/com.tractrac.clientmodule/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/net.sf.marineapi.test/.project b/java/net.sf.marineapi.test/.project index e04929144ac..fb982b808dc 100755 --- a/java/net.sf.marineapi.test/.project +++ b/java/net.sf.marineapi.test/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/net.sf.marineapi/.project b/java/net.sf.marineapi/.project index 4dec2646755..863f9316491 100755 --- a/java/net.sf.marineapi/.project +++ b/java/net.sf.marineapi/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/org.json.simple/.project b/java/org.json.simple/.project index 14f0b0e639d..ee6a79b108b 100755 --- a/java/org.json.simple/.project +++ b/java/org.json.simple/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/org.moxieapps.gwt.highcharts/.project b/java/org.moxieapps.gwt.highcharts/.project index 0b77374036c..bc1efa03bb1 100755 --- a/java/org.moxieapps.gwt.highcharts/.project +++ b/java/org.moxieapps.gwt.highcharts/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/org.mp4parser.isoparser/.project b/java/org.mp4parser.isoparser/.project index 99468a6d49f..7e53eacca25 100644 --- a/java/org.mp4parser.isoparser/.project +++ b/java/org.mp4parser.isoparser/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature diff --git a/java/org.openqa.selenium.osgi/.project b/java/org.openqa.selenium.osgi/.project index 672e20251ec..e9b400b1210 100644 --- a/java/org.openqa.selenium.osgi/.project +++ b/java/org.openqa.selenium.osgi/.project @@ -22,7 +22,6 @@ - org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature From d6fec150d4bb84f7f08cd0e2f65b19edfe34da95 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 27 May 2019 23:39:21 +0200 Subject: [PATCH 24/24] fixed alias name for H-Boat ("H-Boot") --- .../src/com/sap/sailing/domain/common/BoatClassMasterdata.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java index 65206d76c12..0839ca80263 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java @@ -56,7 +56,7 @@ public enum BoatClassMasterdata { GC_32 ("GC 32", false, 10.0, 6.00, BoatHullType.CATAMARAN, true, "GC32", "GC-32"), GP_26 ("GP 26", true, 7.90, 2.55, BoatHullType.MONOHULL, true, "GP26", "GP-26"), HOBIE_16 ("Hobie 16", true, 5.05, 2.41, BoatHullType.CATAMARAN, false, "H16"), - H_BOAT ("H-Boat", true, 8.28, 2.18, BoatHullType.MONOHULL, true, "HB", "H-Boat"), + H_BOAT ("H-Boat", true, 8.28, 2.18, BoatHullType.MONOHULL, true, "HB", "H-Boot"), HANSA_303 ("Hansa 303", false, 3.03, 1.35, BoatHullType.MONOHULL, false, "Hansa-303", "Hansa303"), HOBIE_TIGER ("Hobie Tiger", true, 5.51, 2.60, BoatHullType.CATAMARAN, true), HOBIE_WILD_CAT ("Hobie Wild Cat", true, 5.49, 2.59, BoatHullType.CATAMARAN, true, "Hobie Wild Cat F18"),