2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
10 import com.google.common.collect.ImmutableSet;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.Objects;
15 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
16 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
17 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
18 import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
19 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
22 * @deprecated Pre-Beryllium implementation, scheduled for removal.
25 public final class ConstraintsBuilderImpl implements ConstraintsBuilder {
26 private static final ConstraintDefinitionImpl EMPTY_CONSTRAINT = new ConstraintDefinitionImpl();
27 private static final ConstraintDefinitionImpl EMPTY_MANDATORY_CONSTRAINT;
30 ConstraintDefinitionImpl c = new ConstraintDefinitionImpl();
33 EMPTY_MANDATORY_CONSTRAINT = c;
36 private final String moduleName;
37 private final int line;
38 private final Set<MustDefinition> mustDefinitions;
39 private ConstraintDefinitionImpl instance;
40 private RevisionAwareXPath whenStmt;
41 private String whenCondition;
42 private boolean mandatory;
46 public ConstraintsBuilderImpl(final String moduleName, final int line) {
47 this.moduleName = moduleName;
49 mustDefinitions = new HashSet<>();
52 ConstraintsBuilderImpl(final ConstraintsBuilder b) {
53 this.moduleName = b.getModuleName();
54 this.line = b.getLine();
55 mustDefinitions = new HashSet<>(b.getMustDefinitions());
56 whenCondition = b.getWhenCondition();
57 mandatory = b.isMandatory();
58 min = b.getMinElements();
59 max = b.getMaxElements();
62 ConstraintsBuilderImpl(final String moduleName, final int line, final ConstraintDefinition base) {
63 this.moduleName = moduleName;
65 whenStmt = base.getWhenCondition();
66 mustDefinitions = new HashSet<>(base.getMustConstraints());
67 mandatory = base.isMandatory();
68 min = base.getMinElements();
69 max = base.getMaxElements();
73 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#build()
76 public ConstraintDefinition build() {
77 if (instance != null) {
81 if (whenStmt == null) {
82 if (whenCondition == null) {
85 whenStmt = new RevisionAwareXPathImpl(whenCondition, false);
89 ConstraintDefinitionImpl newInstance = new ConstraintDefinitionImpl();
90 newInstance.setWhenCondition(whenStmt);
91 newInstance.setMandatory(mandatory);
92 newInstance.setMinElements(min);
93 newInstance.setMaxElements(max);
95 if (!mustDefinitions.isEmpty()) {
96 newInstance.setMustConstraints(mustDefinitions);
98 if (EMPTY_CONSTRAINT.equals(newInstance)) {
99 newInstance = EMPTY_CONSTRAINT;
100 } else if (EMPTY_MANDATORY_CONSTRAINT.equals(newInstance)) {
101 newInstance = EMPTY_MANDATORY_CONSTRAINT;
104 instance = newInstance;
109 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#getModuleName()
112 public String getModuleName() {
117 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#getLine()
120 public int getLine() {
125 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#getMinElements()
128 public Integer getMinElements() {
133 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#setMinElements(java.lang.Integer)
136 public void setMinElements(final Integer minElements) {
137 this.min = minElements;
141 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#getMaxElements()
144 public Integer getMaxElements() {
149 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#setMaxElements(java.lang.Integer)
152 public void setMaxElements(final Integer maxElements) {
153 this.max = maxElements;
157 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#getMustDefinitions()
160 public Set<MustDefinition> getMustDefinitions() {
161 return mustDefinitions;
165 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#addMustDefinition(org.opendaylight.yangtools.yang.model.api.MustDefinition)
168 public void addMustDefinition(final MustDefinition must) {
169 mustDefinitions.add(must);
173 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#getWhenCondition()
176 public String getWhenCondition() {
177 return whenCondition;
181 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#addWhenCondition(java.lang.String)
184 public void addWhenCondition(final String whenCondition) {
185 this.whenCondition = whenCondition;
189 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#isMandatory()
192 public boolean isMandatory() {
197 * @see org.opendaylight.yangtools.yang.parser.builder.impl.IConstraintsBuilder#setMandatory(boolean)
200 public void setMandatory(final boolean mandatory) {
201 this.mandatory = mandatory;
204 private static final class ConstraintDefinitionImpl implements ConstraintDefinition {
205 private RevisionAwareXPath whenCondition;
206 private Set<MustDefinition> mustConstraints = Collections.emptySet();
207 private Boolean mandatory = false;
208 private Integer minElements;
209 private Integer maxElements;
212 public RevisionAwareXPath getWhenCondition() {
213 return whenCondition;
216 private void setWhenCondition(final RevisionAwareXPath whenCondition) {
217 this.whenCondition = whenCondition;
221 public Set<MustDefinition> getMustConstraints() {
222 return mustConstraints;
225 private void setMustConstraints(final Set<MustDefinition> mustConstraints) {
226 if (mustConstraints != null) {
227 this.mustConstraints = ImmutableSet.copyOf(mustConstraints);
232 public boolean isMandatory() {
236 private void setMandatory(final boolean mandatory) {
237 this.mandatory = mandatory;
241 public Integer getMinElements() {
245 private void setMinElements(final Integer minElements) {
246 this.minElements = minElements;
247 if (minElements != null && minElements > 0) {
253 public Integer getMaxElements() {
257 private void setMaxElements(final Integer maxElements) {
258 this.maxElements = maxElements;
262 public int hashCode() {
263 final int prime = 31;
265 result = prime * result + Objects.hashCode(whenCondition);
266 result = prime * result + Objects.hashCode(mustConstraints);
267 result = prime * result + Objects.hashCode(minElements);
268 result = prime * result + Objects.hashCode(maxElements);
269 result = prime * result + mandatory.hashCode();
274 public boolean equals(final Object obj) {
281 if (getClass() != obj.getClass()) {
284 ConstraintDefinitionImpl other = (ConstraintDefinitionImpl) obj;
285 if (whenCondition == null) {
286 if (other.whenCondition != null) {
289 } else if (!whenCondition.equals(other.whenCondition)) {
292 if (mustConstraints == null) {
293 if (other.mustConstraints != null) {
296 } else if (!mustConstraints.equals(other.mustConstraints)) {
299 if (!mandatory.equals(other.mandatory)) {
302 if (minElements == null) {
303 if (other.minElements != null) {
306 } else if (!minElements.equals(other.minElements)) {
309 if (maxElements == null) {
310 if (other.maxElements != null) {
313 } else if (!maxElements.equals(other.maxElements)) {
320 public String toString() {
321 return ConstraintDefinitionImpl.class.getSimpleName() + "[" +
322 "whenCondition=" + whenCondition +
323 ", mustConstraints=" + mustConstraints +
324 ", mandatory=" + mandatory +
325 ", minElements=" + minElements +
326 ", maxElements=" + maxElements +
332 * @deprecated Use #build() instead.
336 public ConstraintDefinition toInstance() {