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.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..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"),
@@ -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"),
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.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.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.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();
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.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/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 d4192234640..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;
@@ -4290,9 +4291,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 +4332,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 +5123,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) {
@@ -5427,9 +5422,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;
}
@@ -5623,9 +5616,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 +5627,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 +5638,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,18 +5754,12 @@ 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);
-
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() {
@@ -5813,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.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.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..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
@@ -23,19 +23,25 @@ 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;
+
+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;
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.leaderboard.RegattaLeaderboard;
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;
@Path("/v1/masterdata/leaderboardgroups")
@@ -50,9 +56,7 @@ public class MasterDataResource extends AbstractSailingServerResource {
throws UnsupportedEncodingException {
final SecurityService securityService = getSecurityService();
User user = securityService.getCurrentUser();
- if (user == null) {
- 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);
if (compress == null) {
@@ -66,33 +70,59 @@ 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
+ // 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() + "'");
}
}
}
@@ -100,43 +130,52 @@ public class MasterDataResource extends AbstractSailingServerResource {
Set raceManagerDeviceConfigurations = new HashSet<>();
if (exportDeviceConfigs) {
for (DeviceConfiguration deviceConfig : getAllDeviceConfigs()) {
- // FIXME here permission check?
- raceManagerDeviceConfigurations.add(deviceConfig);
+ // 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);
+ }
}
}
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);
+ // 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);
+ streamingOutput = new CompressingStreamingOutput(masterData, competitorIds, startTime, securityService);
} else {
- streamingOutput = new NonCompressingStreamingOutput(masterData, competitorIds, startTime);
+ streamingOutput = new NonCompressingStreamingOutput(masterData, competitorIds, startTime, securityService);
}
- final ResponseBuilder resp = Response.ok(streamingOutput);
+ 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;
@@ -150,39 +189,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
@@ -193,8 +243,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
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.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.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());
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.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();
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.www/release_notes_admin.html b/java/com.sap.sailing.www/release_notes_admin.html
index 9102203011c..cafc0699e99 100755
--- a/java/com.sap.sailing.www/release_notes_admin.html
+++ b/java/com.sap.sailing.www/release_notes_admin.html
@@ -39,6 +39,17 @@
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.
+
+ 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
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.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,
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.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..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
@@ -83,6 +83,7 @@ public class SecuredSecurityTypes extends HasPermissionsImpl {
DATA_MINING,
CAN_IMPORT_MASTERDATA,
+ CAN_EXPORT_MASTERDATA,
/**
* Secures replication actions on the master side.
*/
@@ -97,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 };
}
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.security/src/com/sap/sse/security/SecurityService.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java
index 441ef4719ed..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,9 +42,10 @@ 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;
-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 +607,16 @@ public interface SecurityService extends ReplicableWithObjectInputStream sessionsAlreadyScheduledForOnChange = new WeakHashMap<>();
+ private static final Object DUMMY = new Object(); // for use as dummy value in sessionsAlreadyScheduledForOnChange
+
+ private static final ConcurrentWeakHashMap sessionsAlreadyScheduledForOnChange = new ConcurrentWeakHashMap<>();
public SecurityWebSessionManager() {
super();
@@ -56,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 ?
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 ad0a471bdac..2ec9b5dcbf0 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
@@ -1668,9 +1668,7 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
}
if (doServerCreateObjectCheck) {
- SecurityUtils.getSubject()
- .checkPermission(SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier(
- ServerActions.CREATE_OBJECT, new TypeRelativeObjectIdentifier(ServerInfo.getName())));
+ checkCurrentUserServerPermission(ServerActions.CREATE_OBJECT);
}
try {
SecurityUtils.getSubject().checkPermission(identifier.getStringPermission(DefaultActions.CREATE));
@@ -1700,6 +1698,21 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
return result;
}
+ @Override
+ public boolean hasCurrentUserServerPermission(ServerActions action) {
+ return SecurityUtils.getSubject().isPermitted(constructServerPermissionString(action));
+ }
+
+ @Override
+ public void checkCurrentUserServerPermission(ServerActions action) {
+ SecurityUtils.getSubject().checkPermission(constructServerPermissionString(action));
+ }
+
+ private String constructServerPermissionString(ServerActions action) {
+ return SecuredSecurityTypes.SERVER.getStringPermissionForTypeRelativeIdentifier(
+ action, new TypeRelativeObjectIdentifier(ServerInfo.getName()));
+ }
+
@Override
public T setOwnershipWithoutCheckPermissionForObjectCreationAndRevertOnError(HasPermissions type,
TypeRelativeObjectIdentifier typeIdentifier, String securityDisplayName, Callable actionWithResult) {
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();
}
}
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