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 org.opendaylight.yangtools.yang.common.QName;
11 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
12 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
13 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
14 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
15 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
16 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
17 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractSchemaNodeBuilder;
18 import com.google.common.base.Preconditions;
19 import com.google.common.collect.ImmutableList;
21 public final class AnyXmlBuilder extends AbstractSchemaNodeBuilder implements DataSchemaNodeBuilder {
22 private AnyXmlSchemaNodeImpl instance;
24 private boolean augmenting;
25 private boolean addedByUses;
26 private boolean configuration;
27 private AnyXmlSchemaNode originalNode;
28 private AnyXmlBuilder originalBuilder;
29 private final ConstraintsBuilder constraints;
31 public AnyXmlBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
32 super(moduleName, line, qname);
33 this.schemaPath = path;
34 constraints = new ConstraintsBuilderImpl(moduleName, line);
37 public AnyXmlBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
38 final AnyXmlSchemaNode base) {
39 super(moduleName, line, qname);
40 this.schemaPath = path;
41 constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints());
43 description = base.getDescription();
44 reference = base.getReference();
45 status = base.getStatus();
46 augmenting = base.isAugmenting();
47 addedByUses = base.isAddedByUses();
49 configuration = base.isConfiguration();
50 unknownNodes.addAll(base.getUnknownSchemaNodes());
54 public AnyXmlSchemaNode build() {
55 if (instance != null) {
59 instance = new AnyXmlSchemaNodeImpl(qname, schemaPath);
61 instance.description = description;
62 instance.reference = reference;
63 instance.status = status;
64 instance.augmenting = augmenting;
65 instance.addedByUses = addedByUses;
66 instance.configuration = configuration;
67 instance.constraintsDef = constraints.toInstance();
70 if (originalNode == null && originalBuilder != null) {
71 originalNode = originalBuilder.build();
73 instance.original = originalNode;
76 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
77 unknownNodes.add(b.build());
79 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
85 public ConstraintsBuilder getConstraints() {
90 public boolean isAugmenting() {
95 public void setAugmenting(final boolean augmenting) {
96 this.augmenting = augmenting;
100 public boolean isAddedByUses() {
105 public void setAddedByUses(final boolean addedByUses) {
106 this.addedByUses = addedByUses;
110 public AnyXmlBuilder getOriginal() {
111 return originalBuilder;
115 public void setOriginal(final SchemaNodeBuilder builder) {
116 Preconditions.checkArgument(builder instanceof AnyXmlBuilder, "Original of anyxml cannot be " + builder);
117 this.originalBuilder = (AnyXmlBuilder) builder;
121 public boolean isConfiguration() {
122 return configuration;
126 public void setConfiguration(final boolean configuration) {
127 this.configuration = configuration;
131 public int hashCode() {
132 final int prime = 31;
134 result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
139 public boolean equals(final Object obj) {
146 if (getClass() != obj.getClass()) {
149 AnyXmlBuilder other = (AnyXmlBuilder) obj;
150 if (schemaPath == null) {
151 if (other.schemaPath != null) {
154 } else if (!schemaPath.equals(other.schemaPath)) {
157 if (getParent() == null) {
158 if (other.getParent() != null) {
161 } else if (!getParent().equals(other.getParent())) {
168 public String toString() {
169 return "anyxml " + qname.getLocalName();