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;
12 import java.util.List;
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.AbstractBuilder;
20 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
22 public final class ConstraintsBuilder extends AbstractBuilder {
23 private final ConstraintDefinitionImpl instance;
24 private final Set<MustDefinition> mustDefinitions;
25 private String whenCondition;
26 private boolean mandatory;
30 ConstraintsBuilder(final String moduleName, final int line) {
31 super(moduleName, line);
32 instance = new ConstraintDefinitionImpl();
33 mustDefinitions = new HashSet<MustDefinition>();
37 public ConstraintDefinition build() {
38 RevisionAwareXPath whenStmt;
39 if (whenCondition == null) {
42 whenStmt = new RevisionAwareXPathImpl(whenCondition, false);
44 instance.setWhenCondition(whenStmt);
45 instance.setMustConstraints(mustDefinitions);
46 instance.setMandatory(mandatory);
47 instance.setMinElements(min);
48 instance.setMaxElements(max);
53 public void addUnknownNodeBuilder(UnknownSchemaNodeBuilder unknownNode) {
54 throw new YangParseException(moduleName, line, "Can not add unknown node to constraints.");
58 public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
59 return Collections.emptyList();
62 public Integer getMinElements() {
66 public void setMinElements(Integer minElements) {
67 this.min = minElements;
70 public Integer getMaxElements() {
74 public void setMaxElements(Integer maxElements) {
75 this.max = maxElements;
78 public Set<MustDefinition> getMustDefinitions() {
79 return mustDefinitions;
82 public void addMustDefinition(MustDefinition must) {
83 mustDefinitions.add(must);
86 public String getWhenCondition() {
90 public void addWhenCondition(String whenCondition) {
91 this.whenCondition = whenCondition;
94 public boolean isMandatory() {
98 public void setMandatory(boolean mandatory) {
99 this.mandatory = mandatory;
102 private final class ConstraintDefinitionImpl implements ConstraintDefinition {
103 private RevisionAwareXPath whenCondition;
104 private Set<MustDefinition> mustConstraints;
105 private boolean mandatory;
106 private Integer minElements;
107 private Integer maxElements;
110 public RevisionAwareXPath getWhenCondition() {
111 return whenCondition;
114 private void setWhenCondition(RevisionAwareXPath whenCondition) {
115 this.whenCondition = whenCondition;
119 public Set<MustDefinition> getMustConstraints() {
120 if (mustConstraints == null) {
121 return Collections.emptySet();
123 return mustConstraints;
127 private void setMustConstraints(Set<MustDefinition> mustConstraints) {
128 if (mustConstraints != null) {
129 this.mustConstraints = mustConstraints;
134 public boolean isMandatory() {
138 private void setMandatory(boolean mandatory) {
139 this.mandatory = mandatory;
143 public Integer getMinElements() {
147 private void setMinElements(Integer minElements) {
148 this.minElements = minElements;
152 public Integer getMaxElements() {
156 private void setMaxElements(Integer maxElements) {
157 this.maxElements = maxElements;
161 public int hashCode() {
162 final int prime = 31;
164 result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode());
165 result = prime * result + ((mustConstraints == null) ? 0 : mustConstraints.hashCode());
166 result = prime * result + ((minElements == null) ? 0 : minElements.hashCode());
167 result = prime * result + ((maxElements == null) ? 0 : maxElements.hashCode());
168 result = prime * result + (mandatory ? 1231 : 1237);
173 public boolean equals(Object obj) {
180 if (getClass() != obj.getClass()) {
183 ConstraintDefinitionImpl other = (ConstraintDefinitionImpl) obj;
184 if (whenCondition == null) {
185 if (other.whenCondition != null) {
188 } else if (!whenCondition.equals(other.whenCondition)) {
191 if (mustConstraints == null) {
192 if (other.mustConstraints != null) {
195 } else if (!mustConstraints.equals(other.mustConstraints)) {
198 if (mandatory != other.mandatory) {
201 if (minElements == null) {
202 if (other.minElements != null) {
205 } else if (!minElements.equals(other.minElements)) {
208 if (maxElements == null) {
209 if (other.maxElements != null) {
212 } else if (!maxElements.equals(other.maxElements)) {
219 public String toString() {
220 StringBuilder sb = new StringBuilder(ConstraintDefinitionImpl.class.getSimpleName());
222 sb.append("whenCondition=" + whenCondition);
223 sb.append(", mustConstraints=" + mustConstraints);
224 sb.append(", mandatory=" + mandatory);
225 sb.append(", minElements=" + minElements);
226 sb.append(", maxElements=" + maxElements);
228 return sb.toString();