BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / UsesNodeBuilderImpl.java
index 7da9c5edffb5a45545e646a2f015ca12d3b3798b..6e4e2909524d7d7abdccfa432ed3893534b32707 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.yangtools.yang.parser.builder.impl;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;\r
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;\r
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;\r
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;\r
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;\r
-import org.opendaylight.yangtools.yang.model.api.UsesNode;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.AbstractBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.Builder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;\r
-import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;\r
-import org.opendaylight.yangtools.yang.parser.util.RefineHolder;\r
-import org.opendaylight.yangtools.yang.parser.util.YangParseException;\r
-\r
-public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNodeBuilder {\r
-    private boolean isBuilt;\r
-    private UsesNodeImpl instance;\r
-    private DataNodeContainerBuilder parent;\r
-    private final String groupingName;\r
-    private SchemaPath groupingPath;\r
-    private GroupingDefinition groupingDefinition;\r
-    private GroupingBuilder groupingBuilder;\r
-    private boolean augmenting;\r
-    private boolean addedByUses;\r
-    private final Set<AugmentationSchemaBuilder> addedAugments = new HashSet<AugmentationSchemaBuilder>();\r
-    private final List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();\r
-    private final List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
-\r
-    private Set<DataSchemaNodeBuilder> targetChildren = new HashSet<>();\r
-    private Set<GroupingBuilder> targetGroupings = new HashSet<>();\r
-    private Set<TypeDefinitionBuilder> targetTypedefs = new HashSet<>();\r
-    private List<UnknownSchemaNodeBuilder> targetUnknownNodes = new ArrayList<>();\r
-\r
-    private boolean dataCollected;\r
-    private boolean parentUpdated;\r
-\r
-    @Override\r
-    public boolean isDataCollected() {\r
-        return dataCollected;\r
-    }\r
-\r
-    @Override\r
-    public void setDataCollected(boolean dataCollected) {\r
-        this.dataCollected = dataCollected;\r
-    }\r
-\r
-    @Override\r
-    public boolean isParentUpdated() {\r
-        return parentUpdated;\r
-    }\r
-\r
-    @Override\r
-    public void setParentUpdated(boolean parentUpdated) {\r
-        this.parentUpdated = parentUpdated;\r
-    }\r
-\r
-    public UsesNodeBuilderImpl(final String moduleName, final int line, final String groupingName) {\r
-        super(moduleName, line);\r
-        this.groupingName = groupingName;\r
-    }\r
-\r
-    @Override\r
-    public UsesNode build() {\r
-        if (!isBuilt) {\r
-            instance = new UsesNodeImpl(groupingPath);\r
-            instance.setAugmenting(augmenting);\r
-            instance.setAddedByUses(addedByUses);\r
-\r
-            // AUGMENTATIONS\r
-            final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
-            for (AugmentationSchemaBuilder builder : addedAugments) {\r
-                augments.add(builder.build());\r
-            }\r
-            instance.setAugmentations(augments);\r
-\r
-            // REFINES\r
-            final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();\r
-            for (SchemaNodeBuilder refineBuilder : refineBuilders) {\r
-                SchemaNode refineNode = refineBuilder.build();\r
-                refineNodes.put(refineNode.getPath(), refineNode);\r
-            }\r
-            instance.setRefines(refineNodes);\r
-\r
-            // UNKNOWN NODES\r
-            List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();\r
-            for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {\r
-                unknownNodes.add(b.build());\r
-            }\r
-            instance.setUnknownSchemaNodes(unknownNodes);\r
-\r
-            isBuilt = true;\r
-        }\r
-\r
-        return instance;\r
-    }\r
-\r
-    @Override\r
-    public DataNodeContainerBuilder getParent() {\r
-        return parent;\r
-    }\r
-\r
-    @Override\r
-    public void setParent(Builder parent) {\r
-        if (!(parent instanceof DataNodeContainerBuilder)) {\r
-            throw new YangParseException(moduleName, line, "Unresolved parent of uses '" + groupingName + "'.");\r
-        }\r
-        this.parent = (DataNodeContainerBuilder) parent;\r
-    }\r
-\r
-    @Override\r
-    public SchemaPath getGroupingPath() {\r
-        return groupingPath;\r
-    }\r
-\r
-    @Override\r
-    public void setGroupingPath(SchemaPath groupingPath) {\r
-        this.groupingPath = groupingPath;\r
-    }\r
-\r
-    @Override\r
-    public GroupingDefinition getGroupingDefinition() {\r
-        return groupingDefinition;\r
-    }\r
-\r
-    @Override\r
-    public void setGroupingDefinition(GroupingDefinition groupingDefinition) {\r
-        this.groupingDefinition = groupingDefinition;\r
-    }\r
-\r
-    @Override\r
-    public GroupingBuilder getGroupingBuilder() {\r
-        return groupingBuilder;\r
-    }\r
-\r
-    @Override\r
-    public void setGrouping(GroupingBuilder grouping) {\r
-        this.groupingBuilder = grouping;\r
-    }\r
-\r
-    @Override\r
-    public String getGroupingName() {\r
-        return groupingName;\r
-    }\r
-\r
-    @Override\r
-    public Set<AugmentationSchemaBuilder> getAugmentations() {\r
-        return addedAugments;\r
-    }\r
-\r
-    @Override\r
-    public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {\r
-        addedAugments.add(augmentBuilder);\r
-    }\r
-\r
-    @Override\r
-    public boolean isAugmenting() {\r
-        return augmenting;\r
-    }\r
-\r
-    @Override\r
-    public void setAugmenting(final boolean augmenting) {\r
-        this.augmenting = augmenting;\r
-    }\r
-\r
-    @Override\r
-    public boolean isAddedByUses() {\r
-        return addedByUses;\r
-    }\r
-\r
-    @Override\r
-    public void setAddedByUses(final boolean addedByUses) {\r
-        this.addedByUses = addedByUses;\r
-    }\r
-\r
-    @Override\r
-    public List<SchemaNodeBuilder> getRefineNodes() {\r
-        return refineBuilders;\r
-    }\r
-\r
-    @Override\r
-    public void addRefineNode(DataSchemaNodeBuilder refineNode) {\r
-        refineBuilders.add(refineNode);\r
-    }\r
-\r
-    @Override\r
-    public List<RefineHolder> getRefines() {\r
-        return refines;\r
-    }\r
-\r
-    @Override\r
-    public void addRefine(RefineHolder refine) {\r
-        refines.add(refine);\r
-    }\r
-\r
-    @Override\r
-    public Set<DataSchemaNodeBuilder> getTargetChildren() {\r
-        return targetChildren;\r
-    }\r
-\r
-    @Override\r
-    public void setTargetChildren(Set<DataSchemaNodeBuilder> targetChildren) {\r
-        this.targetChildren = targetChildren;\r
-    }\r
-\r
-    @Override\r
-    public Set<GroupingBuilder> getTargetGroupings() {\r
-        return targetGroupings;\r
-    }\r
-\r
-    @Override\r
-    public void setTargetGroupings(Set<GroupingBuilder> targetGroupings) {\r
-        this.targetGroupings = targetGroupings;\r
-    }\r
-\r
-    @Override\r
-    public Set<TypeDefinitionBuilder> getTargetTypedefs() {\r
-        return targetTypedefs;\r
-    }\r
-\r
-    @Override\r
-    public void setTargetTypedefs(Set<TypeDefinitionBuilder> targetTypedefs) {\r
-        this.targetTypedefs = targetTypedefs;\r
-    }\r
-\r
-    @Override\r
-    public List<UnknownSchemaNodeBuilder> getTargetUnknownNodes() {\r
-        return targetUnknownNodes;\r
-    }\r
-\r
-    @Override\r
-    public void setTargetUnknownNodes(List<UnknownSchemaNodeBuilder> targetUnknownNodes) {\r
-        this.targetUnknownNodes = targetUnknownNodes;\r
-    }\r
-\r
-    @Override\r
-    public int hashCode() {\r
-        final int prime = 31;\r
-        int result = 1;\r
-        result = prime * result + ((groupingName == null) ? 0 : groupingName.hashCode());\r
-        return result;\r
-    }\r
-\r
-    @Override\r
-    public boolean equals(Object obj) {\r
-        if (this == obj)\r
-            return true;\r
-        if (obj == null)\r
-            return false;\r
-        if (getClass() != obj.getClass())\r
-            return false;\r
-        UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj;\r
-        if (groupingName == null) {\r
-            if (other.groupingName != null)\r
-                return false;\r
-        } else if (!groupingName.equals(other.groupingName))\r
-            return false;\r
-\r
-        if (parent == null) {\r
-            if (other.parent != null)\r
-                return false;\r
-        } else if (!parent.equals(other.parent))\r
-            return false;\r
-        if (refines == null) {\r
-            if (other.refines != null)\r
-                return false;\r
-        } else if (!refines.equals(other.refines))\r
-            return false;\r
-        return true;\r
-    }\r
-\r
-    @Override\r
-    public String toString() {\r
-        return "uses '" + groupingName + "'";\r
-    }\r
-\r
-    public final class UsesNodeImpl implements UsesNode {\r
-        private final SchemaPath groupingPath;\r
-        private Set<AugmentationSchema> augmentations = Collections.emptySet();\r
-        private boolean augmenting;\r
-        private boolean addedByUses;\r
-        private Map<SchemaPath, SchemaNode> refines = Collections.emptyMap();\r
-        private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();\r
-\r
-        private UsesNodeImpl(final SchemaPath groupingPath) {\r
-            this.groupingPath = groupingPath;\r
-        }\r
-\r
-        @Override\r
-        public SchemaPath getGroupingPath() {\r
-            return groupingPath;\r
-        }\r
-\r
-        @Override\r
-        public Set<AugmentationSchema> getAugmentations() {\r
-            return augmentations;\r
-        }\r
-\r
-        private void setAugmentations(final Set<AugmentationSchema> augmentations) {\r
-            if (augmentations != null) {\r
-                this.augmentations = augmentations;\r
-            }\r
-        }\r
-\r
-        @Override\r
-        public boolean isAugmenting() {\r
-            return augmenting;\r
-        }\r
-\r
-        private void setAugmenting(final boolean augmenting) {\r
-            this.augmenting = augmenting;\r
-        }\r
-\r
-        @Override\r
-        public boolean isAddedByUses() {\r
-            return addedByUses;\r
-        }\r
-\r
-        private void setAddedByUses(final boolean addedByUses) {\r
-            this.addedByUses = addedByUses;\r
-        }\r
-\r
-        @Override\r
-        public Map<SchemaPath, SchemaNode> getRefines() {\r
-            return refines;\r
-        }\r
-\r
-        private void setRefines(Map<SchemaPath, SchemaNode> refines) {\r
-            if (refines != null) {\r
-                this.refines = refines;\r
-            }\r
-        }\r
-\r
-        public List<UnknownSchemaNode> getUnknownSchemaNodes() {\r
-            return unknownNodes;\r
-        }\r
-\r
-        private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {\r
-            if (unknownSchemaNodes != null) {\r
-                this.unknownNodes = unknownSchemaNodes;\r
-            }\r
-        }\r
-\r
-        public UsesNodeBuilder toBuilder() {\r
-            return UsesNodeBuilderImpl.this;\r
-        }\r
-\r
-        @Override\r
-        public int hashCode() {\r
-            final int prime = 31;\r
-            int result = 1;\r
-            result = prime * result + ((groupingPath == null) ? 0 : groupingPath.hashCode());\r
-            result = prime * result + ((augmentations == null) ? 0 : augmentations.hashCode());\r
-            result = prime * result + (augmenting ? 1231 : 1237);\r
-            return result;\r
-        }\r
-\r
-        @Override\r
-        public boolean equals(Object obj) {\r
-            if (this == obj) {\r
-                return true;\r
-            }\r
-            if (obj == null) {\r
-                return false;\r
-            }\r
-            if (getClass() != obj.getClass()) {\r
-                return false;\r
-            }\r
-            final UsesNodeImpl other = (UsesNodeImpl) obj;\r
-            if (groupingPath == null) {\r
-                if (other.groupingPath != null) {\r
-                    return false;\r
-                }\r
-            } else if (!groupingPath.equals(other.groupingPath)) {\r
-                return false;\r
-            }\r
-            if (augmentations == null) {\r
-                if (other.augmentations != null) {\r
-                    return false;\r
-                }\r
-            } else if (!augmentations.equals(other.augmentations)) {\r
-                return false;\r
-            }\r
-            if (augmenting != other.augmenting) {\r
-                return false;\r
-            }\r
-            return true;\r
-        }\r
-\r
-        @Override\r
-        public String toString() {\r
-            StringBuilder sb = new StringBuilder(UsesNodeImpl.class.getSimpleName());\r
-            sb.append("[groupingPath=" + groupingPath + "]");\r
-            return sb.toString();\r
-        }\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.builder.impl;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
+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.UsesNode;
+import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.Builder;
+import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.RefineBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.util.AbstractBuilder;
+import org.opendaylight.yangtools.yang.parser.util.YangParseException;
+
+/**
+ * @deprecated Pre-Beryllium implementation, scheduled for removal.
+ */
+@Deprecated
+public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNodeBuilder {
+    private UsesNodeImpl instance;
+    private DataNodeContainerBuilder parentBuilder;
+    private final SchemaPath targetGroupingPath;
+    private SchemaPath groupingPath;
+    private GroupingDefinition groupingDefinition;
+    private GroupingBuilder groupingBuilder;
+    private boolean addedByUses;
+    private boolean augmenting;
+    private boolean resolved;
+    private final Set<AugmentationSchemaBuilder> augmentationBuilders = new HashSet<>();
+    private final List<SchemaNodeBuilder> refineBuilders = new ArrayList<>();
+    private final List<RefineBuilder> refines = new ArrayList<>();
+
+    public UsesNodeBuilderImpl(final String moduleName, final int line, final SchemaPath targetGroupingPath) {
+        super(moduleName, line);
+        this.targetGroupingPath = targetGroupingPath;
+    }
+
+    @Override
+    public UsesNode build() {
+        if (instance != null) {
+            return instance;
+        }
+
+        instance = new UsesNodeImpl(groupingPath);
+        instance.setAddedByUses(addedByUses);
+
+        // AUGMENTATIONS
+        final Set<AugmentationSchema> augments = new HashSet<>();
+        for (AugmentationSchemaBuilder builder : augmentationBuilders) {
+            if (!builder.isUnsupportedTarget()) {
+                augments.add(builder.build());
+            }
+        }
+        instance.augmentations = ImmutableSet.copyOf(augments);
+
+        // REFINES
+        final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<>();
+        for (SchemaNodeBuilder refineBuilder : refineBuilders) {
+            SchemaNode refineNode = refineBuilder.build();
+            refineNodes.put(refineNode.getPath(), refineNode);
+        }
+        instance.refines = ImmutableMap.copyOf(refineNodes);
+
+        // UNKNOWN NODES
+        for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+            unknownNodes.add(b.build());
+        }
+        instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
+
+        return instance;
+    }
+
+    @Override
+    public DataNodeContainerBuilder getParent() {
+        return parentBuilder;
+    }
+
+    @Override
+    public void setParent(final Builder parent) {
+        if (!(parent instanceof DataNodeContainerBuilder)) {
+            throw new YangParseException(getModuleName(), getLine(),
+                    "Parent of 'uses' has to be instance of DataNodeContainerBuilder, but was: '" + parent + "'.");
+        }
+        this.parentBuilder = (DataNodeContainerBuilder) parent;
+    }
+
+    @Override
+    public SchemaPath getGroupingPath() {
+        return groupingPath;
+    }
+
+    @Override
+    public GroupingDefinition getGroupingDefinition() {
+        return groupingDefinition;
+    }
+
+    @Override
+    public void setGroupingDefinition(final GroupingDefinition groupingDefinition) {
+        this.groupingDefinition = groupingDefinition;
+        if (groupingDefinition != null) {
+            this.groupingPath = groupingDefinition.getPath();
+        }
+    }
+
+    @Override
+    public GroupingBuilder getGroupingBuilder() {
+        return groupingBuilder;
+    }
+
+    @Override
+    public void setGrouping(final GroupingBuilder grouping) {
+        this.groupingBuilder = grouping;
+        if (groupingBuilder != null) {
+            this.groupingPath = groupingBuilder.getPath();
+        }
+    }
+
+    @Override
+    public SchemaPath getTargetGroupingPath() {
+        return targetGroupingPath;
+    }
+
+    @Override
+    public Set<AugmentationSchemaBuilder> getAugmentations() {
+        return augmentationBuilders;
+    }
+
+    @Override
+    public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {
+        augmentationBuilders.add(augmentBuilder);
+    }
+
+    @Override
+    public boolean isAddedByUses() {
+        return addedByUses;
+    }
+
+    @Override
+    public void setAddedByUses(final boolean addedByUses) {
+        this.addedByUses = addedByUses;
+    }
+
+    @Override
+    public boolean isAugmenting() {
+        return augmenting;
+    }
+
+    @Override
+    public void setAugmenting(final boolean augmenting) {
+        this.augmenting = augmenting;
+    }
+
+    @Override
+    public boolean isResolved() {
+        return resolved;
+    }
+
+    @Override
+    public void setResolved(final boolean resolved) {
+        this.resolved = resolved;
+    }
+
+    @Override
+    public List<SchemaNodeBuilder> getRefineNodes() {
+        return refineBuilders;
+    }
+
+    @Override
+    public void addRefineNode(final DataSchemaNodeBuilder refineNode) {
+        refineBuilders.add(refineNode);
+    }
+
+    @Override
+    public List<RefineBuilder> getRefines() {
+        return refines;
+    }
+
+    @Override
+    public void addRefine(final RefineBuilder refine) {
+        refines.add(refine);
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + Objects.hashCode(groupingPath);
+        result = prime * result + Objects.hashCode(parentBuilder);
+        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;
+        }
+        UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj;
+        if (groupingPath == null) {
+            if (other.groupingPath != null) {
+                return false;
+            }
+        } else if (!groupingPath.equals(other.groupingPath)) {
+            return false;
+        }
+        if (parentBuilder == null) {
+            if (other.parentBuilder != null) {
+                return false;
+            }
+        } else if (!parentBuilder.equals(other.parentBuilder)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "uses '" + groupingPath + "'";
+    }
+
+}