moved SharedSailingData interface to com.sap.sailing.shared.server bundle;

made it implement the Replicable interface so it can be waited for using
the FullyInitializedReplicableTracker
This commit is contained in:
Axel Uhl committed 2020-03-11 15:57:44 +01:00
1 parent 101675b41e
commit 1d6526fc91
24 files changed
+82 -109

No files matched your search

@@ -7,8 +7,7 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.sap.sailing.shared.server.impl.Activator
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: com.sap.sailing.server.gateway.deserialization,
javax.mail;version="1.4.0",
Import-Package: javax.mail;version="1.4.0",
javax.mail.internet;version="1.4.0",
javax.mail.util;version="1.4.0",
org.json.simple,
@@ -20,12 +19,10 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sse.mongodb,
com.sap.sailing.domain.common,
com.sap.sailing.domain.shared.android,
com.sap.sailing.server.gateway.serialization,
com.sap.sse.common,
com.sap.sse.operationaltransformation,
com.sap.sse.replication.interfaces,
com.sap.sse,
com.sap.sailing.server.gateway.serialization.shared.android,
com.sap.sse.shared.android,
com.sap.sse.security,
com.sap.sse.security.common,
@@ -33,12 +30,12 @@ Require-Bundle: com.sap.sailing.domain,
org.apache.shiro.core;bundle-version="1.2.2",
javax.servlet;bundle-version="3.1.0",
com.sap.sse.mail,
com.sap.sailing.server.interface,
org.mongodb.mongo-java-driver;bundle-version="3.6.4",
com.sap.sse.security.common,
com.sap.sailing.shared.persistence
Bundle-ClassPath: .
Export-Package: com.sap.sailing.shared.server.impl;
Export-Package: com.sap.sailing.shared.server,
com.sap.sailing.shared.server.impl;
x-friends:="com.sap.sailing.mongodb.test,
com.sap.sailing.server.test,
com.sap.sailing.server.gateway.test,
@@ -0,0 +1,143 @@
package com.sap.sailing.shared.server;
import java.net.URL;
import java.util.ArrayList;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import com.sap.sailing.domain.common.DeviceIdentifier;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.coursetemplate.CommonMarkProperties;
import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.FixedPositioning;
import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.shared.server.impl.ReplicatingSharedSailingData;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.replication.OperationWithResult;
import com.sap.sse.replication.ReplicableWithObjectInputStream;
import com.sap.sse.security.SecurityService;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
import com.sap.sse.security.shared.impl.UserGroup;
/**
* {@link com.sap.sailing.server.interfaces.RacingEventService RacingEventService} is scoped to one server only. To
* share data that is not exclusively bound to one specific server but relevant for several servers,
* {@link SharedSailingData} provides an alternative replication scope. This means {@link SharedSailingData} may be
* replicated in a similar way as {@link SecurityService}.<br>
* {@link SharedSailingData} encapsulates persistence, replication and security aspects for the following domain types:
* <ul>
* <li>{@link MarkTemplate}s</li>
* <li>{@link MarkProperties}</li>
* <li>{@link CourseTemplate}s</li>
* </ul>
*
* In particular, the reading methods that produce iterables of entities, such as {@link #getAllMarkRoles()} or
* {@link #getAllMarkTemplates()}, will deliver a view restricted by the availability of the {@link DefaultActions#READ}
* permission of the user on whose behalf the request is being executed.
*
* @author Axel Uhl (D043530)
*
*/
public interface SharedSailingData extends ReplicableWithObjectInputStream<ReplicatingSharedSailingData, OperationWithResult<ReplicatingSharedSailingData, ?>> {
Iterable<MarkProperties> getAllMarkProperties(Iterable<String> tagsToFilterFor);
Iterable<MarkTemplate> getAllMarkTemplates();
Iterable<CourseTemplate> getAllCourseTemplates(Iterable<String> tagsToFilterFor);
Iterable<MarkRole> getAllMarkRoles();
MarkRole createMarkRole(String name, String shortName);
MarkRole getMarkRoleById(UUID id);
/**
* @param optionalNonDefaultGroupOwnership
* if {@link Optional#isPresent() present}, defines the {@link UserGroup} to use for the new mark
* properties object's group ownership. Otherwise, the session user's default creation group ownership
* will be used for the current server.
*/
MarkProperties createMarkProperties(CommonMarkProperties properties, Iterable<String> tags, Optional<UserGroup> optionalNonDefaultGroupOwnership);
MarkProperties updateMarkProperties(UUID uuid, CommonMarkProperties properties, Iterable<String> tags);
/**
* @param positioningInformation
* if {@code null}, no update will be performed to the positioning information of the
* {@link MarkProperties} object identified by {@code uuid}. To clear the positioning information, pass
* in a valid, non-{@code null} {@link Positioning} object that makes an "empty" specification, such as a
* {@link FixedPositioning} with a {@code null} {@link FixedPositioning#getFixedPosition()} return.
*/
MarkProperties updateMarkProperties(UUID uuid, CommonMarkProperties properties, Positioning positioningInformation, Iterable<String> tags);
/**
* This overrides a previously set fixed position or associated tracking device.
*/
void setFixedPositionForMarkProperties(MarkProperties markProperties, Position position);
MarkProperties getMarkPropertiesById(UUID id);
/**
* This overrides a previously set fixed position or associated tracking device.
*/
void setTrackingDeviceIdentifierForMarkProperties(MarkProperties markProperties, DeviceIdentifier deviceIdentifier);
MarkTemplate createMarkTemplate(CommonMarkProperties properties);
MarkTemplate getMarkTemplateById(UUID id);
/**
* @param waypoints the waypoints in their defined order (iteration order equals order of waypoints in course)
*/
CourseTemplate createCourseTemplate(String courseTemplateName, String courseTemplateShortName,
Iterable<MarkTemplate> marks, Iterable<WaypointTemplate> waypoints,
Map<MarkTemplate, MarkRole> associatedRoles, Map<MarkRole, MarkTemplate> defaultMarkTemplatesForMarkRoles,
RepeatablePart optionalRepeatablePart, Iterable<String> tags, URL optionalImageURL, Integer defaultNumberOfLaps);
CourseTemplate getCourseTemplateById(UUID id);
/**
* Records the fact that the {@code markProperties} were used to configure a mark based on a
* {@code markTemplate}. Keeps the {@link MillisecondsTimePoint#now() current time} of this call which will be
* returned for {@code markTemplate} when invoking {@link #getUsedMarkProperties(MarkTemplate)}.
*/
void recordUsage(MarkTemplate markTemplate, MarkProperties markProperties);
/**
* Records the fact that the {@code markProperties} were used to configure a mark that takes the given role name.
* Keeps the {@link MillisecondsTimePoint#now() current time} of this call which will be returned for the role name
* when invoking {@link #getUsedMarkProperties(String)}.
*/
void recordUsage(MarkProperties markProperties, MarkRole markRole);
/**
* Returns the time points when {@link MarkProperties} objects were {@link #recordUsage(MarkTemplate, MarkProperties) last used}
* for the {@link MarkTemplate} passed in the {@code markTemplate} parameter.
*/
Map<MarkProperties, TimePoint> getUsedMarkProperties(MarkTemplate markTemplate);
/**
* Returns the time points when {@link MarkProperties} objects were {@link #recordUsage(MarkProperties, String) last used}
* for the role name passed in the {@code roleName} parameter.
*/
Map<MarkProperties, TimePoint> getUsedMarkProperties(MarkRole roleName);
void deleteMarkProperties(MarkProperties markProperties);
void deleteCourseTemplate(CourseTemplate courseTemplate);
Iterable<MarkProperties> getAllMarkProperties();
Iterable<CourseTemplate> getAllCourseTemplates();
CourseTemplate updateCourseTemplate(UUID uuid, String name, String shortName, URL optionalImageURL, ArrayList<String> tags,
Integer defaultNumberOfLaps);
}
@@ -10,8 +10,8 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.domain.sharedsailingdata.SharedSailingData;
import com.sap.sailing.shared.persistence.PersistenceFactory;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.osgi.CachedOsgiTypeBasedServiceFinderFactory;
import com.sap.sse.replication.Replicable;
import com.sap.sse.security.SecurityService;
@@ -11,12 +11,9 @@ import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.sharedsailingdata.SharedSailingData;
import com.sap.sse.replication.OperationWithResult;
import com.sap.sse.replication.ReplicableWithObjectInputStream;
import com.sap.sailing.shared.server.SharedSailingData;
public interface ReplicatingSharedSailingData extends SharedSailingData,
ReplicableWithObjectInputStream<ReplicatingSharedSailingData, OperationWithResult<ReplicatingSharedSailingData, ?>> {
public interface ReplicatingSharedSailingData extends SharedSailingData {
Void internalCreateMarkRole(UUID idOfNewMarkRole, String name, String shortName);