Fix followerDistributedDataStore tear down
[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 package org.opendaylight.controller.remote.rpc;
9
10 import java.io.Serializable;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.List;
14 import org.opendaylight.mdsal.dom.api.DOMRpcException;
15 import org.opendaylight.yangtools.yang.common.ErrorSeverity;
16 import org.opendaylight.yangtools.yang.common.ErrorTag;
17 import org.opendaylight.yangtools.yang.common.ErrorType;
18 import org.opendaylight.yangtools.yang.common.RpcError;
19 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
20
21 /**
22  * An Exception for transferring RpcErrors.
23  *
24  * @author Thomas Pantelis
25  */
26 public class RpcErrorsException extends DOMRpcException {
27     @java.io.Serial
28     private static final long serialVersionUID = 1L;
29
30     private static class RpcErrorData implements Serializable {
31         @java.io.Serial
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 (var 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 var rpcErrors = new ArrayList<RpcError>();
68         for (var 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 }