Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-data-api / src / main / java / org / opendaylight / yangtools / yang / data / api / schema / tree / RequiredElementCountException.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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.yangtools.yang.data.api.schema.tree;
9
10 import com.google.common.annotations.Beta;
11 import java.util.OptionalInt;
12 import org.eclipse.jdt.annotation.NonNullByDefault;
13 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
14
15 /**
16  * Exception thrown when {@code min-elements} or {@code max-element} statement restrictions are violated.
17  *
18  * @author Robert Varga
19  */
20 @Beta
21 @NonNullByDefault
22 public final class RequiredElementCountException extends DataValidationFailedException {
23     private static final long serialVersionUID = 1L;
24
25     private final int actualCount;
26     private final int minimumCount;
27     private final int maximumCount;
28
29     public RequiredElementCountException(final YangInstanceIdentifier path, final int actualCount,
30             final int minimumCount, final int maximumCount, final String message) {
31         super(path, message);
32         this.minimumCount = minimumCount;
33         this.maximumCount = maximumCount;
34         this.actualCount = actualCount;
35     }
36
37     public RequiredElementCountException(final YangInstanceIdentifier path, final int actualCount,
38             final int minimumCount, final int maximumCount, final String format, final Object... args) {
39         this(path, actualCount, minimumCount, maximumCount, String.format(format, args));
40     }
41
42     public OptionalInt getMinimumCount() {
43         return minimumCount == 0 ? OptionalInt.empty() : OptionalInt.of(minimumCount);
44     }
45
46     public OptionalInt getMaximumCount() {
47         return maximumCount == Integer.MAX_VALUE ? OptionalInt.empty() : OptionalInt.of(maximumCount);
48     }
49
50     public int getActualCount() {
51         return actualCount;
52     }
53 }