Change transformation from DOMRpcResult to RpcResult
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / RpcServiceAdapter.java
index 5b0fbd72274c7dd6ad966df017dbc74d4748ef0f..5dd726f776f8df1b9cd451df3e42707d0147a9cd 100644 (file)
@@ -18,6 +18,7 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.util.Collection;
 import java.util.Map.Entry;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
@@ -29,6 +30,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.RpcError.ErrorSeverity;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -162,10 +165,15 @@ class RpcServiceAdapter implements InvocationHandler {
                 } else {
                     bindingResult = null;
                 }
-                return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build());
+
+                // DOMRpcResult does not have a notion of success, hence we have to reverse-engineer it by looking
+                // at reported errors and checking whether they are just warnings.
+                final Collection<RpcError> errors = input.getErrors();
+                return RpcResult.class.cast(RpcResultBuilder.status(errors.stream()
+                    .noneMatch(error -> error.getSeverity() == ErrorSeverity.ERROR))
+                    .withResult(bindingResult).withRpcErrors(errors).build());
             }, MoreExecutors.directExecutor());
         }
-
     }
 
     private final class NonRoutedStrategy extends RpcInvocationStrategy {