79ebe11b7e62a921d56de542dddc707f22b47aa6
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ListSchemaNodeImpl.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
9 package org.opendaylight.yangtools.yang.parser.builder.impl;
10
11 import com.google.common.base.Optional;
12 import com.google.common.collect.ImmutableList;
13 import com.google.common.collect.ImmutableSet;
14 import java.util.List;
15 import java.util.Objects;
16 import java.util.Set;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
19 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
20 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
23 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
24 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer;
25
26 final class ListSchemaNodeImpl extends AbstractDocumentedDataNodeContainer implements
27         ListSchemaNode, DerivableSchemaNode {
28     private final QName qname;
29     private final SchemaPath path;
30     ImmutableList<QName> keyDefinition;
31     boolean augmenting;
32     boolean addedByUses;
33     ListSchemaNode original;
34     boolean configuration;
35     ConstraintDefinition constraints;
36     ImmutableSet<AugmentationSchema> augmentations;
37     ImmutableList<UnknownSchemaNode> unknownNodes;
38     boolean userOrdered;
39
40     ListSchemaNodeImpl(final QName qname, final SchemaPath path, final ListSchemaNodeBuilder builder) {
41         super(builder);
42         this.qname = qname;
43         this.path = path;
44     }
45
46     @Override
47     public QName getQName() {
48         return qname;
49     }
50
51     @Override
52     public SchemaPath getPath() {
53         return path;
54     }
55
56     @Override
57     public List<QName> getKeyDefinition() {
58         return keyDefinition;
59     }
60
61     @Override
62     public boolean isAugmenting() {
63         return augmenting;
64     }
65
66     @Override
67     public boolean isAddedByUses() {
68         return addedByUses;
69     }
70
71     @Override
72     public Optional<ListSchemaNode> getOriginal() {
73         return Optional.fromNullable(original);
74     }
75
76     @Override
77     public boolean isConfiguration() {
78         return configuration;
79     }
80
81     @Override
82     public ConstraintDefinition getConstraints() {
83         return constraints;
84     }
85
86     @Override
87     public Set<AugmentationSchema> getAvailableAugmentations() {
88         return augmentations;
89     }
90
91     @Override
92     public boolean isUserOrdered() {
93         return userOrdered;
94     }
95
96     @Override
97     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
98         return unknownNodes;
99     }
100
101     @Override
102     public int hashCode() {
103         final int prime = 31;
104         int result = 1;
105         result = prime * result + Objects.hashCode(qname);
106         result = prime * result + Objects.hashCode(path);
107         return result;
108     }
109
110     @Override
111     public boolean equals(final Object obj) {
112         if (this == obj) {
113             return true;
114         }
115         if (obj == null) {
116             return false;
117         }
118         if (getClass() != obj.getClass()) {
119             return false;
120         }
121         final ListSchemaNodeImpl other = (ListSchemaNodeImpl) obj;
122         if (qname == null) {
123             if (other.qname != null) {
124                 return false;
125             }
126         } else if (!qname.equals(other.qname)) {
127             return false;
128         }
129         if (path == null) {
130             if (other.path != null) {
131                 return false;
132             }
133         } else if (!path.equals(other.path)) {
134             return false;
135         }
136         return true;
137     }
138
139     @Override
140     public String toString() {
141         return "list " + qname.getLocalName();
142     }
143 }