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.ArrayList;
11 import java.util.List;
12 import org.opendaylight.yangtools.yang.common.QName;
13 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
14 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
16 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
17 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
18 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
19 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
23 import com.google.common.base.Preconditions;
24 import com.google.common.collect.ImmutableList;
25 import com.google.common.collect.ImmutableSet;
27 public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNodeContainerBuilder implements
28 AugmentationTargetBuilder, DataSchemaNodeBuilder {
29 private ContainerSchemaNodeImpl instance;
30 private boolean presence;
32 private SchemaPath path;
33 // DataSchemaNode args
34 private boolean augmenting;
35 private boolean addedByUses;
36 private boolean configuration;
37 private ContainerSchemaNode originalNode;
38 private ContainerSchemaNodeBuilder originalBuilder;
39 private final ConstraintsBuilder constraints;
40 // AugmentationTarget args
41 private final List<AugmentationSchema> augmentations = new ArrayList<>();
42 private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
44 public ContainerSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
45 super(moduleName, line, qname);
46 this.path = Preconditions.checkNotNull(path, "Schema Path must not be null");
47 this.constraints = new ConstraintsBuilderImpl(moduleName, line);
50 // constructor for uses
51 public ContainerSchemaNodeBuilder(final String moduleName, final int line, final QName qname,
52 final SchemaPath path, final ContainerSchemaNode base) {
53 super(moduleName, line, qname, path, base);
54 this.path = Preconditions.checkNotNull(path, "Schema Path must not be null");
56 constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints());
58 augmenting = base.isAugmenting();
59 addedByUses = base.isAddedByUses();
61 configuration = base.isConfiguration();
62 presence = base.isPresenceContainer();
64 augmentations.addAll(base.getAvailableAugmentations());
69 protected String getStatementName() {
74 public ContainerSchemaNode build() {
75 if (instance != null) {
80 instance = new ContainerSchemaNodeImpl(this);
82 instance.augmenting = augmenting;
83 instance.addedByUses = addedByUses;
84 instance.configuration = configuration;
85 instance.constraints = constraints.toInstance();
86 instance.presence = presence;
89 if (originalNode == null && originalBuilder != null) {
90 originalNode = originalBuilder.build();
92 instance.original = originalNode;
95 for (AugmentationSchemaBuilder builder : augmentationBuilders) {
96 augmentations.add(builder.build());
98 instance.augmentations = ImmutableSet.copyOf(augmentations);
101 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
102 unknownNodes.add(b.build());
104 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
109 public List<AugmentationSchemaBuilder> getAugmentationBuilders() {
110 return augmentationBuilders;
114 public void addAugmentation(final AugmentationSchemaBuilder augment) {
115 augmentationBuilders.add(augment);
119 public SchemaPath getPath() {
124 public void setPath(final SchemaPath path) {
129 public boolean isAugmenting() {
134 public void setAugmenting(final boolean augmenting) {
135 this.augmenting = augmenting;
139 public boolean isAddedByUses() {
144 public void setAddedByUses(final boolean addedByUses) {
145 this.addedByUses = addedByUses;
149 public ContainerSchemaNodeBuilder getOriginal() {
150 return originalBuilder;
154 public void setOriginal(final SchemaNodeBuilder builder) {
155 Preconditions.checkArgument(builder instanceof ContainerSchemaNodeBuilder, "Original of container cannot be "
157 this.originalBuilder = (ContainerSchemaNodeBuilder) builder;
161 public boolean isConfiguration() {
162 return configuration;
166 public void setConfiguration(final boolean configuration) {
167 this.configuration = configuration;
171 public ConstraintsBuilder getConstraints() {
175 public boolean isPresence() {
179 public void setPresence(final boolean presence) {
180 this.presence = presence;
184 public int hashCode() {
185 final int prime = 31;
187 result = prime * result + ((path == null) ? 0 : path.hashCode());
192 public boolean equals(final Object obj) {
199 if (getClass() != obj.getClass()) {
202 ContainerSchemaNodeBuilder other = (ContainerSchemaNodeBuilder) obj;
204 if (other.path != null) {
207 } else if (!path.equals(other.path)) {
210 if (getParent() == null) {
211 if (other.getParent() != null) {
214 } else if (!getParent().equals(other.getParent())) {
221 public String toString() {
222 return "container " + qname.getLocalName();