Sonar issues clean-up
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / AnyXmlEffectiveStatementImpl.java
1 /**
2  * Copyright (c) 2015 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.stmt.rfc6020.effective;
9
10 import java.util.Collection;
11 import java.util.LinkedList;
12 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
13 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
14 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
15 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
16 import com.google.common.base.Optional;
17 import com.google.common.collect.ImmutableList;
18 import java.util.List;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
22 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
24 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
25
26 public class AnyXmlEffectiveStatementImpl extends
27         AbstractEffectiveDocumentedNode<QName, AnyxmlStatement> implements
28         AnyXmlSchemaNode, DerivableSchemaNode {
29     private final QName qname;
30     private final SchemaPath path;
31
32     boolean configuration;
33     AnyXmlSchemaNode original;
34     ConstraintDefinition constraintsDef;
35     boolean augmenting;
36     boolean addedByUses;
37
38     ImmutableList<UnknownSchemaNode> unknownNodes;
39
40     public AnyXmlEffectiveStatementImpl(
41             StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
42         super(ctx);
43         this.qname = ctx.getStatementArgument();
44         this.path = Utils.getSchemaPath(ctx);
45
46         initSubstatementCollections();
47     }
48
49     private void initSubstatementCollections() {
50         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
51
52         List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
53
54         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
55             if (effectiveStatement instanceof UnknownSchemaNode) {
56                 UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
57                 unknownNodesInit.add(unknownNode);
58             }
59         }
60
61         this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
62     }
63
64     @Override
65     public QName getQName() {
66         return qname;
67     }
68
69     @Override
70     public SchemaPath getPath() {
71         return path;
72     }
73
74     @Override
75     public boolean isAugmenting() {
76         return augmenting;
77     }
78
79     @Override
80     public boolean isAddedByUses() {
81         return addedByUses;
82     }
83
84     @Override
85     public Optional<AnyXmlSchemaNode> getOriginal() {
86         return Optional.fromNullable(original);
87     }
88
89     @Override
90     public boolean isConfiguration() {
91         return configuration;
92     }
93
94     @Override
95     public ConstraintDefinition getConstraints() {
96         return constraintsDef;
97     }
98
99     @Override
100     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
101         return unknownNodes;
102     }
103
104     @Override
105     public int hashCode() {
106         final int prime = 31;
107         int result = 1;
108         result = prime * result + ((qname == null) ? 0 : qname.hashCode());
109         result = prime * result + ((path == null) ? 0 : path.hashCode());
110         return result;
111     }
112
113     @Override
114     public boolean equals(final Object obj) {
115         if (this == obj) {
116             return true;
117         }
118         if (obj == null) {
119             return false;
120         }
121         if (getClass() != obj.getClass()) {
122             return false;
123         }
124         AnyXmlEffectiveStatementImpl other = (AnyXmlEffectiveStatementImpl) obj;
125         if (qname == null) {
126             if (other.qname != null) {
127                 return false;
128             }
129         } else if (!qname.equals(other.qname)) {
130             return false;
131         }
132         if (path == null) {
133             if (other.path != null) {
134                 return false;
135             }
136         } else if (!path.equals(other.path)) {
137             return false;
138         }
139         return true;
140     }
141
142     @Override
143     public String toString() {
144         StringBuilder sb = new StringBuilder(
145                 AnyXmlEffectiveStatementImpl.class.getSimpleName());
146         sb.append("[");
147         sb.append("qname=").append(qname);
148         sb.append(", path=").append(path);
149         sb.append("]");
150         return sb.toString();
151     }
152
153 }