Use Objects.equals() in effective statements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / CaseShorthandImpl.java
index 8554da34dfb3c8e4e2a7b5e9fb4f1a00168c976f..e5aec1f44775a5e2424222d3e5ccd867eab7a5e7 100644 (file)
@@ -7,65 +7,91 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import java.util.Collections;
 import java.util.Arrays;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.Status;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UsesNode;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.UsesNode;
 
-public class CaseShorthandImpl implements ChoiceCaseNode {
+public class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode {
 
     private final DataSchemaNode caseShorthandNode;
     private final QName qName;
     private final SchemaPath path;
 
-    public CaseShorthandImpl(DataSchemaNode caseShorthandNode) {
+    private final String description;
+    private final String reference;
+    private final Status status;
+
+    private final boolean augmenting;
+    private final boolean addedByUses;
+    private final ConstraintDefinition constraints;
+    private ChoiceCaseNode original;
+
+    ImmutableList<UnknownSchemaNode> unknownNodes;
+
+    public CaseShorthandImpl(final DataSchemaNode caseShorthandNode) {
         this.caseShorthandNode = caseShorthandNode;
         this.qName = caseShorthandNode.getQName();
 
         SchemaPath caseShorthandNodePath = caseShorthandNode.getPath();
         Iterable<QName> pathFromRoot = caseShorthandNodePath.getPathFromRoot();
+        // FIXME: cacheShorthandNodePath.getParent() should be enough
         this.path = SchemaPath
                 .create(Iterables.limit(pathFromRoot,
                         Iterables.size(pathFromRoot) - 1),
                         caseShorthandNodePath.isAbsolute());
+
+        this.description = caseShorthandNode.getDescription();
+        this.reference = caseShorthandNode.getReference();
+        this.status = caseShorthandNode.getStatus();
+
+        this.augmenting = caseShorthandNode.isAugmenting();
+        this.addedByUses = caseShorthandNode.isAddedByUses();
+        this.constraints = caseShorthandNode.getConstraints();
+        this.unknownNodes = ImmutableList.copyOf(caseShorthandNode.getUnknownSchemaNodes());
     }
 
     @Override
     public boolean isAugmenting() {
-        return caseShorthandNode.isAugmenting();
+        return augmenting;
     }
 
     @Override
     public boolean isAddedByUses() {
-        return caseShorthandNode.isAddedByUses();
+        return addedByUses;
     }
 
     @Override
     public boolean isConfiguration() {
-        return caseShorthandNode.isConfiguration();
+        return false;
     }
 
     @Override
     public ConstraintDefinition getConstraints() {
-        return caseShorthandNode.getConstraints();
+        return constraints;
     }
 
     @Override
     public QName getQName() {
-        return caseShorthandNode.getQName();
+        return qName;
     }
 
     @Override
@@ -75,22 +101,22 @@ public class CaseShorthandImpl implements ChoiceCaseNode {
 
     @Override
     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return caseShorthandNode.getUnknownSchemaNodes();
+        return unknownNodes;
     }
 
     @Override
     public String getDescription() {
-        return caseShorthandNode.getDescription();
+        return description;
     }
 
     @Override
     public String getReference() {
-        return caseShorthandNode.getReference();
+        return reference;
     }
 
     @Override
     public Status getStatus() {
-        return caseShorthandNode.getStatus();
+        return status;
     }
 
     @Override
@@ -109,7 +135,7 @@ public class CaseShorthandImpl implements ChoiceCaseNode {
     }
 
     @Override
-    public DataSchemaNode getDataChildByName(QName name) {
+    public DataSchemaNode getDataChildByName(final QName name) {
         if (qName.equals(name)) {
             return caseShorthandNode;
         } else {
@@ -118,7 +144,7 @@ public class CaseShorthandImpl implements ChoiceCaseNode {
     }
 
     @Override
-    public DataSchemaNode getDataChildByName(String name) {
+    public DataSchemaNode getDataChildByName(final String name) {
         if (qName.getLocalName().equals(name)) {
             return caseShorthandNode;
         } else {
@@ -135,4 +161,43 @@ public class CaseShorthandImpl implements ChoiceCaseNode {
     public Set<AugmentationSchema> getAvailableAugmentations() {
         return Collections.emptySet();
     }
-}
\ No newline at end of file
+
+    @Override
+    public Optional<? extends SchemaNode> getOriginal() {
+        return Optional.fromNullable(original);
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + Objects.hashCode(qName);
+        result = prime * result + Objects.hashCode(path);
+        return result;
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        CaseShorthandImpl other = (CaseShorthandImpl) obj;
+        return Objects.equals(qName, other.qName) && Objects.equals(path, other.path);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(CaseShorthandImpl.class.getSimpleName());
+        sb.append("[");
+        sb.append("qname=");
+        sb.append(qName);
+        sb.append("]");
+        return sb.toString();
+    }
+}