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.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import com.google.common.collect.ImmutableSet;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.Objects;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
18 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
20 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
26 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
29 * @deprecated Pre-Beryllium implementation, scheduled for removal.
32 public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNodeContainerBuilder implements
33 AugmentationTargetBuilder, DataSchemaNodeBuilder {
34 private ContainerSchemaNodeImpl instance;
35 private boolean presence;
37 private SchemaPath path;
38 // DataSchemaNode args
39 private boolean augmenting;
40 private boolean addedByUses;
41 private boolean configuration;
42 private ContainerSchemaNode originalNode;
43 private ContainerSchemaNodeBuilder originalBuilder;
44 private final ConstraintsBuilder constraints;
45 // AugmentationTarget args
46 private final List<AugmentationSchema> augmentations = new ArrayList<>();
47 private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
49 public ContainerSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
50 super(moduleName, line, qname);
51 this.path = Preconditions.checkNotNull(path, "Schema Path must not be null");
52 this.constraints = new ConstraintsBuilderImpl(moduleName, line);
55 // constructor for uses
56 public ContainerSchemaNodeBuilder(final String moduleName, final int line, final QName qname,
57 final SchemaPath path, final ContainerSchemaNode base) {
58 super(moduleName, line, qname, path, base);
59 this.path = Preconditions.checkNotNull(path, "Schema Path must not be null");
61 constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints());
63 augmenting = base.isAugmenting();
64 addedByUses = base.isAddedByUses();
66 configuration = base.isConfiguration();
67 presence = base.isPresenceContainer();
69 augmentations.addAll(base.getAvailableAugmentations());
74 protected String getStatementName() {
79 public ContainerSchemaNode build() {
80 if (instance != null) {
85 instance = new ContainerSchemaNodeImpl(this);
87 instance.augmenting = augmenting;
88 instance.addedByUses = addedByUses;
89 instance.configuration = configuration;
90 instance.constraints = constraints.build();
91 instance.presence = presence;
94 if (originalNode == null && originalBuilder != null) {
95 originalNode = originalBuilder.build();
97 instance.original = originalNode;
100 for (AugmentationSchemaBuilder builder : augmentationBuilders) {
101 augmentations.add(builder.build());
103 instance.augmentations = ImmutableSet.copyOf(augmentations);
106 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
107 unknownNodes.add(b.build());
109 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
114 public List<AugmentationSchemaBuilder> getAugmentationBuilders() {
115 return augmentationBuilders;
119 public void addAugmentation(final AugmentationSchemaBuilder augment) {
120 augmentationBuilders.add(augment);
124 public SchemaPath getPath() {
129 public void setPath(final SchemaPath path) {
134 public boolean isAugmenting() {
139 public void setAugmenting(final boolean augmenting) {
140 this.augmenting = augmenting;
144 public boolean isAddedByUses() {
149 public void setAddedByUses(final boolean addedByUses) {
150 this.addedByUses = addedByUses;
154 public ContainerSchemaNodeBuilder getOriginal() {
155 return originalBuilder;
159 public void setOriginal(final SchemaNodeBuilder builder) {
160 Preconditions.checkArgument(builder instanceof ContainerSchemaNodeBuilder, "Original of container cannot be "
162 this.originalBuilder = (ContainerSchemaNodeBuilder) builder;
166 public boolean isConfiguration() {
167 return configuration;
171 public void setConfiguration(final boolean configuration) {
172 this.configuration = configuration;
176 public ConstraintsBuilder getConstraints() {
180 public boolean isPresence() {
184 public void setPresence(final boolean presence) {
185 this.presence = presence;
189 public int hashCode() {
190 final int prime = 31;
192 result = prime * result + Objects.hashCode(path);
197 public boolean equals(final Object obj) {
204 if (getClass() != obj.getClass()) {
207 ContainerSchemaNodeBuilder other = (ContainerSchemaNodeBuilder) obj;
209 if (other.path != null) {
212 } else if (!path.equals(other.path)) {
215 if (getParent() == null) {
216 if (other.getParent() != null) {
219 } else if (!getParent().equals(other.getParent())) {
226 public String toString() {
227 return "container " + qname.getLocalName();