Reduce JSR305 proliferation
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / commands / CommitLocalTransactionRequest.java
index 97381cc267722dbd8afecd80865054d4de32dd3f..adef0c31bc022775889ad6d123954f6be955758d 100644 (file)
@@ -7,11 +7,15 @@
  */
 package org.opendaylight.controller.cluster.access.commands;
 
+import static java.util.Objects.requireNonNull;
+
 import akka.actor.ActorRef;
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects.ToStringHelper;
-import com.google.common.base.Preconditions;
-import javax.annotation.Nonnull;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
 
@@ -22,29 +26,34 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification
  * @author Robert Varga
  */
 @Beta
-public final class CommitLocalTransactionRequest extends AbstractLocalTransactionRequest<CommitLocalTransactionRequest> {
+public final class CommitLocalTransactionRequest
+        extends AbstractLocalTransactionRequest<CommitLocalTransactionRequest> {
     private static final long serialVersionUID = 1L;
+
+    @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class "
+            + "implements writeReplace to delegate serialization to a Proxy class and thus instances of this class "
+            + "aren't serialized. FindBugs does not recognize this.")
     private final DataTreeModification mod;
+    private final Exception delayedFailure;
     private final boolean coordinated;
 
-    public CommitLocalTransactionRequest(final @Nonnull TransactionIdentifier identifier, final long sequence,
-            final @Nonnull ActorRef replyTo, final @Nonnull DataTreeModification mod, final boolean coordinated) {
-        this(identifier, sequence, 0, replyTo, mod, coordinated);
-    }
-
-    CommitLocalTransactionRequest(final @Nonnull TransactionIdentifier identifier, final long sequence,
-            final long retry, final @Nonnull ActorRef replyTo, final @Nonnull DataTreeModification mod,
-            final boolean coordinated) {
-        super(identifier, sequence, retry, replyTo);
-        this.mod = Preconditions.checkNotNull(mod);
+    public CommitLocalTransactionRequest(final @NonNull TransactionIdentifier identifier, final long sequence,
+            final @NonNull ActorRef replyTo, final @NonNull DataTreeModification mod,
+            final @Nullable Exception delayedFailure, final boolean coordinated) {
+        super(identifier, sequence, replyTo);
+        this.mod = requireNonNull(mod);
+        this.delayedFailure = delayedFailure;
         this.coordinated = coordinated;
     }
 
-
-    private CommitLocalTransactionRequest(final CommitLocalTransactionRequest request, final long retry) {
-        super(request, retry);
-        this.mod = request.mod;
-        this.coordinated = request.coordinated;
+    /**
+     * Return the delayed error detected on the frontend. If this error is present, it will be reported as the result
+     * of the first step of the commit process.
+     *
+     * @return Delayed failure, if present.
+     */
+    public Optional<Exception> getDelayedFailure() {
+        return Optional.ofNullable(delayedFailure);
     }
 
     public DataTreeModification getModification() {
@@ -65,11 +74,7 @@ public final class CommitLocalTransactionRequest extends AbstractLocalTransactio
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return super.addToStringAttributes(toStringHelper).add("coordinated", coordinated);
-    }
-
-    @Override
-    protected CommitLocalTransactionRequest cloneAsRetry(final long retry) {
-        return new CommitLocalTransactionRequest(this, retry);
+        return super.addToStringAttributes(toStringHelper).add("coordinated", coordinated)
+                .add("delayedError", delayedFailure);
     }
-}
\ No newline at end of file
+}