diff --git a/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/OperationWithTransformationSupport.java b/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/OperationWithTransformationSupport.java new file mode 100755 index 00000000000..44dfd0c74cc --- /dev/null +++ b/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/OperationWithTransformationSupport.java @@ -0,0 +1,23 @@ +package com.sap.sailing.operationaltransformation; + + + +public interface OperationWithTransformationSupport> extends Operation { + /** + * Implements the specific transformation rule for the implementing subclass for the set of possible peer operations + * along which to transform this operation, assuming this is the client operation. See + * {@link Transformer#transform(Operation, Operation)} for the specification. + * + * @return the result of transforming this operation along serverOp + */ + O transformClientOp(O serverOp); + + /** + * Implements the specific transformation rule for the implementing subclass for the set of possible peer operations + * along which to transform this operation, assuming this is the server operation. See + * {@link Transformer#transform(Operation, Operation)} for the specification. + * + * @return the result of transforming this operation along clientOp + */ + O transformServerOp(O clientOp); +} diff --git a/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/OperationalTransformer.java b/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/OperationalTransformer.java new file mode 100755 index 00000000000..0e4b972eceb --- /dev/null +++ b/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/OperationalTransformer.java @@ -0,0 +1,13 @@ +package com.sap.sailing.operationaltransformation; + + +public class OperationalTransformer> implements Transformer { + + @Override + public ClientServerOperationPair transform(O clientOp, O serverOp) { + ClientServerOperationPair result = new ClientServerOperationPair( + clientOp.transformClientOp(serverOp), serverOp.transformServerOp(clientOp)); + return result; + } + +} diff --git a/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/package.html b/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/package.html index 7a089eb0cd7..50c2d041290 100755 --- a/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/package.html +++ b/java/com.sap.sailing.operationaltransformation/src/com/sap/sailing/operationaltransformation/package.html @@ -55,4 +55,9 @@ obtain the current state of a peer using the {@link com.sap.runlet.operationaltr operation.

+Consider using {@link com.sap.sailing.operationaltransformation.OperationalTransformer} as the basis for your transformation +logic. It generically works with {@link com.sap.sailing.operationaltransformation.OperationWithTransformationSupport} if you +can afford to have your operation classes implement the transformation logic. The benefit of doing so is that adding more +operations requires you to consider the transformation logic. + \ No newline at end of file diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/OperationalTransformationTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/OperationalTransformationTest.java index ad436cd4ec6..c5867934015 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/OperationalTransformationTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/OperationalTransformationTest.java @@ -15,6 +15,7 @@ import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.mongodb.MongoDBService; +import com.sap.sailing.operationaltransformation.OperationalTransformer; import com.sap.sailing.operationaltransformation.Peer; import com.sap.sailing.operationaltransformation.Peer.Role; import com.sap.sailing.operationaltransformation.PeerImpl; @@ -24,7 +25,6 @@ import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard; import com.sap.sailing.server.operationaltransformation.MoveLeaderboardColumnUp; -import com.sap.sailing.server.operationaltransformation.OperationalTransformer; import com.sap.sailing.server.operationaltransformation.RemoveLeaderboard; public class OperationalTransformationTest { @@ -41,7 +41,7 @@ public class OperationalTransformationTest { MongoDBService.INSTANCE.getDB().dropDatabase(); racingEventServiceServer = new RacingEventServiceImpl(); racingEventServiceReplica = new RacingEventServiceImpl(); - OperationalTransformer transformer = new OperationalTransformer(); + OperationalTransformer> transformer = new OperationalTransformer<>(); server = new PeerImpl<>(transformer, racingEventServiceServer, Role.SERVER); replica = new PeerImpl<>(transformer, racingEventServiceReplica, Role.CLIENT); // wire the peers: diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceLogInRaceColumnTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceLogInRaceColumnTest.java index 3525408ee0e..c0dc9b37d11 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceLogInRaceColumnTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceLogInRaceColumnTest.java @@ -17,6 +17,7 @@ import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEventFactory; import com.sap.sailing.mongodb.MongoDBService; +import com.sap.sailing.operationaltransformation.OperationalTransformer; import com.sap.sailing.operationaltransformation.Peer; import com.sap.sailing.operationaltransformation.Peer.Role; import com.sap.sailing.operationaltransformation.PeerImpl; @@ -25,7 +26,6 @@ import com.sap.sailing.server.RacingEventServiceOperation; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard; -import com.sap.sailing.server.operationaltransformation.OperationalTransformer; public class RaceLogInRaceColumnTest { @@ -39,7 +39,7 @@ public class RaceLogInRaceColumnTest { public void setUp() { MongoDBService.INSTANCE.getDB().dropDatabase(); racingEventServiceServer = new RacingEventServiceImpl(); - OperationalTransformer transformer = new OperationalTransformer(); + OperationalTransformer> transformer = new OperationalTransformer<>(); server = new PeerImpl<>(transformer, racingEventServiceServer, Role.SERVER); } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventServiceOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventServiceOperation.java index d6c4fd272dc..84ded6fd4be 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventServiceOperation.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventServiceOperation.java @@ -2,8 +2,7 @@ package com.sap.sailing.server; import java.io.Serializable; -import com.sap.sailing.operationaltransformation.Operation; -import com.sap.sailing.operationaltransformation.Transformer; +import com.sap.sailing.operationaltransformation.OperationWithTransformationSupport; import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard; @@ -13,7 +12,7 @@ import com.sap.sailing.server.operationaltransformation.RemoveLeaderboard; import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardColumn; import com.sap.sailing.server.operationaltransformation.RenameLeaderboardColumn; -public interface RacingEventServiceOperation extends Operation, Serializable { +public interface RacingEventServiceOperation extends OperationWithTransformationSupport>, Serializable { /** * Performs the actual operation, applying it to the toState service. The operation's result is * returned. @@ -25,24 +24,6 @@ public interface RacingEventServiceOperation extends Operationthis operation along serverOp - */ - RacingEventServiceOperation transformClientOp(RacingEventServiceOperation serverOp); - - /** - * Implements the specific transformation rule for the implementing subclass for the set of possible peer operations - * along which to transform this operation, assuming this is the server operation. See - * {@link Transformer#transform(Operation, Operation)} for the specification. - * - * @return the result of transforming this operation along clientOp - */ - RacingEventServiceOperation transformServerOp(RacingEventServiceOperation clientOp); - /** * Assumes this is the "server" operation and transforms the client's removeColumnFromLeaderboardClientOp according to this * operation. The default implementation will probably pass on the untransformed client operation. However, if this diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AbstractMediaTrackOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AbstractMediaTrackOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddCourseArea.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddCourseArea.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddMediaTrackOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddMediaTrackOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateEvent.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateEvent.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/OperationalTransformer.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/OperationalTransformer.java deleted file mode 100755 index 9fbc518c362..00000000000 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/OperationalTransformer.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.sap.sailing.server.operationaltransformation; - -import com.sap.sailing.operationaltransformation.ClientServerOperationPair; -import com.sap.sailing.operationaltransformation.Transformer; -import com.sap.sailing.server.RacingEventServiceOperation; - -public class OperationalTransformer implements Transformer> { - - @Override - public ClientServerOperationPair> transform(RacingEventServiceOperation clientOp, - RacingEventServiceOperation serverOp) { - ClientServerOperationPair> result = new ClientServerOperationPair>( - clientOp.transformClientOp(serverOp), serverOp.transformServerOp(clientOp)); - return result; - } - -} diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEventOnLeaderboard.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEventOnLeaderboard.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEventOnRegatta.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RecordRaceLogEventOnRegatta.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RemoveEvent.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RemoveEvent.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RemoveMediaTrackOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RemoveMediaTrackOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RenameEvent.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/RenameEvent.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateEvent.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateEvent.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackDurationOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackDurationOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackStartTimeOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackStartTimeOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackTitleOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackTitleOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackUrlOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateMediaTrackUrlOperation.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateRaceDelayToLive.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateRaceDelayToLive.java old mode 100644 new mode 100755 diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateSpecificRegatta.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateSpecificRegatta.java old mode 100644 new mode 100755