package gl8080.physics.domain.physical; import java.util.Objects; import gl8080.physics.domain.Physical; import gl8080.physics.domain.primitive.Mass; import gl8080.physics.domain.primitive.Point; import gl8080.physics.domain.primitive.Velocity; public class TransactionalPhysical implements Physical { private final Physical original; private Point location; private Velocity velocity; public TransactionalPhysical(Physical original) { Objects.requireNonNull(original); this.original = original; } public void commit() { if (this.location != null) { this.original.setLocation(location); } if (this.velocity != null) { this.original.setVelocity(velocity); } } @Override public Velocity getVelocity() { return this.original.getVelocity(); } @Override public Point getLocation() { return this.original.getLocation(); } @Override public Mass getMass() { return this.original.getMass(); } @Override public void setLocation(Point location) { this.location = location; } @Override public void setVelocity(Velocity velocity) { this.velocity = velocity; } }