Merge branch 'main' into translation

This commit is contained in:
Axel Uhl
2024-11-22 10:12:47 +01:00
22 changed files with 213 additions and 29 deletions
@@ -10,6 +10,8 @@ Import-Package: com.sap.sailing.geocoding,
com.sap.sailing.server.preferences,
com.sap.sse.replication,
com.sap.sse.security,
org.apache.shiro;version="[1.7.0,2.0.0]",
org.apache.shiro.subject;version="[1.7.0,2.0.0]",
org.osgi.framework;version="1.7.0"
Export-Package: com.sap.sailing.datamining,
com.sap.sailing.datamining.data,
@@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasRaceResultOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
@@ -11,6 +14,7 @@ import com.sap.sailing.datamining.impl.data.RaceResultOfCompetitorWithContext;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
public class CompetitorOfRaceInLeaderboardRetrievalProcessor
extends AbstractRetrievalProcessor<HasTrackedRaceContext, HasRaceResultOfCompetitorContext> {
@@ -30,10 +34,13 @@ public class CompetitorOfRaceInLeaderboardRetrievalProcessor
if (isAborted()) {
break;
}
HasRaceResultOfCompetitorContext raceResultOfCompetitorContext = new RaceResultOfCompetitorWithContext(
leaderboardContext, element.getRaceColumn(), competitor,
leaderboardContext.getLeaderboardGroupContext().getPolarDataService(), element);
raceResultsOfCompetitor.add(raceResultOfCompetitorContext);
final Subject subject = SecurityUtils.getSubject();
if (subject.isPermitted(competitor.getIdentifier().getStringPermission(DefaultActions.READ))) {
HasRaceResultOfCompetitorContext raceResultOfCompetitorContext = new RaceResultOfCompetitorWithContext(
leaderboardContext, element.getRaceColumn(), competitor,
leaderboardContext.getLeaderboardGroupContext().getPolarDataService(), element);
raceResultsOfCompetitor.add(raceResultOfCompetitorContext);
}
}
return raceResultsOfCompetitor;
}
@@ -3,12 +3,16 @@ package com.sap.sailing.datamining.impl.components;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.datamining.data.HasCompetitorContext;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.impl.data.CompetitorWithContext;
import com.sap.sse.common.Util;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
public class CompetitorRetrievalProcessor extends AbstractRetrievalProcessor<HasLeaderboardContext, HasCompetitorContext> {
public CompetitorRetrievalProcessor(ExecutorService executor,
@@ -20,6 +24,10 @@ public class CompetitorRetrievalProcessor extends AbstractRetrievalProcessor<Has
@Override
protected Iterable<HasCompetitorContext> retrieveData(HasLeaderboardContext element) {
return Util.map(element.getLeaderboard().getCompetitors(), c->new CompetitorWithContext(c, element));
final Subject subject = SecurityUtils.getSubject();
return Util.map(
Util.filter(element.getLeaderboard().getCompetitors(),
c->subject.isPermitted(c.getIdentifier().getStringPermission(DefaultActions.READ))),
c->new CompetitorWithContext(c, element));
}
}
@@ -5,6 +5,9 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.datamining.data.HasLeaderboardGroupContext;
import com.sap.sailing.datamining.impl.data.LeaderboardGroupWithContext;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
@@ -12,6 +15,7 @@ import com.sap.sailing.domain.polars.PolarDataService;
import com.sap.sailing.server.interfaces.RacingEventService;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
public class LeaderboardGroupRetrievalProcessor extends AbstractRetrievalProcessor<RacingEventService, HasLeaderboardGroupContext> {
@@ -26,11 +30,14 @@ public class LeaderboardGroupRetrievalProcessor extends AbstractRetrievalProcess
protected Iterable<HasLeaderboardGroupContext> retrieveData(RacingEventService element) {
Set<HasLeaderboardGroupContext> data = new HashSet<>();
PolarDataService polarDataService = element.getPolarDataService();
for (LeaderboardGroup leaderboardGroup : element.getLeaderboardGroups().values()) {
for (final LeaderboardGroup leaderboardGroup : element.getLeaderboardGroups().values()) {
if (isAborted()) {
break;
}
data.add(new LeaderboardGroupWithContext(leaderboardGroup, polarDataService, element.getBaseDomainFactory(), element.getSecurityService()));
final Subject subject = SecurityUtils.getSubject();
if (subject.isPermitted(leaderboardGroup.getIdentifier().getStringPermission(DefaultActions.READ))) {
data.add(new LeaderboardGroupWithContext(leaderboardGroup, polarDataService, element.getBaseDomainFactory(), element.getSecurityService()));
}
}
return data;
}
@@ -4,12 +4,16 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasLeaderboardGroupContext;
import com.sap.sailing.datamining.impl.data.LeaderboardWithContext;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
public class LeaderboardRetrievalProcessor extends AbstractRetrievalProcessor<HasLeaderboardGroupContext, HasLeaderboardContext> {
@@ -27,7 +31,10 @@ public class LeaderboardRetrievalProcessor extends AbstractRetrievalProcessor<Ha
if (isAborted()) {
break;
}
leaderboardsWithContext.add(new LeaderboardWithContext(leaderboard, element));
final Subject subject = SecurityUtils.getSubject();
if (subject.isPermitted(leaderboard.getIdentifier().getStringPermission(DefaultActions.READ))) {
leaderboardsWithContext.add(new LeaderboardWithContext(leaderboard, element));
}
}
return leaderboardsWithContext;
}
@@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.datamining.data.HasRaceOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.data.RaceOfCompetitorWithContext;
@@ -11,6 +14,7 @@ import com.sap.sailing.datamining.shared.TackTypeSegmentsDataMiningSettings;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
public class RaceOfCompetitorRetrievalProcessor extends AbstractRetrievalProcessor<HasTrackedRaceContext, HasRaceOfCompetitorContext> {
/**
@@ -37,8 +41,11 @@ public class RaceOfCompetitorRetrievalProcessor extends AbstractRetrievalProcess
if (isAborted()) {
break;
}
HasRaceOfCompetitorContext raceOfCompetitorWithContext = new RaceOfCompetitorWithContext(element, competitor, settings);
raceOfCompetitorsWithContext.add(raceOfCompetitorWithContext);
final Subject subject = SecurityUtils.getSubject();
if (subject.isPermitted(competitor.getIdentifier().getStringPermission(DefaultActions.READ))) {
HasRaceOfCompetitorContext raceOfCompetitorWithContext = new RaceOfCompetitorWithContext(element, competitor, settings);
raceOfCompetitorsWithContext.add(raceOfCompetitorWithContext);
}
}
}
return raceOfCompetitorsWithContext;
@@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.data.TrackedRaceWithContext;
@@ -13,6 +16,7 @@ import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
public class TrackedRaceRetrievalProcessor extends AbstractRetrievalProcessor<HasLeaderboardContext, HasTrackedRaceContext> {
@@ -36,13 +40,17 @@ public class TrackedRaceRetrievalProcessor extends AbstractRetrievalProcessor<Ha
break;
}
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
if (trackedRace != null) {
final Subject subject = SecurityUtils.getSubject();
if (trackedRace != null
&& subject.isPermitted(trackedRace.getIdentifier().getStringPermission(DefaultActions.READ))) {
Regatta regatta = trackedRace.getTrackedRegatta().getRegatta();
HasTrackedRaceContext trackedRaceWithContext = new TrackedRaceWithContext(element, regatta, raceColumn, fleet, trackedRace);
trackedRacesWithContext.add(trackedRaceWithContext);
if (subject.isPermitted(regatta.getIdentifier().getStringPermission(DefaultActions.READ))) {
HasTrackedRaceContext trackedRaceWithContext = new TrackedRaceWithContext(element, regatta, raceColumn, fleet, trackedRace);
trackedRacesWithContext.add(trackedRaceWithContext);
}
}
else {
//no tracked race found
// no tracked race found
HasTrackedRaceContext trackedRaceWithContext = new TrackedRaceWithContext(element, /* regatta */ null, raceColumn, fleet, /* trackedRace */ null);
trackedRacesWithContext.add(trackedRaceWithContext);
}
@@ -50,5 +58,4 @@ public class TrackedRaceRetrievalProcessor extends AbstractRetrievalProcessor<Ha
}
return trackedRacesWithContext;
}
}
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.polars.PolarDataService;
import com.sap.sailing.server.preferences.SailorProfilePreference;
import com.sap.sailing.server.preferences.SailorProfilePreferences;
import com.sap.sse.security.SecurityService;
import com.sap.sse.security.shared.impl.User;
public class LeaderboardGroupWithContext implements HasLeaderboardGroupContext {
private final LeaderboardGroup leaderboardGroup;
@@ -54,7 +55,11 @@ public class LeaderboardGroupWithContext implements HasLeaderboardGroupContext {
@Override
public synchronized SailorProfiles getSailorProfiles() {
if (sailorProfiles == null) {
final SailorProfilePreferences sailorProfilePreferences = getSecurityService().getPreferenceObject(getSecurityService().getCurrentUser().getName(), SailorProfilePreferences.PREF_NAME);
final User currentUser = getSecurityService().getCurrentUser();
if (currentUser == null) {
throw new NullPointerException("No user session in DataMining. Thread pool context problems? You may need to attach a user session to the thread.");
}
final SailorProfilePreferences sailorProfilePreferences = getSecurityService().getPreferenceObject(currentUser.getName(), SailorProfilePreferences.PREF_NAME);
if (sailorProfilePreferences != null) {
final List<SailorProfile> theSailorProfiles = new ArrayList<>();
for (final SailorProfilePreference sailorProfilePreference : sailorProfilePreferences.getSailorProfiles()) {
@@ -8,7 +8,7 @@ import com.sap.sailing.datamining.data.SailorProfiles;
import com.sap.sailing.domain.base.Competitor;
public class SailorProfilesImpl implements SailorProfiles {
final Map<Competitor, SailorProfile> profilesForCompetitor;
private final Map<Competitor, SailorProfile> profilesForCompetitor;
/**
* Constructs the mapping from {@link Competitor} to {@link SailorProfile} based on the