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 static final int HASH_IF_BOOL_TRUE = 1231;
24 private static final int HASH_IF_BOOL_FALSE = 1237;
26 private final ConstraintDefinitionImpl instance;
27 private final Set<MustDefinition> mustDefinitions;
28 private String whenCondition;
29 private boolean mandatory;
33 public ConstraintsBuilder(final String moduleName, final int line) {
34 super(moduleName, line);
35 instance = new ConstraintDefinitionImpl();
36 mustDefinitions = new HashSet<MustDefinition>();
39 ConstraintsBuilder(final ConstraintsBuilder b) {
40 super(b.getModuleName(), b.getLine());
41 instance = new ConstraintDefinitionImpl();
42 mustDefinitions = new HashSet<MustDefinition>(b.getMustDefinitions());
43 whenCondition = b.getWhenCondition();
44 mandatory = b.isMandatory();
45 min = b.getMinElements();
46 max = b.getMaxElements();
50 public ConstraintDefinition build() {
51 RevisionAwareXPath whenStmt;
52 if (whenCondition == null) {
55 whenStmt = new RevisionAwareXPathImpl(whenCondition, false);
57 instance.setWhenCondition(whenStmt);
58 instance.setMustConstraints(mustDefinitions);
59 instance.setMandatory(mandatory);
60 instance.setMinElements(min);
61 instance.setMaxElements(max);
66 public void addUnknownNodeBuilder(UnknownSchemaNodeBuilder unknownNode) {
67 throw new YangParseException(moduleName, line, "Can not add unknown node to constraints.");
71 public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
72 return Collections.emptyList();
75 public Integer getMinElements() {
79 public void setMinElements(Integer minElements) {
80 this.min = minElements;
83 public Integer getMaxElements() {
87 public void setMaxElements(Integer maxElements) {
88 this.max = maxElements;
91 public Set<MustDefinition> getMustDefinitions() {
92 return mustDefinitions;
95 public void addMustDefinition(MustDefinition must) {
96 mustDefinitions.add(must);
99 public String getWhenCondition() {
100 return whenCondition;
103 public void addWhenCondition(String whenCondition) {
104 this.whenCondition = whenCondition;
107 public boolean isMandatory() {
111 public void setMandatory(boolean mandatory) {
112 this.mandatory = mandatory;
115 private final class ConstraintDefinitionImpl implements ConstraintDefinition {
116 private RevisionAwareXPath whenCondition;
117 private Set<MustDefinition> mustConstraints;
118 private boolean mandatory;
119 private Integer minElements;
120 private Integer maxElements;
123 public RevisionAwareXPath getWhenCondition() {
124 return whenCondition;
127 private void setWhenCondition(RevisionAwareXPath whenCondition) {
128 this.whenCondition = whenCondition;
132 public Set<MustDefinition> getMustConstraints() {
133 if (mustConstraints == null) {
134 return Collections.emptySet();
136 return mustConstraints;
140 private void setMustConstraints(Set<MustDefinition> mustConstraints) {
141 if (mustConstraints != null) {
142 this.mustConstraints = mustConstraints;
147 public boolean isMandatory() {
151 private void setMandatory(boolean mandatory) {
152 this.mandatory = mandatory;
156 public Integer getMinElements() {
160 private void setMinElements(Integer minElements) {
161 this.minElements = minElements;
165 public Integer getMaxElements() {
169 private void setMaxElements(Integer maxElements) {
170 this.maxElements = maxElements;
174 public int hashCode() {
175 final int prime = 31;
177 result = prime * result + ((whenCondition == null) ? 0 : whenCondition.hashCode());
178 result = prime * result + ((mustConstraints == null) ? 0 : mustConstraints.hashCode());
179 result = prime * result + ((minElements == null) ? 0 : minElements.hashCode());
180 result = prime * result + ((maxElements == null) ? 0 : maxElements.hashCode());
181 result = prime * result + (mandatory ? HASH_IF_BOOL_TRUE : HASH_IF_BOOL_FALSE);
186 public boolean equals(Object obj) {
193 if (getClass() != obj.getClass()) {
196 ConstraintDefinitionImpl other = (ConstraintDefinitionImpl) obj;
197 if (whenCondition == null) {
198 if (other.whenCondition != null) {
201 } else if (!whenCondition.equals(other.whenCondition)) {
204 if (mustConstraints == null) {
205 if (other.mustConstraints != null) {
208 } else if (!mustConstraints.equals(other.mustConstraints)) {
211 if (mandatory != other.mandatory) {
214 if (minElements == null) {
215 if (other.minElements != null) {
218 } else if (!minElements.equals(other.minElements)) {
221 if (maxElements == null) {
222 if (other.maxElements != null) {
225 } else if (!maxElements.equals(other.maxElements)) {
232 public String toString() {
233 StringBuilder sb = new StringBuilder(ConstraintDefinitionImpl.class.getSimpleName());
235 sb.append("whenCondition=" + whenCondition);
236 sb.append(", mustConstraints=" + mustConstraints);
237 sb.append(", mandatory=" + mandatory);
238 sb.append(", minElements=" + minElements);
239 sb.append(", maxElements=" + maxElements);
241 return sb.toString();