BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / AnyXmlBuilder.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
9
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import java.util.Objects;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
16 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
17 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
18 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
19 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractSchemaNodeBuilder;
21
22 /**
23  * @deprecated Pre-Beryllium implementation, scheduled for removal.
24  */
25 @Deprecated
26 public final class AnyXmlBuilder extends AbstractSchemaNodeBuilder implements DataSchemaNodeBuilder {
27     private AnyXmlSchemaNodeImpl instance;
28
29     private boolean augmenting;
30     private boolean addedByUses;
31     private boolean configuration;
32     private AnyXmlSchemaNode originalNode;
33     private AnyXmlBuilder originalBuilder;
34     private final ConstraintsBuilder constraints;
35
36     public AnyXmlBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
37         super(moduleName, line, qname);
38         this.schemaPath = path;
39         constraints = new ConstraintsBuilderImpl(moduleName, line);
40     }
41
42     public AnyXmlBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
43             final AnyXmlSchemaNode base) {
44         super(moduleName, line, qname);
45         this.schemaPath = path;
46         constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints());
47
48         description = base.getDescription();
49         reference = base.getReference();
50         status = base.getStatus();
51         augmenting = base.isAugmenting();
52         addedByUses = base.isAddedByUses();
53         originalNode = base;
54         configuration = base.isConfiguration();
55         unknownNodes.addAll(base.getUnknownSchemaNodes());
56     }
57
58     @Override
59     public AnyXmlSchemaNode build() {
60         if (instance != null) {
61             return instance;
62         }
63
64         instance = new AnyXmlSchemaNodeImpl(qname, schemaPath);
65
66         instance.description = description;
67         instance.reference = reference;
68         instance.status = status;
69         instance.augmenting = augmenting;
70         instance.addedByUses = addedByUses;
71         instance.configuration = configuration;
72         instance.constraintsDef = constraints.build();
73
74         // ORIGINAL NODE
75         if (originalNode == null && originalBuilder != null) {
76             originalNode = originalBuilder.build();
77         }
78         instance.original = originalNode;
79
80         // UNKNOWN NODES
81         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
82             unknownNodes.add(b.build());
83         }
84         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
85
86         return instance;
87     }
88
89     @Override
90     public ConstraintsBuilder getConstraints() {
91         return constraints;
92     }
93
94     @Override
95     public boolean isAugmenting() {
96         return augmenting;
97     }
98
99     @Override
100     public void setAugmenting(final boolean augmenting) {
101         this.augmenting = augmenting;
102     }
103
104     @Override
105     public boolean isAddedByUses() {
106         return addedByUses;
107     }
108
109     @Override
110     public void setAddedByUses(final boolean addedByUses) {
111         this.addedByUses = addedByUses;
112     }
113
114     @Override
115     public AnyXmlBuilder getOriginal() {
116         return originalBuilder;
117     }
118
119     @Override
120     public void setOriginal(final SchemaNodeBuilder builder) {
121         Preconditions.checkArgument(builder instanceof AnyXmlBuilder, "Original of anyxml cannot be " + builder);
122         this.originalBuilder = (AnyXmlBuilder) builder;
123     }
124
125     @Override
126     public boolean isConfiguration() {
127         return configuration;
128     }
129
130     @Override
131     public void setConfiguration(final boolean configuration) {
132         this.configuration = configuration;
133     }
134
135     @Override
136     public int hashCode() {
137         final int prime = 31;
138         int result = 1;
139         result = prime * result + Objects.hashCode(schemaPath);
140         return result;
141     }
142
143     @Override
144     public boolean equals(final Object obj) {
145         if (this == obj) {
146             return true;
147         }
148         if (obj == null) {
149             return false;
150         }
151         if (getClass() != obj.getClass()) {
152             return false;
153         }
154         AnyXmlBuilder other = (AnyXmlBuilder) obj;
155         if (schemaPath == null) {
156             if (other.schemaPath != null) {
157                 return false;
158             }
159         } else if (!schemaPath.equals(other.schemaPath)) {
160             return false;
161         }
162         if (getParent() == null) {
163             if (other.getParent() != null) {
164                 return false;
165             }
166         } else if (!getParent().equals(other.getParent())) {
167             return false;
168         }
169         return true;
170     }
171
172     @Override
173     public String toString() {
174         return "anyxml " + qname.getLocalName();
175     }
176
177 }