Bump upstream SNAPSHOTS
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / main / java / org / opendaylight / controller / remote / rpc / RpcErrorsException.java
1 /*
2  * Copyright (c) 2014 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.remote.rpc;
10
11 import java.io.Serializable;
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.List;
15 import org.opendaylight.mdsal.dom.api.DOMRpcException;
16 import org.opendaylight.yangtools.yang.common.ErrorSeverity;
17 import org.opendaylight.yangtools.yang.common.ErrorTag;
18 import org.opendaylight.yangtools.yang.common.ErrorType;
19 import org.opendaylight.yangtools.yang.common.RpcError;
20 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
21
22 /**
23  * An Exception for transferring RpcErrors.
24  *
25  * @author Thomas Pantelis
26  */
27 public class RpcErrorsException extends DOMRpcException {
28
29     private static final long serialVersionUID = 1L;
30
31     private static class RpcErrorData implements Serializable {
32         private static final long serialVersionUID = 1L;
33
34         final ErrorSeverity severity;
35         final ErrorType errorType;
36         final ErrorTag tag;
37         final String applicationTag;
38         final String message;
39         final String info;
40         final Throwable cause;
41
42         RpcErrorData(final ErrorSeverity severity, final ErrorType errorType, final ErrorTag tag,
43                 final String applicationTag, final String message, final String info, final Throwable cause) {
44             this.severity = severity;
45             this.errorType = errorType;
46             this.tag = tag;
47             this.applicationTag = applicationTag;
48             this.message = message;
49             this.info = info;
50             this.cause = cause;
51         }
52     }
53
54     private final List<RpcErrorData> rpcErrorDataList = new ArrayList<>();
55
56     public RpcErrorsException(final String message, final Iterable<? extends RpcError> rpcErrors) {
57         super(message);
58
59         for (final RpcError rpcError: rpcErrors) {
60             rpcErrorDataList.add(new RpcErrorData(rpcError.getSeverity(), rpcError.getErrorType(),
61                     rpcError.getTag(), rpcError.getApplicationTag(), rpcError.getMessage(),
62                     rpcError.getInfo(), rpcError.getCause()));
63         }
64     }
65
66     public Collection<RpcError> getRpcErrors() {
67         final Collection<RpcError> rpcErrors = new ArrayList<>();
68         for (final RpcErrorData ed: rpcErrorDataList) {
69             final RpcError rpcError = ed.severity == ErrorSeverity.ERROR
70                     ? RpcResultBuilder.newError(ed.errorType, ed.tag, ed.message, ed.applicationTag,
71                             ed.info, ed.cause) :
72                       RpcResultBuilder.newWarning(ed.errorType, ed.tag, ed.message, ed.applicationTag,
73                             ed.info, ed.cause);
74             rpcErrors.add(rpcError);
75         }
76
77         return rpcErrors;
78     }
79 }