mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-08 20:12:23 +00:00
Merge branch 'permission-vertical' of ssh://trac@sapsailing.com/home/trac/git into permission-vertical
This commit is contained in:
commit
f88c80720a
9 files changed
+63
-13
No files matched your search
+3
-3
@@ -7,8 +7,8 @@ import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -51,7 +51,6 @@ import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.CourseDataImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceColumnListenerWithDefaultAction;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.common.PassingInstruction;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
|
||||
@@ -303,7 +302,8 @@ public class RaceLogRaceTracker extends AbstractRaceTrackerBaseImpl {
|
||||
}
|
||||
Map<Competitor, Boat> competitorsAndTheirBoats = raceColumn.getAllCompetitorsAndTheirBoats(params.getFleet());
|
||||
Serializable raceId = denoteEvent.getRaceId();
|
||||
final RaceDefinition raceDef = new RaceDefinitionImpl(raceName, course, boatClass, competitorsAndTheirBoats, raceId);
|
||||
final RaceDefinition raceDef = raceTrackingHandler.createRaceDefinition(trackedRegatta.getRegatta(), raceName, course,
|
||||
boatClass, competitorsAndTheirBoats, raceId);
|
||||
Iterable<Sideline> sidelines = Collections.<Sideline> emptyList();
|
||||
// set race definition, so race is linked to leaderboard automatically
|
||||
trackedRegatta.getRegatta().addRace(raceDef);
|
||||
|
||||
@@ -19,7 +19,8 @@ Require-Bundle: com.sap.sailing.domain,
|
||||
org.junit;bundle-version="4.8.2",
|
||||
org.hamcrest.core;bundle-version="1.1.0",
|
||||
com.sap.sse,
|
||||
com.sap.sse.common
|
||||
com.sap.sse.common,
|
||||
com.sap.sailing.domain.shared.android
|
||||
Bundle-ClassPath: resources/,
|
||||
.
|
||||
Import-Package: com.sap.sailing.server
|
||||
|
||||
+6
-3
@@ -30,6 +30,7 @@ import com.sap.sailing.domain.swisstimingadapter.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.swisstimingadapter.impl.MarkImpl;
|
||||
import com.sap.sailing.domain.swisstimingadapter.impl.RaceImpl;
|
||||
import com.sap.sailing.domain.swisstimingadapter.impl.StartListImpl;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingHandler.DefaultRaceTrackingHandler;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
@@ -101,7 +102,7 @@ public class SimpleDomainFactoryTest {
|
||||
public Iterable<Mark> getMarks() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
});
|
||||
}, new DefaultRaceTrackingHandler());
|
||||
assertNotNull(raceDefinition.getBoatClass());
|
||||
assertEquals("UNKNOWN", raceDefinition.getBoatClass().getName());
|
||||
}
|
||||
@@ -120,7 +121,8 @@ public class SimpleDomainFactoryTest {
|
||||
Mark mark2 = new MarkImpl("M1", 0, Arrays.asList("D3", "D4"), /* markType */ null);
|
||||
List<Mark> marks = Arrays.asList(mark1, mark2);
|
||||
Course course = new CourseImpl("1234", marks);
|
||||
RaceDefinition raceDefinition = domainFactory.createRaceDefinition(regatta, race, startList, course);
|
||||
RaceDefinition raceDefinition = domainFactory.createRaceDefinition(regatta, race, startList, course,
|
||||
new DefaultRaceTrackingHandler());
|
||||
ArrayList<Waypoint> waypoints1 = new ArrayList<Waypoint>();
|
||||
for (Waypoint waypoint : raceDefinition.getCourse().getWaypoints()) {
|
||||
waypoints1.add(waypoint);
|
||||
@@ -147,7 +149,8 @@ public class SimpleDomainFactoryTest {
|
||||
Mark mark2 = new MarkImpl("M1", 0, Arrays.asList("D3", "D4"), /* markType */ null);
|
||||
List<Mark> marks = Arrays.asList(mark1, mark2);
|
||||
Course course = new CourseImpl("1234", marks);
|
||||
RaceDefinition raceDefinition = domainFactory.createRaceDefinition(regatta, race, startList, course);
|
||||
RaceDefinition raceDefinition = domainFactory.createRaceDefinition(regatta, race, startList, course,
|
||||
new DefaultRaceTrackingHandler());
|
||||
assertEquals(2, Util.size(raceDefinition.getCourse().getWaypoints()));
|
||||
ArrayList<Waypoint> waypoints1 = new ArrayList<Waypoint>();
|
||||
for (Waypoint waypoint : raceDefinition.getCourse().getWaypoints()) {
|
||||
|
||||
+3
-1
@@ -22,6 +22,7 @@ import com.sap.sailing.domain.swisstimingadapter.impl.DomainFactoryImpl;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
@@ -55,7 +56,8 @@ public interface DomainFactory {
|
||||
|
||||
String getCompetitorID(String boatID, BoatClass boatClass);
|
||||
|
||||
RaceDefinition createRaceDefinition(Regatta regatta, Race race, StartList startList, com.sap.sailing.domain.swisstimingadapter.Course course);
|
||||
RaceDefinition createRaceDefinition(Regatta regatta, Race race, StartList startList, com.sap.sailing.domain.swisstimingadapter.Course course,
|
||||
RaceTrackingHandler raceTrackingHandler);
|
||||
|
||||
com.sap.sailing.domain.base.Mark getOrCreateMark(Serializable trackerID, String description);
|
||||
|
||||
|
||||
+4
-2
@@ -56,6 +56,7 @@ import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
|
||||
import com.sap.sailing.domain.tracking.RaceTrackingHandler;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.impl.CourseDesignUpdateHandler;
|
||||
import com.sap.sailing.domain.tracking.impl.FinishTimeUpdateHandler;
|
||||
@@ -226,12 +227,13 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, Race race, StartList startList, Course course) {
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, Race race, StartList startList, Course course,
|
||||
RaceTrackingHandler raceTrackingHandler) {
|
||||
com.sap.sailing.domain.base.Course domainCourse = createCourse(race.getDescription(), course);
|
||||
Map<Competitor, Boat> competitorsAndBoats = createCompetitorsAndBoats(startList, race.getRaceID(), race.getBoatClass());
|
||||
logger.info("Creating RaceDefinitionImpl for race "+race.getRaceID());
|
||||
BoatClass boatClass = race.getBoatClass() != null ? race.getBoatClass() : getRaceTypeFromRaceID(race.getRaceID()).getBoatClass();
|
||||
RaceDefinition result = new RaceDefinitionImpl(race.getRaceName(), domainCourse, boatClass, competitorsAndBoats, race.getRaceID());
|
||||
RaceDefinition result = raceTrackingHandler.createRaceDefinition(regatta, race.getRaceName(), domainCourse, boatClass, competitorsAndBoats, race.getRaceID());
|
||||
regatta.addRace(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
+2
-1
@@ -466,7 +466,8 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl
|
||||
// now we can create the RaceDefinition and most other things
|
||||
Race swissTimingRace = new RaceImpl(raceID, raceName, raceDescription, boatClass);
|
||||
synchronized (this) {
|
||||
race = domainFactory.createRaceDefinition(regatta, swissTimingRace, startList, course);
|
||||
race = domainFactory.createRaceDefinition(regatta, swissTimingRace, startList, course,
|
||||
raceTrackingHandler);
|
||||
this.notifyAll();
|
||||
}
|
||||
// temp
|
||||
|
||||
+1
-2
@@ -47,7 +47,6 @@ import com.sap.sailing.domain.base.impl.DynamicPerson;
|
||||
import com.sap.sailing.domain.base.impl.DynamicTeam;
|
||||
import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.base.impl.PersonImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
import com.sap.sailing.domain.base.impl.SidelineImpl;
|
||||
import com.sap.sailing.domain.base.impl.TeamImpl;
|
||||
@@ -598,7 +597,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
RaceDefinition raceDefinition = raceCache.get(raceId);
|
||||
if (raceDefinition == null) {
|
||||
logger.info("Creating RaceDefinitionImpl for race "+raceName);
|
||||
raceDefinition = new RaceDefinitionImpl(raceName, course, boatClass, competitorsAndBoats, raceId);
|
||||
raceDefinition = raceTrackingHandler.createRaceDefinition(trackedRegatta.getRegatta(), raceName, course, boatClass, competitorsAndBoats, raceId);
|
||||
} else {
|
||||
logger.info("Already found RaceDefinitionImpl for race "+raceName);
|
||||
}
|
||||
|
||||
+17
@@ -1,10 +1,18 @@
|
||||
package com.sap.sailing.domain.tracking;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
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.Course;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sse.util.ThreadLocalTransporter;
|
||||
|
||||
/**
|
||||
@@ -20,6 +28,9 @@ public interface RaceTrackingHandler {
|
||||
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||
DynamicRaceDefinitionSet raceDefinitionSetToUpdate, boolean useMarkPassingCalculator,
|
||||
RaceLogResolver raceLogResolver, Optional<ThreadLocalTransporter> threadLocalTransporter);
|
||||
|
||||
RaceDefinition createRaceDefinition(Regatta regatta, String name, Course course, BoatClass boatClass,
|
||||
Map<Competitor, Boat> competitorsAndTheirBoats, Serializable id);
|
||||
|
||||
public class DefaultRaceTrackingHandler implements RaceTrackingHandler {
|
||||
@Override
|
||||
@@ -32,5 +43,11 @@ public interface RaceTrackingHandler {
|
||||
millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, raceDefinitionSetToUpdate,
|
||||
useMarkPassingCalculator, raceLogResolver, threadLocalTransporter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, String name, Course course,
|
||||
BoatClass boatClass, Map<Competitor, Boat> competitorsAndTheirBoats, Serializable id) {
|
||||
return new RaceDefinitionImpl(name, course, boatClass, competitorsAndTheirBoats, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
+25
@@ -1,5 +1,7 @@
|
||||
package com.sap.sailing.server.security;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
@@ -7,7 +9,12 @@ import org.apache.shiro.subject.Subject;
|
||||
import org.apache.shiro.subject.support.SubjectThreadState;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
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.Course;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
@@ -66,4 +73,22 @@ public class PermissionAwareRaceTrackingHandler extends DefaultRaceTrackingHandl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition createRaceDefinition(Regatta regatta, String name, Course course, BoatClass boatClass,
|
||||
Map<Competitor, Boat> competitorsAndTheirBoats, Serializable id) {
|
||||
SubjectThreadState subjectThreadState = new SubjectThreadState(subject);
|
||||
subjectThreadState.bind();
|
||||
try {
|
||||
RegattaNameAndRaceName regattaAndRaceIdentifier = new RegattaNameAndRaceName(regatta.getName(), name);
|
||||
QualifiedObjectIdentifier qualifiedObjectIdentifier = TrackedRace.getIdentifier(regattaAndRaceIdentifier);
|
||||
return securityService.setOwnershipCheckPermissionForObjectCreationAndRevertOnError(
|
||||
SecuredDomainType.TRACKED_RACE, qualifiedObjectIdentifier.getTypeRelativeObjectIdentifier(),
|
||||
regattaAndRaceIdentifier.toString(), () -> {
|
||||
return super.createRaceDefinition(regatta, name, course, boatClass, competitorsAndTheirBoats,
|
||||
id);
|
||||
});
|
||||
} finally {
|
||||
subjectThreadState.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user