summaryrefslogtreecommitdiffstats
path: root/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/DataValidationFailedException.java
blob: d728beee448a73e6ce22442ef9b69d5b414e43cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 * Copyright (c) 2018 Cisco and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.fd.honeycomb.translate.write;

import static com.google.common.base.Preconditions.checkNotNull;

import io.fd.honeycomb.translate.ValidationFailedException;
import javax.annotation.Nonnull;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;

/**
 * Thrown when a writer fails to validate data update.
 */
public class DataValidationFailedException extends ValidationFailedException {
    private static final long serialVersionUID = 1;

    private final InstanceIdentifier<?> failedId;

    /**
     * Constructs an ValidationFailedException given data id, exception detail message and exception cause.
     *
     * @param failedId instance identifier of the data object that could not be validated
     * @param cause    the cause of validation failure
     * @param message  the exception detail message
     */
    public DataValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
                                         @Nonnull final String message,
                                         @Nonnull final Throwable cause) {
        super(message, cause);
        this.failedId = checkNotNull(failedId, "failedId should not be null");
    }

    /**
     * Constructs an ValidationFailedException given data id.
     *
     * @param failedId instance identifier of the data object that could not be validated
     */
    public DataValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
                                         @Nonnull final String message) {
        super(message);
        this.failedId = checkNotNull(failedId, "failedId should not be null");
    }

    /**
     * Constructs an ValidationFailedException given data id and exception cause.
     *
     * @param failedId instance identifier of the data object that could not be validated
     * @param cause    the cause of validated failure
     */
    public DataValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
                                         @Nonnull final Throwable cause) {
        super(cause);
        this.failedId = checkNotNull(failedId, "failedId should not be null");
    }

    /**
     * Returns id of the data object that could not be validated.
     *
     * @return data object instance identifier
     */
    @Nonnull
    public InstanceIdentifier<?> getFailedId() {
        return failedId;
    }

    /**
     * Create specific validated failed exception.
     */
    public static class CreateValidationFailedException extends DataValidationFailedException {
        private static final long serialVersionUID = 1;

        private final transient DataObject data;

        public CreateValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
                                               @Nonnull final DataObject data,
                                               @Nonnull final Throwable cause) {
            super(failedId, getMsg(failedId, data), cause);
            this.data = checkNotNull(data, "data");
        }

        private static String getMsg(final @Nonnull InstanceIdentifier<?> failedId,
                                     final @Nonnull DataObject data) {
            return String.format("Failed to validate create request for: %s at: %s.", data, failedId);
        }

        public DataObject getData() {
            return data;
        }
    }

    /**
     * Update specific validated failed exception.
     */
    public static class UpdateValidationFailedException extends DataValidationFailedException {
        private static final long serialVersionUID = 1;

        private final transient DataObject dataBefore;
        private final transient DataObject dataAfter;

        public UpdateValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
                                               @Nonnull final DataObject dataBefore,
                                               @Nonnull final DataObject dataAfter,
                                               @Nonnull final Throwable cause) {
            super(failedId, getMsg(failedId, dataBefore, dataAfter), cause);
            this.dataBefore = checkNotNull(dataBefore, "dataBefore");
            this.dataAfter = checkNotNull(dataAfter, "dataAfter");
        }

        private static String getMsg(final @Nonnull InstanceIdentifier<?> failedId, final DataObject dataBefore,
                                     final @Nonnull DataObject dataAfter) {
            return String
                .format("Failed to validate update request from: %s to: %s, at: %s.", dataBefore, dataAfter, failedId);
        }

        public DataObject getDataBefore() {
            return dataBefore;
        }

        public DataObject getDataAfter() {
            return dataAfter;
        }
    }

    /**
     * Delete specific validated failed exception.
     */
    public static class DeleteValidationFailedException extends DataValidationFailedException {
        private static final long serialVersionUID = 1;

        public DeleteValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId, @Nonnull final Throwable cause) {
            super(failedId, getMsg(failedId), cause);
        }

        private static String getMsg(@Nonnull final InstanceIdentifier<?> failedId) {
            return String.format("Failed to validate delete request: %s.", failedId);
        }
    }
}