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 java.util.Collections;
11 import java.util.HashSet;
14 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
15 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
16 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
17 import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
19 import com.google.common.collect.ImmutableSet;
21 public final class ConstraintsBuilder {
22 private static final int HASH_IF_BOOL_TRUE = 1231;
23 private static final int HASH_IF_BOOL_FALSE = 1237;
25 private final String moduleName;
26 private final int line;
27 private final ConstraintDefinitionImpl instance;
28 private final Set<MustDefinition> mustDefinitions;
29 private RevisionAwareXPath whenStmt;
30 private String whenCondition;
31 private boolean mandatory;
35 public ConstraintsBuilder(final String moduleName, final int line) {
36 this.moduleName = moduleName;
38 instance = new ConstraintDefinitionImpl();
39 mustDefinitions = new HashSet<MustDefinition>();
42 ConstraintsBuilder(final ConstraintsBuilder b) {
43 this.moduleName = b.getModuleName();
44 this.line = b.getLine();
45 instance = new ConstraintDefinitionImpl();
46 mustDefinitions = new HashSet<MustDefinition>(b.getMustDefinitions());
47 whenCondition = b.getWhenCondition();
48 mandatory = b.isMandatory();
49 min = b.getMinElements();
50 max = b.getMaxElements();
53 ConstraintsBuilder(final String moduleName, final int line, final ConstraintDefinition base) {
54 this.moduleName = moduleName;
56 instance = new ConstraintDefinitionImpl();
57 whenStmt = base.getWhenCondition();
58 mustDefinitions = new HashSet<MustDefinition>(base.getMustConstraints());
59 mandatory = base.isMandatory();
60 min = base.getMinElements();
61 max = base.getMaxElements();
64 public ConstraintDefinition build() {
65 if (whenStmt == null) {
66 if (whenCondition == null) {
69 whenStmt = new RevisionAwareXPathImpl(whenCondition, false);
72 instance.setWhenCondition(whenStmt);
73 instance.setMustConstraints(mustDefinitions);
74 instance.setMandatory(mandatory);
75 instance.setMinElements(min);
76 instance.setMaxElements(max);
80 public String getModuleName() {
84 public int getLine() {
88 public Integer getMinElements() {
92 public void setMinElements(final Integer minElements) {
93 this.min = minElements;
96 public Integer getMaxElements() {
100 public void setMaxElements(final Integer maxElements) {
101 this.max = maxElements;
104 public Set<MustDefinition> getMustDefinitions() {
105 return mustDefinitions;
108 public void addMustDefinition(final MustDefinition must) {
109 mustDefinitions.add(must);
112 public String getWhenCondition() {
113 return whenCondition;
116 public void addWhenCondition(final String whenCondition) {
117 this.whenCondition = whenCondition;
120 public boolean isMandatory() {
124 public void setMandatory(final boolean mandatory) {
125 this.mandatory = mandatory;
128 private static final class ConstraintDefinitionImpl implements ConstraintDefinition {
129 private RevisionAwareXPath whenCondition;
130 private Set<MustDefinition> mustConstraints = Collections.emptySet();
131 private boolean mandatory;
132 private Integer minElements;
133 private Integer maxElements;
136 public RevisionAwareXPath getWhenCondition() {
137 return whenCondition;
140 private void setWhenCondition(final RevisionAwareXPath whenCondition) {
141 this.whenCondition = whenCondition;
145 public Set<MustDefinition> getMustConstraints() {
146 return mustConstraints;
149 private void setMustConstraints(final Set<MustDefinition> mustConstraints) {
150 if (mustConstraints != null) {
151 this.mustConstraints = ImmutableSet.copyOf(mustConstraints);
156 public boolean isMandatory() {
160 private void setMandatory(final boolean mandatory) {
161 this.mandatory = mandatory;
165 public Integer getMinElements() {
169 private void setMinElements(final Integer minElements) {
170 this.minElements = minElements;
174 public Integer getMaxElements() {
178 private void setMaxElements(final Integer maxElements) {
179 this.maxElements = maxElements;
183 public int hashCode() {
184 final int prime = 31;
186 result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode());
187 result = prime * result + ((mustConstraints == null) ? 0 : mustConstraints.hashCode());
188 result = prime * result + ((minElements == null) ? 0 : minElements.hashCode());
189 result = prime * result + ((maxElements == null) ? 0 : maxElements.hashCode());
190 result = prime * result + (mandatory ? HASH_IF_BOOL_TRUE : HASH_IF_BOOL_FALSE);
195 public boolean equals(final Object obj) {
202 if (getClass() != obj.getClass()) {
205 ConstraintDefinitionImpl other = (ConstraintDefinitionImpl) obj;
206 if (whenCondition == null) {
207 if (other.whenCondition != null) {
210 } else if (!whenCondition.equals(other.whenCondition)) {
213 if (mustConstraints == null) {
214 if (other.mustConstraints != null) {
217 } else if (!mustConstraints.equals(other.mustConstraints)) {
220 if (mandatory != other.mandatory) {
223 if (minElements == null) {
224 if (other.minElements != null) {
227 } else if (!minElements.equals(other.minElements)) {
230 if (maxElements == null) {
231 if (other.maxElements != null) {
234 } else if (!maxElements.equals(other.maxElements)) {
241 public String toString() {
242 StringBuilder sb = new StringBuilder(ConstraintDefinitionImpl.class.getSimpleName());
244 sb.append("whenCondition=" + whenCondition);
245 sb.append(", mustConstraints=" + mustConstraints);
246 sb.append(", mandatory=" + mandatory);
247 sb.append(", minElements=" + minElements);
248 sb.append(", maxElements=" + maxElements);
250 return sb.toString();