Drop unneeded generic type specifiers
[yangtools.git] / yang / yang-common / src / main / java / org / opendaylight / yangtools / yang / common / RpcResultBuilder.java
index 05477e818f7a586789c7d4222aaed1f99f37b714..7b5ef531c9033d191146902dd14b8cc1a292d1de 100644 (file)
@@ -8,14 +8,16 @@
 
 package org.opendaylight.yangtools.yang.common;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.Collections;
-
+import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorSeverity;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
 
-import com.google.common.collect.ImmutableList;
-
 /**
  * A builder for creating RpcResult instances.
  *
@@ -23,16 +25,17 @@ import com.google.common.collect.ImmutableList;
  *
  * @param <T> the result value type
  */
-public final class RpcResultBuilder<T> {
+public final class RpcResultBuilder<T> implements Builder<RpcResult<T>> {
 
-    private static class RpcResultImpl<T> implements RpcResult<T> {
+    private static class RpcResultImpl<T> implements RpcResult<T>, Serializable {
+        private static final long serialVersionUID = 1L;
 
         private final Collection<RpcError> errors;
         private final T result;
         private final boolean successful;
 
-        RpcResultImpl( boolean successful, T result,
-                       Collection<RpcError> errors ) {
+        RpcResultImpl( final boolean successful, final T result,
+                       final Collection<RpcError> errors ) {
             this.successful = successful;
             this.result = result;
             this.errors = errors;
@@ -54,13 +57,14 @@ public final class RpcResultBuilder<T> {
         }
 
         @Override
-        public String toString(){
+        public String toString() {
             return "RpcResult [successful=" + successful + ", result="
                     + result + ", errors=" + errors + "]";
         }
     }
 
-    private static class RpcErrorImpl implements RpcError {
+    private static class RpcErrorImpl implements RpcError, Serializable {
+        private static final long serialVersionUID = 1L;
 
         private final String applicationTag;
         private final String tag;
@@ -70,9 +74,9 @@ public final class RpcResultBuilder<T> {
         private final ErrorType errorType;
         private final Throwable cause;
 
-        RpcErrorImpl( ErrorSeverity severity, ErrorType errorType,
-                String tag, String message, String applicationTag, String info,
-                Throwable cause ) {
+        RpcErrorImpl( final ErrorSeverity severity, final ErrorType errorType,
+                final String tag, final String message, final String applicationTag, final String info,
+                final Throwable cause ) {
             this.severity = severity;
             this.errorType = errorType;
             this.tag = tag;
@@ -103,7 +107,7 @@ public final class RpcResultBuilder<T> {
         }
 
         @Override
-        public String getMessage(){
+        public String getMessage() {
             return message;
         }
 
@@ -118,7 +122,7 @@ public final class RpcResultBuilder<T> {
         }
 
         @Override
-        public String toString(){
+        public String toString() {
             return "RpcError [message=" + message + ", severity="
                     + severity + ", errorType=" + errorType + ", tag=" + tag
                     + ", applicationTag=" + applicationTag + ", info=" + info
@@ -130,7 +134,7 @@ public final class RpcResultBuilder<T> {
     private T result;
     private final boolean successful;
 
-    private RpcResultBuilder( boolean successful, T result ) {
+    private RpcResultBuilder( final boolean successful, final T result ) {
         this.successful = successful;
         this.result = result;
     }
@@ -139,7 +143,7 @@ public final class RpcResultBuilder<T> {
      * Returns a builder for a successful result.
      */
     public static <T> RpcResultBuilder<T> success() {
-        return new RpcResultBuilder<T>( true, null );
+        return new RpcResultBuilder<>(true, null);
     }
 
     /**
@@ -147,15 +151,24 @@ public final class RpcResultBuilder<T> {
      *
      * @param result the result value
      */
-    public static <T> RpcResultBuilder<T> success( T result ) {
-         return new RpcResultBuilder<T>( true, result );
+    public static <T> RpcResultBuilder<T> success( final T result ) {
+        return new RpcResultBuilder<>(true, result);
+    }
+
+    /**
+     * Returns a builder for a successful result.
+     *
+     * @param builder builder for the result value
+     */
+    public static <T> RpcResultBuilder<T> success( final Builder<T> builder ) {
+        return success(builder.build());
     }
 
     /**
      * Returns a builder for a failed result.
      */
     public static <T> RpcResultBuilder<T> failed() {
-        return new RpcResultBuilder<T>( false, null );
+        return new RpcResultBuilder<>(false, null);
     }
 
     /**
@@ -163,8 +176,8 @@ public final class RpcResultBuilder<T> {
      *
      * @param success true if successful, false otherwise.
      */
-    public static <T> RpcResultBuilder<T> status( boolean success ) {
-        return new RpcResultBuilder<T>( success, null );
+    public static <T> RpcResultBuilder<T> status( final boolean success ) {
+        return new RpcResultBuilder<>(success, null);
     }
 
     /**
@@ -172,8 +185,8 @@ public final class RpcResultBuilder<T> {
      *
      * @param other the other RpcResult.
      */
-    public static <T> RpcResultBuilder<T> from( RpcResult<T> other ) {
-        return new RpcResultBuilder<T>( other.isSuccessful(), other.getResult() )
+    public static <T> RpcResultBuilder<T> from( final RpcResult<T> other ) {
+        return new RpcResultBuilder<>(other.isSuccessful(), other.getResult())
                                                       .withRpcErrors( other.getErrors() );
     }
 
@@ -187,7 +200,7 @@ public final class RpcResultBuilder<T> {
      *
      * @return an RpcError
      */
-    public static RpcError newError( ErrorType errorType, String tag, String message ) {
+    public static RpcError newError( final ErrorType errorType, final String tag, final String message ) {
         return new RpcErrorImpl( ErrorSeverity.ERROR, errorType,
                 tag != null ? tag : "operation-failed", message, null, null, null );
     }
@@ -206,8 +219,8 @@ public final class RpcResultBuilder<T> {
      *
      * @return an RpcError
      */
-    public static RpcError newError(  ErrorType errorType, String tag, String message,
-            String applicationTag, String info, Throwable cause ) {
+    public static RpcError newError(  final ErrorType errorType, final String tag, final String message,
+            final String applicationTag, final String info, final Throwable cause ) {
         return new RpcErrorImpl( ErrorSeverity.ERROR, errorType,
                 tag != null ? tag : "operation-failed", message, applicationTag, info, cause );
     }
@@ -222,7 +235,7 @@ public final class RpcResultBuilder<T> {
      *
      * @return an RpcError
      */
-    public static RpcError newWarning( ErrorType errorType, String tag, String message ) {
+    public static RpcError newWarning( final ErrorType errorType, final String tag, final String message ) {
         return new RpcErrorImpl( ErrorSeverity.WARNING, errorType, tag, message, null, null, null );
     }
 
@@ -240,8 +253,8 @@ public final class RpcResultBuilder<T> {
      *
      * @return an RpcError
      */
-    public static RpcError newWarning(  ErrorType errorType, String tag, String message,
-            String applicationTag, String info, Throwable cause ) {
+    public static RpcError newWarning(  final ErrorType errorType, final String tag, final String message,
+            final String applicationTag, final String info, final Throwable cause ) {
         return new RpcErrorImpl( ErrorSeverity.WARNING, errorType, tag, message,
                                  applicationTag, info, cause );
     }
@@ -251,24 +264,33 @@ public final class RpcResultBuilder<T> {
      *
      * @param result the result value
      */
-    public RpcResultBuilder<T> withResult( T result ) {
+    public RpcResultBuilder<T> withResult( final T result ) {
         this.result = result;
         return this;
     }
 
-    private void addError( ErrorSeverity severity, ErrorType errorType,
-            String tag, String message, String applicationTag, String info,
-            Throwable cause ) {
+    /**
+     * Sets the value of the result.
+     *
+     * @param builder builder for the result value
+     */
+    public RpcResultBuilder<T> withResult( final Builder<T> builder ) {
+        return withResult(builder.build());
+    }
+
+    private void addError( final ErrorSeverity severity, final ErrorType errorType,
+            final String tag, final String message, final String applicationTag, final String info,
+            final Throwable cause ) {
 
         addError( new RpcErrorImpl( severity, errorType,
                                     tag != null ? tag : "operation-failed", message,
                                     applicationTag, info, cause ) );
     }
 
-    private void addError( RpcError error ) {
+    private void addError( final RpcError error ) {
 
-        if( errors == null ) {
-            errors = new ImmutableList.Builder<RpcError>();
+        if (errors == null) {
+            errors = new ImmutableList.Builder<>();
         }
 
         errors.add( error );
@@ -282,7 +304,7 @@ public final class RpcResultBuilder<T> {
      *        {@link RpcError#getTag} for a list of suggested values.
      * @param message a string suitable for human display that describes the warning condition.
      */
-    public RpcResultBuilder<T> withWarning( ErrorType errorType, String tag, String message ) {
+    public RpcResultBuilder<T> withWarning( final ErrorType errorType, final String tag, final String message ) {
         addError( ErrorSeverity.WARNING, errorType, tag, message, null, null, null );
         return this;
     }
@@ -299,8 +321,8 @@ public final class RpcResultBuilder<T> {
      *        and/or implementation-specific debugging information.
      * @param cause the exception that triggered the warning.
      */
-    public RpcResultBuilder<T> withWarning( ErrorType errorType, String tag, String message,
-            String applicationTag, String info, Throwable cause ) {
+    public RpcResultBuilder<T> withWarning( final ErrorType errorType, final String tag, final String message,
+            final String applicationTag, final String info, final Throwable cause ) {
         addError( ErrorSeverity.WARNING, errorType, tag, message, applicationTag, info, cause );
         return this;
     }
@@ -311,7 +333,7 @@ public final class RpcResultBuilder<T> {
      * @param errorType the conceptual layer at which the error occurred.
      * @param message a string suitable for human display that describes the error condition.
      */
-    public RpcResultBuilder<T> withError( ErrorType errorType, String message ) {
+    public RpcResultBuilder<T> withError( final ErrorType errorType, final String message ) {
         addError( ErrorSeverity.ERROR, errorType, null, message, null, null, null );
         return this;
     }
@@ -324,7 +346,7 @@ public final class RpcResultBuilder<T> {
      *        {@link RpcError#getTag} for a list of suggested values.
      * @param message a string suitable for human display that describes the error condition.
      */
-    public RpcResultBuilder<T> withError( ErrorType errorType, String tag, String message ) {
+    public RpcResultBuilder<T> withError( final ErrorType errorType, final String tag, final String message ) {
         addError( ErrorSeverity.ERROR, errorType, tag, message, null, null, null );
         return this;
     }
@@ -336,8 +358,8 @@ public final class RpcResultBuilder<T> {
      * @param message a string suitable for human display that describes the error condition.
      * @param cause the exception that triggered the error.
      */
-    public RpcResultBuilder<T> withError( ErrorType errorType, String message,
-                                          Throwable cause ) {
+    public RpcResultBuilder<T> withError( final ErrorType errorType, final String message,
+                                          final Throwable cause ) {
         addError( ErrorSeverity.ERROR, errorType, null, message, null, null, cause );
         return this;
     }
@@ -354,8 +376,8 @@ public final class RpcResultBuilder<T> {
      *        and/or implementation-specific debugging information.
      * @param cause the exception that triggered the error.
      */
-    public RpcResultBuilder<T> withError( ErrorType errorType, String tag, String message,
-            String applicationTag, String info, Throwable cause ) {
+    public RpcResultBuilder<T> withError( final ErrorType errorType, final String tag, final String message,
+            final String applicationTag, final String info, final Throwable cause ) {
         addError( ErrorSeverity.ERROR, errorType, tag, message, applicationTag, info, cause );
         return this;
     }
@@ -365,7 +387,7 @@ public final class RpcResultBuilder<T> {
      *
      * @param error the RpcError
      */
-    public RpcResultBuilder<T> withRpcError( RpcError error ) {
+    public RpcResultBuilder<T> withRpcError( final RpcError error ) {
         addError( error );
         return this;
     }
@@ -375,18 +397,38 @@ public final class RpcResultBuilder<T> {
      *
      * @param errors the list of RpcErrors
      */
-    public RpcResultBuilder<T> withRpcErrors( Collection<RpcError> errors ) {
-        if( errors != null ) {
-            for( RpcError error: errors ) {
+    public RpcResultBuilder<T> withRpcErrors( final Collection<RpcError> errors ) {
+        if (errors != null) {
+            for (RpcError error : errors) {
                 addError( error );
             }
         }
         return this;
     }
 
+    @Override
     public RpcResult<T> build() {
 
-        return new RpcResultImpl<T>( successful, result,
-                errors != null ? errors.build() : Collections.<RpcError>emptyList() );
+        return new RpcResultImpl<>(successful, result,
+                errors != null ? errors.build() : Collections.emptyList());
+    }
+
+    /**
+     * Builds RpcResult and wraps it in a Future
+     *
+     * This is a convenience method to assist those writing rpcs
+     * that produce immediate results.  It allows you to replace
+     *
+     * Futures.immediateFuture(rpcResult.build())
+     *
+     * with
+     *
+     * rpcResult.buildFuture();
+     *
+     * @return Future for RpcResult built by RpcResultBuilder
+     *
+     */
+    public ListenableFuture<RpcResult<T>> buildFuture() {
+        return Futures.immediateFuture(build());
     }
 }