Bug 5085: Implemented resolving MarkTemplates in replication to ensure

single instance pattern
This commit is contained in:
Steffen Schaefer committed 2019-11-06 13:37:36 +01:00
1 parent 1b11b14a23
commit deddadf0bf
2 files changed
+19 -2

No files matched your search

@@ -4,6 +4,8 @@ import java.util.UUID;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.security.SecuredDomainType;
import com.sap.sailing.domain.coursetemplate.MarkTemplate.MarkTemplateResolver;
import com.sap.sse.common.IsManagedByCache;
import com.sap.sse.common.NamedWithUUID;
import com.sap.sse.security.shared.HasPermissions;
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
@@ -19,7 +21,18 @@ import com.sap.sse.security.shared.WithQualifiedObjectIdentifier;
* @author Axel Uhl (d043530)
*
*/
public interface MarkTemplate extends ControlPointTemplate, NamedWithUUID, CommonMarkProperties, WithQualifiedObjectIdentifier {
public interface MarkTemplate extends ControlPointTemplate, NamedWithUUID, CommonMarkProperties,
WithQualifiedObjectIdentifier, IsManagedByCache<MarkTemplateResolver> {
public interface MarkTemplateResolver {
MarkTemplate getOrCreate(MarkTemplate markTemplate);
}
@Override
default IsManagedByCache<MarkTemplateResolver> resolve(MarkTemplateResolver resolver) {
return resolver.getOrCreate(this);
}
public static TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier(UUID markTemplateUUID) {
return new TypeRelativeObjectIdentifier(markTemplateUUID.toString());
}
@@ -26,6 +26,7 @@ import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkPropertiesBuilder;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.MarkTemplate.MarkTemplateResolver;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.impl.CourseTemplateImpl;
@@ -48,6 +49,7 @@ import com.sap.sse.replication.ReplicationMasterDescriptor;
import com.sap.sse.replication.ReplicationService;
import com.sap.sse.security.SecurityService;
import com.sap.sse.util.ClearStateTestSupport;
import com.sap.sse.util.ObjectInputStreamResolvingAgainstCache;
public class SharedSailingDataImpl implements ReplicatingSharedSailingData, ClearStateTestSupport {
@@ -540,7 +542,9 @@ public class SharedSailingDataImpl implements ReplicatingSharedSailingData, Clea
@Override
public ObjectInputStream createObjectInputStreamResolvingAgainstCache(InputStream is) throws IOException {
return new ObjectInputStream(is);
return new ObjectInputStreamResolvingAgainstCache<MarkTemplateResolver>(is,
mt -> markTemplatesById.computeIfAbsent(mt.getId(), id -> mt), null) {
};
}
@SuppressWarnings("unchecked")