Bug 4412: New yang parser effective statements cleanup 44/27744/6
authorFilip Gregor <filip.gregor@pantheon.sk>
Fri, 9 Oct 2015 12:43:44 +0000 (14:43 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 13 Oct 2015 13:14:22 +0000 (13:14 +0000)
- improved classes hierarchy and reduced source code duplicity
- fixed some major sonar issues

Change-Id: Ibec3da63b0a3ab0616402b52798e9450df7feb70
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
Signed-off-by: Filip Gregor <filip.gregor@pantheon.sk>
77 files changed:
yang/yang-data-impl/src/test/resources/odl-datastore-test.yang
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveContainerSchemaNode.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedNode.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSchemaContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSchemaNode.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyXmlEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ArgumentEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BaseEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsEffectiveToStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseShorthandImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConfigEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContactEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DefaultEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DescriptionEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveSchemaContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveStatementBase.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveStmtUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorAppTagEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorMessageEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtendedTypeEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtensionEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FeatureEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FractionDigitsEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/GroupingEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IdentityEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IfFeatureEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IncludeEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/InputEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/KeyEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MandatoryEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MaxElementsEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MinElementsEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ModuleEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NamespaceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrderedByEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrganizationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OutputEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PathEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PositionEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PrefixEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PresenceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ReferenceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RequireInstanceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionDateEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/StatusEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/SubmoduleEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/TypeDefEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UniqueEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnitsEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ValueEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/WhenEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangVersionEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YinElementEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/Decimal64SpecificationEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefSpecificationEffectiveStatementImpl.java

index 45999a662bd23bc09a1270016d69af6da25ae7ec..94b70f4d155325aa835b1973765333c821da0944 100644 (file)
@@ -68,6 +68,6 @@ module odl-datastore-test {
                  }
              }
          }
-        }
+        
     }
 }
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveContainerSchemaNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveContainerSchemaNode.java
new file mode 100644 (file)
index 0000000..565ef61
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 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.stmt.rfc6020.effective;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+abstract class AbstractEffectiveContainerSchemaNode<D extends DeclaredStatement<QName>> extends
+        AbstractEffectiveSimpleDataNodeContainer<D> implements ContainerSchemaNode {
+
+    private final boolean presence;
+
+    public AbstractEffectiveContainerSchemaNode(StmtContext<QName, D, ?> ctx) {
+        super(ctx);
+        this.presence = firstEffective(PresenceEffectiveStatementImpl.class) != null;
+    }
+
+    @Override
+    public boolean isPresenceContainer() {
+        return presence;
+    }
+}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java
new file mode 100644 (file)
index 0000000..42023f1
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015 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.stmt.rfc6020.effective;
+
+import java.util.List;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
+
+abstract class AbstractEffectiveDataSchemaNode<D extends DeclaredStatement<QName>> extends
+        AbstractEffectiveSchemaNode<D> implements DataSchemaNode {
+
+    // :FIXME should be private and final
+    boolean augmenting;
+    private final boolean addedByUses;
+    private final boolean configuration;
+    private final ConstraintDefinition constraints;
+
+    public AbstractEffectiveDataSchemaNode(StmtContext<QName, D, ?> ctx) {
+        super(ctx);
+        this.constraints = new EffectiveConstraintDefinitionImpl(this);
+
+        ConfigEffectiveStatementImpl configStmt = firstEffective(ConfigEffectiveStatementImpl.class);
+        this.configuration = (configStmt == null) ? true : configStmt.argument();
+
+        // initCopyType
+        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
+        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
+            this.addedByUses = this.augmenting = true;
+        } else {
+            this.augmenting = copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION);
+            this.addedByUses = copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES);
+        }
+    }
+
+    @Override
+    public boolean isAugmenting() {
+        return augmenting;
+    }
+
+    @Override
+    public boolean isAddedByUses() {
+        return addedByUses;
+    }
+
+    @Override
+    public boolean isConfiguration() {
+        return configuration;
+    }
+
+    @Override
+    public ConstraintDefinition getConstraints() {
+        return constraints;
+    }
+}
index 5056929b80d9be52ac22ef0ccadca86a593a434a..4da0540a4cd6791039cc9c197b8109c9ce0c3725 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -7,18 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import org.opendaylight.yangtools.yang.model.util.ExtendedType;
-
-import java.util.LinkedHashSet;
-import java.util.LinkedHashMap;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.Map;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
@@ -26,16 +21,20 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.util.ExtendedType;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends DeclaredStatement<A>>
+abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends DeclaredStatement<A>>
         extends AbstractEffectiveDocumentedNode<A, D> implements
         DataNodeContainer {
 
-    private final ImmutableMap<QName, DataSchemaNode> childNodes;
-    private final ImmutableSet<GroupingDefinition> groupings;
-    private final ImmutableSet<UsesNode> uses;
-    private final ImmutableSet<TypeDefinition<?>> typeDefinitions;
-    private final ImmutableSet<DataSchemaNode> publicChildNodes;
+    private final Map<QName, DataSchemaNode> childNodes;
+    private final Set<GroupingDefinition> groupings;
+    private final Set<UsesNode> uses;
+    private final Set<TypeDefinition<?>> typeDefinitions;
+    private final Set<DataSchemaNode> publicChildNodes;
 
     protected AbstractEffectiveDocumentedDataNodeContainer(
             final StmtContext<A, D, ?> ctx) {
index 6d79510f9e75030771783a45946fffb0fa69398b..c0c7477a9b21bff2710bbbb77e8fb67e7bc44372 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -7,13 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
 import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public abstract class AbstractEffectiveDocumentedNode<A, D extends DeclaredStatement<A>>
+abstract class AbstractEffectiveDocumentedNode<A, D extends DeclaredStatement<A>>
         extends EffectiveStatementBase<A, D> implements DocumentedNode {
 
     private final String description;
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java
new file mode 100644 (file)
index 0000000..ff01174
--- /dev/null
@@ -0,0 +1,395 @@
+/*
+ * Copyright (c) 2015 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.stmt.rfc6020.effective;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import java.net.URI;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
+import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Deviation;
+import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
+import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
+import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
+import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.UsesNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
+import org.opendaylight.yangtools.yang.model.util.ExtendedType;
+import org.opendaylight.yangtools.yang.model.util.ModuleImportImpl;
+import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource;
+import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToIdentifier;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+
+abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> extends
+        AbstractEffectiveDocumentedNode<String, D> implements Module, Immutable {
+
+    private final String name;
+    private final String sourcePath;
+    private final String prefix;
+    private final String yangVersion;
+    private final String organization;
+    private final String contact;
+    private final Set<ModuleImport> imports;
+    private final Set<Module> submodules;
+    private final Set<FeatureDefinition> features;
+    private final Set<NotificationDefinition> notifications;
+    private final Set<AugmentationSchema> augmentations;
+    private final Set<RpcDefinition> rpcs;
+    private final Set<Deviation> deviations;
+    private final List<ExtensionDefinition> extensionNodes;
+    private final Set<IdentitySchemaNode> identities;
+    private final List<UnknownSchemaNode> unknownNodes;
+    private final Map<QName, DataSchemaNode> childNodes;
+    private final Set<GroupingDefinition> groupings;
+    private final Set<UsesNode> uses;
+    private final Set<TypeDefinition<?>> typeDefinitions;
+    private final Set<DataSchemaNode> publicChildNodes;
+
+    AbstractEffectiveModule(final StmtContext<String, D, ? extends EffectiveStatement<String, ?>> ctx) {
+        super(ctx);
+
+        this.name = argument();
+
+        PrefixEffectiveStatementImpl prefixStmt = firstEffective(PrefixEffectiveStatementImpl.class);
+        this.prefix = (prefixStmt == null) ? null : prefixStmt.argument();
+
+        YangVersionEffectiveStatementImpl yangVersionStmt = firstEffective(YangVersionEffectiveStatementImpl.class);
+        this.yangVersion = (yangVersionStmt == null) ? "1" : yangVersionStmt.argument();
+
+        OrganizationEffectiveStatementImpl organizationStmt = firstEffective(OrganizationEffectiveStatementImpl.class);
+        this.organization = (organizationStmt == null) ? null : organizationStmt.argument();
+
+        ContactEffectiveStatementImpl contactStmt = firstEffective(ContactEffectiveStatementImpl.class);
+        this.contact = (contactStmt == null) ? null : contactStmt.argument();
+
+        if (ctx.getStatementSourceReference() instanceof DeclarationInTextSource) {
+            this.sourcePath = ((DeclarationInTextSource) ctx.getStatementSourceReference()).getSourceName();
+        } else {
+            this.sourcePath = null;
+        }
+
+        // init submodules and substatements of submodules
+        final List<EffectiveStatement<?, ?>> substatementsOfSubmodules;
+        final Map<String, ModuleIdentifier> includedSubmodulesMap = ctx
+                .getAllFromCurrentStmtCtxNamespace(IncludedSubmoduleNameToIdentifier.class);
+
+        if (includedSubmodulesMap == null || includedSubmodulesMap.isEmpty()) {
+            this.submodules = ImmutableSet.of();
+            substatementsOfSubmodules = ImmutableList.of();
+        } else {
+            Collection<ModuleIdentifier> includedSubmodules = includedSubmodulesMap.values();
+            Set<Module> submodulesInit = new HashSet<>();
+            List<EffectiveStatement<?, ?>> substatementsOfSubmodulesInit = new LinkedList<>();
+            for (ModuleIdentifier submoduleIdentifier : includedSubmodules) {
+                @SuppressWarnings("unchecked")
+                Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> submoduleCtx = (Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>) ctx
+                        .getFromNamespace(SubmoduleNamespace.class, submoduleIdentifier);
+                SubmoduleEffectiveStatementImpl submodule = (SubmoduleEffectiveStatementImpl) submoduleCtx
+                        .buildEffective();
+                submodulesInit.add(submodule);
+                substatementsOfSubmodulesInit.addAll(submodule.effectiveSubstatements());
+            }
+
+            this.submodules = ImmutableSet.copyOf(submodulesInit);
+            substatementsOfSubmodules = ImmutableList.copyOf(substatementsOfSubmodulesInit);
+        }
+
+        // init substatements collections
+        List<EffectiveStatement<?, ?>> effectiveSubstatements = new LinkedList<>();
+
+        effectiveSubstatements.addAll(effectiveSubstatements());
+        effectiveSubstatements.addAll(substatementsOfSubmodules);
+
+        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
+        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
+        Set<ModuleImport> importsInit = new HashSet<>();
+        Set<NotificationDefinition> notificationsInit = new HashSet<>();
+        Set<RpcDefinition> rpcsInit = new HashSet<>();
+        Set<Deviation> deviationsInit = new HashSet<>();
+        Set<IdentitySchemaNode> identitiesInit = new HashSet<>();
+        Set<FeatureDefinition> featuresInit = new HashSet<>();
+        List<ExtensionDefinition> extensionNodesInit = new LinkedList<>();
+
+        Map<QName, DataSchemaNode> mutableChildNodes = new LinkedHashMap<>();
+        Set<GroupingDefinition> mutableGroupings = new HashSet<>();
+        Set<UsesNode> mutableUses = new HashSet<>();
+        Set<TypeDefinition<?>> mutableTypeDefinitions = new LinkedHashSet<>();
+        Set<DataSchemaNode> mutablePublicChildNodes = new LinkedHashSet<>();
+
+        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
+            if (effectiveStatement instanceof UnknownSchemaNode) {
+                unknownNodesInit.add((UnknownSchemaNode) effectiveStatement);
+            }
+            if (effectiveStatement instanceof AugmentationSchema) {
+                augmentationsInit.add((AugmentationSchema) effectiveStatement);
+            }
+            if (effectiveStatement instanceof ModuleImport) {
+                importsInit.add((ModuleImport) effectiveStatement);
+            }
+            if (effectiveStatement instanceof NotificationDefinition) {
+                notificationsInit.add((NotificationDefinition) effectiveStatement);
+            }
+            if (effectiveStatement instanceof RpcDefinition) {
+                rpcsInit.add((RpcDefinition) effectiveStatement);
+            }
+            if (effectiveStatement instanceof Deviation) {
+                deviationsInit.add((Deviation) effectiveStatement);
+            }
+            if (effectiveStatement instanceof IdentitySchemaNode) {
+                identitiesInit.add((IdentitySchemaNode) effectiveStatement);
+            }
+            if (effectiveStatement instanceof FeatureDefinition) {
+                featuresInit.add((FeatureDefinition) effectiveStatement);
+            }
+            if (effectiveStatement instanceof ExtensionDefinition) {
+                extensionNodesInit.add((ExtensionDefinition) effectiveStatement);
+            }
+            if (effectiveStatement instanceof DataSchemaNode) {
+                DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
+                if (!mutableChildNodes.containsKey(dataSchemaNode.getQName())) {
+                    mutableChildNodes.put(dataSchemaNode.getQName(), dataSchemaNode);
+                    mutablePublicChildNodes.add(dataSchemaNode);
+                } else {
+                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+                }
+            }
+            if (effectiveStatement instanceof UsesNode) {
+                UsesNode usesNode = (UsesNode) effectiveStatement;
+                if (!mutableUses.contains(usesNode)) {
+                    mutableUses.add(usesNode);
+                } else {
+                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+                }
+            }
+            if (effectiveStatement instanceof TypeDefEffectiveStatementImpl) {
+                TypeDefEffectiveStatementImpl typeDef = (TypeDefEffectiveStatementImpl) effectiveStatement;
+                ExtendedType extendedType = typeDef.buildType();
+                if (!mutableTypeDefinitions.contains(extendedType)) {
+                    mutableTypeDefinitions.add(extendedType);
+                } else {
+                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+                }
+            }
+            if (effectiveStatement instanceof GroupingDefinition) {
+                GroupingDefinition grp = (GroupingDefinition) effectiveStatement;
+                if (!mutableGroupings.contains(grp)) {
+                    mutableGroupings.add(grp);
+                } else {
+                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+                }
+            }
+        }
+
+        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
+        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
+        this.imports = ImmutableSet.copyOf(resolveModuleImports(importsInit, ctx));
+        this.notifications = ImmutableSet.copyOf(notificationsInit);
+        this.rpcs = ImmutableSet.copyOf(rpcsInit);
+        this.deviations = ImmutableSet.copyOf(deviationsInit);
+        this.identities = ImmutableSet.copyOf(identitiesInit);
+        this.features = ImmutableSet.copyOf(featuresInit);
+        this.extensionNodes = ImmutableList.copyOf(extensionNodesInit);
+
+        this.childNodes = ImmutableMap.copyOf(mutableChildNodes);
+        this.groupings = ImmutableSet.copyOf(mutableGroupings);
+        this.publicChildNodes = ImmutableSet.copyOf(mutablePublicChildNodes);
+        this.typeDefinitions = ImmutableSet.copyOf(mutableTypeDefinitions);
+        this.uses = ImmutableSet.copyOf(mutableUses);
+
+    }
+
+    private static Set<ModuleImport> resolveModuleImports(final Set<ModuleImport> importsInit,
+            final StmtContext<String, ? extends DeclaredStatement<String>, ? extends EffectiveStatement<String, ?>> ctx) {
+        Set<ModuleImport> resolvedModuleImports = new LinkedHashSet<>();
+        for (ModuleImport moduleImport : importsInit) {
+            if (moduleImport.getRevision().equals(SimpleDateFormatUtil.DEFAULT_DATE_IMP)) {
+                QNameModule impModuleQName = Utils.getModuleQNameByPrefix(ctx, moduleImport.getPrefix());
+                if (!impModuleQName.getRevision().equals(SimpleDateFormatUtil.DEFAULT_DATE_REV)) {
+                    ModuleImport resolvedModuleImport = new ModuleImportImpl(moduleImport.getModuleName(),
+                            impModuleQName.getRevision(), moduleImport.getPrefix());
+                    resolvedModuleImports.add(resolvedModuleImport);
+                }
+            } else {
+                resolvedModuleImports.add(moduleImport);
+            }
+        }
+        return resolvedModuleImports;
+    }
+
+    @Override
+    public String getModuleSourcePath() {
+        return sourcePath;
+    }
+
+    @Override
+    public String getSource() {
+        return null;
+    }
+
+    @Override
+    public URI getNamespace() {
+        return getQNameModule().getNamespace();
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public Date getRevision() {
+        return getQNameModule().getRevision();
+    }
+
+    @Override
+    public String getPrefix() {
+        return prefix;
+    }
+
+    @Override
+    public String getYangVersion() {
+        return yangVersion;
+    }
+
+    @Override
+    public String getOrganization() {
+        return organization;
+    }
+
+    @Override
+    public String getContact() {
+        return contact;
+    }
+
+    @Override
+    public Set<ModuleImport> getImports() {
+        return imports;
+    }
+
+    @Override
+    public Set<Module> getSubmodules() {
+        return submodules;
+    }
+
+    @Override
+    public Set<FeatureDefinition> getFeatures() {
+        return features;
+    }
+
+    @Override
+    public Set<NotificationDefinition> getNotifications() {
+        return notifications;
+    }
+
+    @Override
+    public Set<AugmentationSchema> getAugmentations() {
+        return augmentations;
+    }
+
+    @Override
+    public Set<RpcDefinition> getRpcs() {
+        return rpcs;
+    }
+
+    @Override
+    public Set<Deviation> getDeviations() {
+        return deviations;
+    }
+
+    @Override
+    public List<ExtensionDefinition> getExtensionSchemaNodes() {
+        return extensionNodes;
+    }
+
+    @Override
+    public Set<IdentitySchemaNode> getIdentities() {
+        return identities;
+    }
+
+    @Override
+    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+        return unknownNodes;
+    }
+
+    @Override
+    public final Set<TypeDefinition<?>> getTypeDefinitions() {
+        return typeDefinitions;
+    }
+
+    @Override
+    public final Set<DataSchemaNode> getChildNodes() {
+        return publicChildNodes;
+    }
+
+    @Override
+    public final Set<GroupingDefinition> getGroupings() {
+        return groupings;
+    }
+
+    @Override
+    public final DataSchemaNode getDataChildByName(final QName name) {
+        // Child nodes are keyed by their container name, so we can do a direct
+        // lookup
+        return childNodes.get(name);
+    }
+
+    @Override
+    public final DataSchemaNode getDataChildByName(final String name) {
+        for (DataSchemaNode node : childNodes.values()) {
+            if (node.getQName().getLocalName().equals(name)) {
+                return node;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Set<UsesNode> getUses() {
+        return uses;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(this.getClass().getSimpleName());
+        sb.append("[");
+        sb.append("name=").append(name);
+        sb.append(", namespace=").append(getNamespace());
+        sb.append(", revision=").append(getRevision());
+        sb.append(", prefix=").append(prefix);
+        sb.append(", yangVersion=").append(yangVersion);
+        sb.append("]");
+        return sb.toString();
+    }
+
+}
index 3f280f2b86b5292aae549e57f9bcc303f15d71dc..9ec3d8c71d70dd6d5f7b3865e10266f39af6d811 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -39,7 +39,7 @@ 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 abstract class AbstractEffectiveSchemaContext implements SchemaContext {
+abstract class AbstractEffectiveSchemaContext implements SchemaContext {
 
     protected static final Supplier<NavigableSet<Module>> MODULE_SET_SUPPLIER = new Supplier<NavigableSet<Module>>() {
         @Override
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSchemaNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSchemaNode.java
new file mode 100644 (file)
index 0000000..46bbfd4
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2015 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.stmt.rfc6020.effective;
+
+import com.google.common.collect.ImmutableList;
+import java.util.Collection;
+import java.util.List;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+
+abstract class AbstractEffectiveSchemaNode<D extends DeclaredStatement<QName>> extends
+        AbstractEffectiveDocumentedNode<QName, D> implements SchemaNode {
+
+    private final QName qname;
+    private final SchemaPath path;
+    private final List<UnknownSchemaNode> unknownNodes;
+
+    AbstractEffectiveSchemaNode(StmtContext<QName, D, ?> ctx) {
+        super(ctx);
+        this.qname = ctx.getStatementArgument();
+        this.path = Utils.getSchemaPath(ctx);
+
+        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
+        ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
+        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
+            if (effectiveStatement instanceof UnknownSchemaNode) {
+                listBuilder.add((UnknownSchemaNode) effectiveStatement);
+            }
+        }
+        this.unknownNodes = listBuilder.build();
+    }
+
+    @Override
+    public QName getQName() {
+        return qname;
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+        return unknownNodes;
+    }
+}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java
new file mode 100644 (file)
index 0000000..cc99f07
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2015 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.stmt.rfc6020.effective;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+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.AugmentationTarget;
+import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+
+abstract class AbstractEffectiveSimpleDataNodeContainer<D extends DeclaredStatement<QName>> extends
+        AbstractEffectiveDocumentedDataNodeContainer<QName, D> implements DataNodeContainer, AugmentationTarget,
+        DataSchemaNode {
+
+    private final QName qname;
+    private final SchemaPath path;
+
+    // :FIXME should be private and final
+    boolean augmenting;
+    private final boolean addedByUses;
+    private final boolean configuration;
+    private final ConstraintDefinition constraints;
+
+    private final Set<AugmentationSchema> augmentations;
+    private final List<UnknownSchemaNode> unknownNodes;
+
+    public AbstractEffectiveSimpleDataNodeContainer(StmtContext<QName, D, ?> ctx) {
+        super(ctx);
+
+        this.qname = ctx.getStatementArgument();
+        this.path = Utils.getSchemaPath(ctx);
+        this.constraints = new EffectiveConstraintDefinitionImpl(this);
+
+        ConfigEffectiveStatementImpl configStmt = firstEffective(ConfigEffectiveStatementImpl.class);
+        this.configuration = (configStmt == null) ? true : configStmt.argument();
+
+        // initSubstatementCollectionsAndFields
+        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
+
+        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
+        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
+        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
+            if (effectiveStatement instanceof UnknownSchemaNode) {
+                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
+                unknownNodesInit.add(unknownNode);
+            }
+            if (effectiveStatement instanceof AugmentationSchema) {
+                AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
+                augmentationsInit.add(augmentationSchema);
+            }
+        }
+        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
+        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
+
+        // initCopyType
+        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
+        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
+            this.addedByUses = this.augmenting = true;
+        } else {
+            this.augmenting = copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION);
+            this.addedByUses = copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES);
+        }
+    }
+
+    @Override
+    public QName getQName() {
+        return qname;
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public boolean isAugmenting() {
+        return augmenting;
+    }
+
+    @Override
+    public boolean isAddedByUses() {
+        return addedByUses;
+    }
+
+    @Override
+    public boolean isConfiguration() {
+        return configuration;
+    }
+
+    @Override
+    public ConstraintDefinition getConstraints() {
+        return constraints;
+    }
+
+    @Override
+    public Set<AugmentationSchema> getAvailableAugmentations() {
+        return augmentations;
+    }
+
+    @Override
+    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+        return unknownNodes;
+    }
+
+}
index ed95f87455b6f29c982c95cbeea1e9a56f9c27a4..ec164357064ae4ae9bdf87e38dddf0788dd358d0 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class AnyXmlEffectiveStatementImpl extends
-        AbstractEffectiveDocumentedNode<QName, AnyxmlStatement> implements
+public final class AnyXmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnyxmlStatement> implements
         AnyXmlSchemaNode, DerivableSchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
 
-    boolean configuration = true;
-    AnyXmlSchemaNode original;
-    ConstraintDefinition constraintsDef;
-    boolean augmenting;
-    private boolean addedByUses;
-
-    ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final AnyXmlSchemaNode original;
 
     public AnyXmlEffectiveStatementImpl(
             final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
         super(ctx);
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-        this.constraintsDef = new EffectiveConstraintDefinitionImpl(this);
-
-        initSubstatementCollectionsAndFields();
-        initCopyType(ctx);
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-
-        if (ctx.getOriginalCtx() != null) {
-            original = (AnyXmlSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-
-    private void initSubstatementCollectionsAndFields() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        boolean configurationInit = false;
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if (!configurationInit
-                    && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
+        this.original = ctx.getOriginalCtx() == null ? null : (AnyXmlSchemaNode) ctx.getOriginalCtx().buildEffective();
     }
 
     @Override
@@ -117,27 +32,12 @@ public class AnyXmlEffectiveStatementImpl extends
         return Optional.fromNullable(original);
     }
 
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraintsDef;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -154,15 +54,15 @@ public class AnyXmlEffectiveStatementImpl extends
         }
 
         AnyXmlEffectiveStatementImpl other = (AnyXmlEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder(AnyXmlEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
-        sb.append("qname=").append(qname);
-        sb.append(", path=").append(path);
+        sb.append("qname=").append(getQName());
+        sb.append(", path=").append(getPath());
         sb.append("]");
         return sb.toString();
     }
index 2fda2ff6da1fb2685ac089d8ec75a559c6543812..8e65778801b44bcac5f5ca667e090e511c31b2b5 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ArgumentEffectiveStatementImpl extends EffectiveStatementBase<QName, ArgumentStatement> {
+public final class ArgumentEffectiveStatementImpl extends EffectiveStatementBase<QName, ArgumentStatement> {
     public ArgumentEffectiveStatementImpl(final StmtContext<QName, ArgumentStatement, ?> ctx) {
         super(ctx);
     }
index 366c6acca1ce6662344c77acd61e34f8534d268c..837f179180bf71c88e6d89939896ea24a4cb249e 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -8,13 +8,13 @@
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 import java.net.URI;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -28,66 +28,44 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class AugmentEffectiveStatementImpl
-        extends AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement>
-        implements AugmentationSchema, NamespaceRevisionAware, Comparable<AugmentEffectiveStatementImpl> {
+public final class AugmentEffectiveStatementImpl extends
+        AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement> implements
+        AugmentationSchema, NamespaceRevisionAware, Comparable<AugmentEffectiveStatementImpl> {
     private final SchemaPath targetPath;
     private final URI namespace;
     private final Date revision;
     private final int order;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
-    private RevisionAwareXPath whenCondition;
-    private AugmentationSchema copyOf;
+    private final List<UnknownSchemaNode> unknownNodes;
+    private final RevisionAwareXPath whenCondition;
+    private final AugmentationSchema copyOf;
 
     public AugmentEffectiveStatementImpl(
             final StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
         super(ctx);
 
         this.targetPath = ctx.getStatementArgument().asSchemaPath();
+
         QNameModule rootModuleQName = Utils.getRootModuleQName(ctx);
         this.namespace = rootModuleQName.getNamespace();
         this.revision = rootModuleQName.getRevision();
 
         this.order = ctx.getOrder();
+        this.copyOf = ctx.getOriginalCtx() == null ? null : (AugmentationSchema) ctx.getOriginalCtx().buildEffective();
 
-        initCopyOf(ctx);
-        initSubstatementCollections();
-    }
-
-    private void initCopyOf(
-            final StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
-        StatementContextBase<?, ?, ?> originalCtx = ctx.getOriginalCtx();
-        if (originalCtx != null) {
-            this.copyOf = (AugmentationSchema) originalCtx.buildEffective();
-        }
-    }
+        WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class);
+        this.whenCondition = (whenStmt == null) ? null : whenStmt.argument();
 
-    private void initSubstatementCollections() {
+        // initSubstatementCollections
         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        boolean initWhen = false;
+        ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
             if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if(!initWhen && effectiveStatement instanceof WhenEffectiveStatementImpl) {
-                WhenEffectiveStatementImpl whenStmt = (WhenEffectiveStatementImpl) effectiveStatement;
-                whenCondition = whenStmt.argument();
-                initWhen = true;
+                listBuilder.add((UnknownSchemaNode) effectiveStatement);
             }
         }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
-    public void setCopyOf(final AugmentationSchema build) {
-        this.copyOf = build;
+        this.unknownNodes = listBuilder.build();
     }
 
     @Override
index 478bab9ccefb63367e873fbda4aa3b1d1dfd922f..1ac4a89b3317ca4ec122c46c42684e8f572edbcd 100644 (file)
@@ -12,9 +12,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 public class BaseEffectiveStatementImpl extends EffectiveStatementBase<QName, BaseStatement> {
-
     public BaseEffectiveStatementImpl(final StmtContext<QName, BaseStatement, ?> ctx) {
         super(ctx);
     }
-
 }
\ No newline at end of file
index 74e8fb936c481d552a75447ae7615080d6de3226..4865f040b9f7500772db7929998acd849b0519b9 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class BelongsEffectiveToStatementImpl extends EffectiveStatementBase<String, BelongsToStatement> {
+public final class BelongsEffectiveToStatementImpl extends EffectiveStatementBase<String, BelongsToStatement> {
     public BelongsEffectiveToStatementImpl(final StmtContext<String, BelongsToStatement, ?> ctx) {
         super(ctx);
     }
index 7430466832ea88639156f51410bd1394ab654264..57769587c56ab972be64886f539d6fa7a63a0b6a 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
 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.ImmutableSet;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-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.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class CaseEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer<QName, CaseStatement>
-        implements ChoiceCaseNode, DerivableSchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
-    private final ConstraintDefinition constraints;
+public final class CaseEffectiveStatementImpl extends AbstractEffectiveSimpleDataNodeContainer<CaseStatement> implements
+        ChoiceCaseNode, DerivableSchemaNode {
 
-    private boolean augmenting;
-    private boolean addedByUses;
-    private ChoiceCaseNode original;
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final ChoiceCaseNode original;
 
     public CaseEffectiveStatementImpl(
             final StmtContext<QName, CaseStatement, EffectiveStatement<QName, CaseStatement>> ctx) {
         super(ctx);
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-        this.constraints = new EffectiveConstraintDefinitionImpl(this);
-
-        initSubstatementCollections();
-        initCopyType(ctx);
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, CaseStatement, EffectiveStatement<QName, CaseStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-
-        if (ctx.getOriginalCtx() != null) {
-            original = (ChoiceCaseNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-
-    private void initSubstatementCollections() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if (effectiveStatement instanceof AugmentationSchema) {
-                AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
-                augmentationsInit.add(augmentationSchema);
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isConfiguration() {
-        return false;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraints;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
+        this.original = ctx.getOriginalCtx() == null ? null : (ChoiceCaseNode) ctx.getOriginalCtx().buildEffective();
     }
 
     @Override
@@ -129,21 +33,16 @@ public class CaseEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
     }
 
     @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAvailableAugmentations() {
-        return augmentations;
+    public boolean isConfiguration() {
+        return false;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -159,7 +58,7 @@ public class CaseEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
             return false;
         }
         CaseEffectiveStatementImpl other = (CaseEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
@@ -167,7 +66,7 @@ public class CaseEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
         StringBuilder sb = new StringBuilder(CaseEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
         sb.append("qname=");
-        sb.append(qname);
+        sb.append(getQName());
         sb.append("]");
         return sb.toString();
     }
index f72fc22b01188506b64ec95368dfcc90c84ec87d..ce54d65427ca47f3ccf9521e09e5a714ed4d4129 100644 (file)
@@ -35,16 +35,13 @@ public class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode {
     private final DataSchemaNode caseShorthandNode;
     private final QName qName;
     private final SchemaPath path;
-
     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 final List<UnknownSchemaNode> unknownNodes;
-    private ChoiceCaseNode original;
 
     public CaseShorthandImpl(final DataSchemaNode caseShorthandNode) {
         this.caseShorthandNode = caseShorthandNode;
@@ -155,7 +152,7 @@ public class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode {
 
     @Override
     public Optional<? extends SchemaNode> getOriginal() {
-        return Optional.fromNullable(original);
+        return Optional.absent();
     }
 
     @Override
index 1cca6d070f032713ef2d2e51fcf567c60117fd2c..5cec7dd05d01c7d9f168151ffd9cb259c0f90c4a 100644 (file)
@@ -9,12 +9,9 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.SortedSet;
@@ -24,85 +21,40 @@ import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
 import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class ChoiceEffectiveStatementImpl extends
-        AbstractEffectiveDocumentedNode<QName, ChoiceStatement> implements
+public final class ChoiceEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<ChoiceStatement> implements
         ChoiceSchemaNode, DerivableSchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
 
-    private boolean augmenting;
-    private boolean addedByUses;
-    private ChoiceSchemaNode original;
-    private boolean configuration = true;
-    private final ConstraintDefinition constraints;
-    private String defaultCase;
+    private final ChoiceSchemaNode original;
+    private final String defaultCase;
 
-    private ImmutableSet<ChoiceCaseNode> cases;
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final Set<ChoiceCaseNode> cases;
+    private final Set<AugmentationSchema> augmentations;
 
     public ChoiceEffectiveStatementImpl(
             final StmtContext<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> ctx) {
         super(ctx);
+        this.original = ctx.getOriginalCtx() == null ? null : (ChoiceSchemaNode) ctx.getOriginalCtx().buildEffective();
 
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-        this.constraints = new EffectiveConstraintDefinitionImpl(this);
+        DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
+        this.defaultCase = (defaultStmt == null) ? null : defaultStmt.argument();
 
-        initCopyType(ctx);
-        initSubstatementCollectionsAndFields();
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-
-        if (ctx.getOriginalCtx() != null) {
-            original = (ChoiceSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-
-    private void initSubstatementCollectionsAndFields() {
+        // initSubstatementCollectionsAndFields
         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
         Set<AugmentationSchema> augmentationsInit = new HashSet<>();
         SortedSet<ChoiceCaseNode> casesInit = new TreeSet<>(Comparators.SCHEMA_NODE_COMP);
 
-        boolean configurationInit = false;
-        boolean defaultInit = false;
         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
             if (effectiveStatement instanceof AugmentationSchema) {
                 AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
                 augmentationsInit.add(augmentationSchema);
@@ -111,10 +63,8 @@ public class ChoiceEffectiveStatementImpl extends
                 ChoiceCaseNode choiceCaseNode = (ChoiceCaseNode) effectiveStatement;
                 casesInit.add(choiceCaseNode);
             }
-            if (effectiveStatement instanceof AnyXmlSchemaNode
-                    || effectiveStatement instanceof ContainerSchemaNode
-                    || effectiveStatement instanceof ListSchemaNode
-                    || effectiveStatement instanceof LeafListSchemaNode
+            if (effectiveStatement instanceof AnyXmlSchemaNode || effectiveStatement instanceof ContainerSchemaNode
+                    || effectiveStatement instanceof ListSchemaNode || effectiveStatement instanceof LeafListSchemaNode
                     || effectiveStatement instanceof LeafSchemaNode) {
 
                 DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
@@ -125,19 +75,8 @@ public class ChoiceEffectiveStatementImpl extends
                     resetAugmenting(dataSchemaNode);
                 }
             }
-            if (!configurationInit && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-            if (!defaultInit && effectiveStatement instanceof DefaultEffectiveStatementImpl) {
-                DefaultEffectiveStatementImpl defaultCaseStmt = (DefaultEffectiveStatementImpl) effectiveStatement;
-                this.defaultCase = defaultCaseStmt.argument();
-                defaultInit = true;
-            }
         }
 
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
         this.augmentations = ImmutableSet.copyOf(augmentationsInit);
         this.cases = ImmutableSet.copyOf(casesInit);
     }
@@ -161,51 +100,16 @@ public class ChoiceEffectiveStatementImpl extends
         }
     }
 
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
-    }
-
     @Override
     public Optional<ChoiceSchemaNode> getOriginal() {
         return Optional.fromNullable(original);
     }
 
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraints;
-    }
-
     @Override
     public Set<AugmentationSchema> getAvailableAugmentations() {
         return augmentations;
     }
 
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public Set<ChoiceCaseNode> getCases() {
         return cases;
@@ -228,8 +132,7 @@ public class ChoiceEffectiveStatementImpl extends
         Preconditions.checkArgument(name != null, "Choice Case string Name cannot be NULL!");
 
         for (final ChoiceCaseNode caseNode : cases) {
-            if (caseNode != null && (caseNode.getQName() != null)
-                    && name.equals(caseNode.getQName().getLocalName())) {
+            if (caseNode != null && (caseNode.getQName() != null) && name.equals(caseNode.getQName().getLocalName())) {
                 return caseNode;
             }
         }
@@ -245,8 +148,8 @@ public class ChoiceEffectiveStatementImpl extends
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -262,14 +165,14 @@ public class ChoiceEffectiveStatementImpl extends
             return false;
         }
         ChoiceEffectiveStatementImpl other = (ChoiceEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder(ChoiceEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
-        sb.append("qname=").append(qname);
+        sb.append("qname=").append(getQName());
         sb.append("]");
         return sb.toString();
     }
index db661bffba9d6f3874bb7f36c227cff4e7685764..dd08c6d8c058928ef5fb2436724801eb77e6f1ef 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ConfigEffectiveStatementImpl extends EffectiveStatementBase<Boolean, ConfigStatement> {
+public final class ConfigEffectiveStatementImpl extends EffectiveStatementBase<Boolean, ConfigStatement> {
     public ConfigEffectiveStatementImpl(final StmtContext<Boolean, ConfigStatement, ?> ctx) {
         super(ctx);
     }
index 378d3faaf00666aaee16fca0c00924a27a35417c..62388f8a1efa33bbdf6dabcca277cd83fba87972 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ContactEffectiveStatementImpl extends EffectiveStatementBase<String, ContactStatement> {
+public final class ContactEffectiveStatementImpl extends EffectiveStatementBase<String, ContactStatement> {
     public ContactEffectiveStatementImpl(final StmtContext<String, ContactStatement, ?> ctx) {
         super(ctx);
     }
index 4842358382d13ee09d69387de295dcfe08272436..764e80d81b56401409db48cd57ef2f8b0c90c24f 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
 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.ImmutableSet;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-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.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class ContainerEffectiveStatementImpl extends
-        AbstractEffectiveDocumentedDataNodeContainer<QName, ContainerStatement>
-        implements ContainerSchemaNode, DerivableSchemaNode {
+public final class ContainerEffectiveStatementImpl extends AbstractEffectiveContainerSchemaNode<ContainerStatement>
+        implements
+        DerivableSchemaNode {
 
-    private final QName qname;
-    private final SchemaPath path;
-
-    private boolean presence;
-
-    // FIXME: should be private
-    boolean augmenting;
-    private boolean addedByUses;
-    private boolean configuration = true;
-    private ContainerSchemaNode original;
-    private final ConstraintDefinition constraints;
-
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final ContainerSchemaNode original;
 
     public ContainerEffectiveStatementImpl(
             final StmtContext<QName, ContainerStatement, EffectiveStatement<QName, ContainerStatement>> ctx) {
         super(ctx);
-
-        qname = ctx.getStatementArgument();
-        path = Utils.getSchemaPath(ctx);
-        this.constraints = new EffectiveConstraintDefinitionImpl(this);
-
-        initCopyType(ctx);
-        initSubstatementCollectionsAndFields();
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, ContainerStatement, EffectiveStatement<QName, ContainerStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-
-        if (ctx.getOriginalCtx() != null) {
-            original = (ContainerSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-
-    private void initSubstatementCollectionsAndFields() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-
-        boolean configurationInit = false;
-        for (EffectiveStatement<?, ?> effectiveSubstatement : effectiveSubstatements) {
-            if (effectiveSubstatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveSubstatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if (effectiveSubstatement instanceof AugmentationSchema) {
-                AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveSubstatement;
-                augmentationsInit.add(augmentationSchema);
-            }
-            if (effectiveSubstatement instanceof PresenceEffectiveStatementImpl) {
-                presence = true;
-            }
-            if (!configurationInit && effectiveSubstatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveSubstatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
+        this.original = ctx.getOriginalCtx() == null ? null : (ContainerSchemaNode) ctx.getOriginalCtx().buildEffective();
     }
 
     @Override
@@ -135,37 +33,12 @@ public class ContainerEffectiveStatementImpl extends
         return Optional.fromNullable(original);
     }
 
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraints;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAvailableAugmentations() {
-        return augmentations;
-    }
-
-    @Override
-    public boolean isPresenceContainer() {
-        return presence;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -181,11 +54,11 @@ public class ContainerEffectiveStatementImpl extends
             return false;
         }
         ContainerEffectiveStatementImpl other = (ContainerEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
-        return "container " + qname.getLocalName();
+        return "container " + getQName().getLocalName();
     }
 }
index 56aab3eef37eadd9ad3b438d438fbe75bf9046f1..440a1fab4b9f9986545e2dd68f84d3e7e111017d 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class DefaultEffectiveStatementImpl extends EffectiveStatementBase<String, DefaultStatement> {
+public final class DefaultEffectiveStatementImpl extends EffectiveStatementBase<String, DefaultStatement> {
     public DefaultEffectiveStatementImpl(final StmtContext<String, DefaultStatement, ?> ctx) {
         super(ctx);
     }
index 837df34841cf58b5e5e00479221e3dd6d29f90d9..f0c3592ff8a9427c012d50c8e5fd5588ecd0a6e8 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class DescriptionEffectiveStatementImpl extends EffectiveStatementBase<String, DescriptionStatement> {
+public final class DescriptionEffectiveStatementImpl extends EffectiveStatementBase<String, DescriptionStatement> {
     public DescriptionEffectiveStatementImpl(final StmtContext<String, DescriptionStatement, ?> ctx) {
         super(ctx);
     }
index 13dd2627923fdcea3563b60deb2cbee6bea9c819..d5c42df8ee8b3f2ad9a0de4fc4313c7054b7b276 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.model.api.Deviation;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class DeviateEffectiveStatementImpl extends EffectiveStatementBase<Deviation.Deviate, DeviateStatement> {
+public final class DeviateEffectiveStatementImpl extends EffectiveStatementBase<Deviation.Deviate, DeviateStatement> {
     public DeviateEffectiveStatementImpl(final StmtContext<Deviation.Deviate, DeviateStatement, ?> ctx) {
         super(ctx);
     }
index 3b3a9ed9486d2d6ec6167007ea8f36a5bdf1690c..e916d3503a2dc0fc1f7065b92efb6c18019a8d57 100644 (file)
@@ -22,31 +22,27 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 public class DeviationEffectiveStatementImpl extends EffectiveStatementBase<SchemaNodeIdentifier, DeviationStatement>
         implements Deviation, Immutable {
-
     private final SchemaPath targetPath;
-    private Deviate deviate;
-    private String reference;
-    private final ImmutableList<UnknownSchemaNode> unknownSchemaNodes;
+    private final Deviate deviate;
+    private final String reference;
+    private final List<UnknownSchemaNode> unknownSchemaNodes;
 
     public DeviationEffectiveStatementImpl(final StmtContext<SchemaNodeIdentifier, DeviationStatement, ?> ctx) {
         super(ctx);
+        this.targetPath = ctx.getStatementArgument().asSchemaPath();
 
-        List<UnknownSchemaNode> unknownSchemaNodesInit = new LinkedList<>();
+        DeviateEffectiveStatementImpl deviateStmt = firstEffective(DeviateEffectiveStatementImpl.class);
+        this.deviate = (deviateStmt == null) ? null : deviateStmt.argument();
 
-        targetPath = ctx.getStatementArgument().asSchemaPath();
+        ReferenceEffectiveStatementImpl referenceStmt = firstEffective(ReferenceEffectiveStatementImpl.class);
+        this.reference = (referenceStmt == null) ? null : referenceStmt.argument();
 
+        List<UnknownSchemaNode> unknownSchemaNodesInit = new LinkedList<>();
         for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof DeviateEffectiveStatementImpl) {
-                deviate = ((DeviateEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ReferenceEffectiveStatementImpl) {
-                reference = ((ReferenceEffectiveStatementImpl) effectiveStatement).argument();
-            }
             if (effectiveStatement instanceof UnknownSchemaNode) {
                 unknownSchemaNodesInit.add((UnknownSchemaNode) effectiveStatement);
             }
         }
-
         unknownSchemaNodes = ImmutableList.copyOf(unknownSchemaNodesInit);
     }
 
index 258f44250ace01348fdf32becd6b029d3ecae609..fe08d30333f02ba8fd0297360e104ce5d00dd959 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 
-public class EffectiveConstraintDefinitionImpl implements ConstraintDefinition {
+public final class EffectiveConstraintDefinitionImpl implements ConstraintDefinition {
     private final RevisionAwareXPath whenCondition;
     private final Set<MustDefinition> mustConstraints;
     private final Boolean mandatory;
index d9acb0103cb9cd246ab2b1844efed3831fb0e874..c76b86f82809415f99e632ddbc5798d118c2c9a0 100644 (file)
@@ -29,14 +29,14 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleIdentifierImpl;
 import org.opendaylight.yangtools.yang.parser.util.ModuleDependencySort;
 
-public class EffectiveSchemaContext extends AbstractEffectiveSchemaContext {
+public final class EffectiveSchemaContext extends AbstractEffectiveSchemaContext {
 
     private final SetMultimap<URI, Module> namespaceToModules;
     private final SetMultimap<String, Module> nameToModules;
     private final Set<Module> modules;
 
-    private final ImmutableList<DeclaredStatement<?>> rootDeclaredStatements;
-    private final ImmutableList<EffectiveStatement<?, ?>> rootEffectiveStatements;
+    private final List<DeclaredStatement<?>> rootDeclaredStatements;
+    private final List<EffectiveStatement<?, ?>> rootEffectiveStatements;
     private final Set<ModuleIdentifier> moduleIdentifiers;
 
     public EffectiveSchemaContext(final List<DeclaredStatement<?>> rootDeclaredStatements,
@@ -112,11 +112,11 @@ public class EffectiveSchemaContext extends AbstractEffectiveSchemaContext {
        return new EffectiveSchemaContext(modules);
     }
 
-    public ImmutableList<DeclaredStatement<?>> getRootDeclaredStatements() {
+    public List<DeclaredStatement<?>> getRootDeclaredStatements() {
         return rootDeclaredStatements;
     }
 
-    public ImmutableList<EffectiveStatement<?, ?>> getRootEffectiveStatements() {
+    public List<EffectiveStatement<?, ?>> getRootEffectiveStatements() {
         return rootEffectiveStatements;
     }
 
index fbb6df73576102503068bac20492d236da83fb58..eee68c622567404ac69ead02d9f89a17c8a7d5c4 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -14,6 +14,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -26,9 +27,9 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
 
-abstract public class EffectiveStatementBase<A, D extends DeclaredStatement<A>> implements EffectiveStatement<A, D> {
+public abstract class EffectiveStatementBase<A, D extends DeclaredStatement<A>> implements EffectiveStatement<A, D> {
 
-    private final ImmutableList<? extends EffectiveStatement<?, ?>> substatements;
+    private final List<? extends EffectiveStatement<?, ?>> substatements;
     private final StatementSource statementSource;
     private final StatementDefinition statementDefinition;
     private final A argument;
@@ -45,7 +46,7 @@ abstract public class EffectiveStatementBase<A, D extends DeclaredStatement<A>>
         Collection<StatementContextBase<?, ?, ?>> substatementsInit = new LinkedList<>();
 
         for(StatementContextBase<?, ?, ?> declaredSubstatement : declaredSubstatements) {
-            if (declaredSubstatement.getPublicDefinition() == Rfc6020Mapping.USES) {
+            if (declaredSubstatement.getPublicDefinition().equals(Rfc6020Mapping.USES)) {
                 substatementsInit.add(declaredSubstatement);
                 substatementsInit.addAll(declaredSubstatement.getEffectOfStatement());
                 ((StatementContextBase<?, ?, ?>)ctx).removeStatementsFromEffectiveSubstatements(declaredSubstatement
@@ -126,4 +127,10 @@ abstract public class EffectiveStatementBase<A, D extends DeclaredStatement<A>>
                 Predicates.and(Predicates.instanceOf(type), Predicates.instanceOf(returnType)));
         return possible.isPresent() ? returnType.cast(possible.get()) : null;
     }
+
+    protected final EffectiveStatement<?, ?> firstEffectiveSubstatementOfType(final Class<?> type) {
+        Optional<? extends EffectiveStatement<?, ?>> possible = Iterables.tryFind(substatements,
+                Predicates.instanceOf(type));
+        return possible.isPresent() ? possible.get() : null;
+    }
 }
index 725dc742ff21883058c67f2b77f2f725512d3ab2..854b857dfeaa9cf9558827469a18573b691b0a00 100644 (file)
@@ -12,13 +12,13 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
-public class EffectiveStmtUtils {
+public final class EffectiveStmtUtils {
 
     private EffectiveStmtUtils() {
         throw new UnsupportedOperationException("Utility class");
     }
 
-    public static final SourceException createNameCollisionSourceException(final StmtContext<?, ?, ?> ctx,
+    public static SourceException createNameCollisionSourceException(final StmtContext<?, ?, ?> ctx,
             final EffectiveStatement<?, ?> effectiveStatement) {
         return new SourceException("Error in module '"
                 + ctx.getRoot().getStatementArgument()
index 1d46cc1613ad80c9f10c471d0f7d0f9b887c8312..6a98f96001502a54e4b603ab4a2ff0750fe8415e 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ErrorAppTagEffectiveStatementImpl extends EffectiveStatementBase<String, ErrorAppTagStatement> {
+public final class ErrorAppTagEffectiveStatementImpl extends EffectiveStatementBase<String, ErrorAppTagStatement> {
     public ErrorAppTagEffectiveStatementImpl(final StmtContext<String, ErrorAppTagStatement, ?> ctx) {
         super(ctx);
     }
index acf6763a9e6ba11c7906fd2ae4ac78f6e5a3c95b..00814f3ba7152f60b53a13a860fefa8e7b985822 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ErrorMessageEffectiveStatementImpl extends EffectiveStatementBase<String, ErrorMessageStatement> {
+public final class ErrorMessageEffectiveStatementImpl extends EffectiveStatementBase<String, ErrorMessageStatement> {
     public ErrorMessageEffectiveStatementImpl(final StmtContext<String, ErrorMessageStatement, ?> ctx) {
         super(ctx);
     }
index 83205893c78f2c3a654673d2a4189041f3f01af9..ff554fc1404de26f43a555c3c2811c4f184aae26 100644 (file)
@@ -15,7 +15,6 @@ import java.util.Collections;
 import java.util.List;
 import org.opendaylight.yangtools.yang.common.QName;
 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.meta.EffectiveStatement;
@@ -40,24 +39,17 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeE
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.TypeDefinitionEffectiveBuilder;
 import org.opendaylight.yangtools.yang.parser.util.TypeConstraints;
 
-public class ExtendedTypeEffectiveStatementImpl extends EffectiveStatementBase<String, TypeStatement> implements
+public final class ExtendedTypeEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<String, TypeStatement>
+implements
         TypeDefinition<TypeDefinition<?>>, TypeDefinitionEffectiveBuilder {
 
     private static final Splitter COLON_SPLITTER = Splitter.on(':').trimResults();
 
     private final QName qName;
     private final SchemaPath path;
-
     private final TypeDefinition<?> baseType;
-
-    private final String defaultValue = null;
-    private final String units = null;
-
-    private final String description = null;
-    private final String reference = null;
-
-    private final Status status = null;
-
+    private final String defaultValue;
+    private final String units;
     private final List<RangeConstraint> ranges;
     private final List<LengthConstraint> lengths;
     private final List<PatternConstraint> patterns;
@@ -81,6 +73,11 @@ public class ExtendedTypeEffectiveStatementImpl extends EffectiveStatementBase<S
             path = Utils.getSchemaPath(ctx.getFromNamespace(TypeNamespace.class, qName));
         }
 
+        UnitsEffectiveStatementImpl unitsStmt = firstEffective(UnitsEffectiveStatementImpl.class);
+        this.units = (unitsStmt == null) ? null : unitsStmt.argument();
+        DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
+        this.defaultValue = (defaultStmt == null) ? null : defaultStmt.argument();
+
         ranges = initRanges();
         lengths = initLengths();
         patterns = initPatterns();
@@ -182,38 +179,26 @@ public class ExtendedTypeEffectiveStatementImpl extends EffectiveStatementBase<S
             typeConstraints.addPatterns(((TypeDefEffectiveStatementImpl) baseType).getPatternConstraints());
             typeConstraints.addFractionDigits(((TypeDefEffectiveStatementImpl) baseType).getFractionDigits());
         }
-//        else if (baseType instanceof DecimalTypeDefinition) {
-//            final DecimalTypeDefinition decimalType = (DecimalTypeDefinition) TypeUtils
-//                    .getYangBaseTypeFromString(baseTypeName);
-//            typeConstraints.addRanges(decimalType.getRangeConstraints());
-//            typeConstraints.addFractionDigits(decimalType.getFractionDigits());
-//        }
-//        else if (baseType instanceof ExtendedTypeEffectiveStatementImpl) {
-//            typeConstraints.addRanges(((ExtendedTypeEffectiveStatementImpl) baseType).getRangeConstraints());
-//            typeConstraints.addLengths(((ExtendedTypeEffectiveStatementImpl) baseType).getLengthConstraints());
-//            typeConstraints.addPatterns(((ExtendedTypeEffectiveStatementImpl) baseType).getPatternConstraints());
-//            typeConstraints.addFractionDigits(((ExtendedTypeEffectiveStatementImpl) baseType).getFractionDigits());
-//        }
 
         return typeConstraints;
     }
 
-    protected Integer initFractionDigits() {
+    protected final Integer initFractionDigits() {
         final FractionDigitsEffectiveStatementImpl fractionDigitsEffStmt = firstEffective(FractionDigitsEffectiveStatementImpl.class);
         return fractionDigitsEffStmt != null ? fractionDigitsEffStmt.argument() : null;
     }
 
-    protected List<RangeConstraint> initRanges() {
+    protected final List<RangeConstraint> initRanges() {
         final RangeEffectiveStatementImpl rangeConstraints = firstEffective(RangeEffectiveStatementImpl.class);
         return rangeConstraints != null ? rangeConstraints.argument() : Collections.<RangeConstraint> emptyList();
     }
 
-    protected List<LengthConstraint> initLengths() {
+    protected final List<LengthConstraint> initLengths() {
         final LengthEffectiveStatementImpl lengthConstraints = firstEffective(LengthEffectiveStatementImpl.class);
         return lengthConstraints != null ? lengthConstraints.argument() : Collections.<LengthConstraint> emptyList();
     }
 
-    protected List<PatternConstraint> initPatterns() {
+    protected final List<PatternConstraint> initPatterns() {
         final List<PatternConstraint> patternConstraints = new ArrayList<>();
 
         for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
@@ -260,21 +245,6 @@ public class ExtendedTypeEffectiveStatementImpl extends EffectiveStatementBase<S
         return Collections.emptyList();
     }
 
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public String getReference() {
-        return reference;
-    }
-
-    @Override
-    public Status getStatus() {
-        return status;
-    }
-
     public List<RangeConstraint> getRangeConstraints() {
         return ranges;
     }
@@ -307,10 +277,10 @@ public class ExtendedTypeEffectiveStatementImpl extends EffectiveStatementBase<S
         if (baseType instanceof TypeDefEffectiveStatementImpl) {
             TypeDefEffectiveStatementImpl typeDefBaseType = (TypeDefEffectiveStatementImpl) baseType;
             extendedTypeBuilder = ExtendedType.builder(qName, typeDefBaseType.buildType(),
-                    Optional.fromNullable(description), Optional.fromNullable(reference), path);
+                    Optional.fromNullable(getDescription()), Optional.fromNullable(getReference()), path);
         } else {
-            extendedTypeBuilder = ExtendedType.builder(qName, baseType, Optional.fromNullable(description),
-                    Optional.fromNullable(reference), path);
+            extendedTypeBuilder = ExtendedType.builder(qName, baseType, Optional.fromNullable(getDescription()),
+                    Optional.fromNullable(getReference()), path);
         }
 
         extendedTypeBuilder.fractionDigits(fractionDigits);
index a73b90404147ca848f4d533fbc97698b70979c8b..46e32b3eada53ac9dcaab6b0876801a774a7c2db 100644 (file)
@@ -24,27 +24,31 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 public class ExtensionEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<QName, ExtensionStatement>
         implements ExtensionDefinition {
     private final QName qname;
-    private String argument;
+    private final String argument;
     private final SchemaPath schemaPath;
 
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
-    private boolean yin;
+    private final List<UnknownSchemaNode> unknownNodes;
+    private final boolean yin;
 
     public ExtensionEffectiveStatementImpl(
             final StmtContext<QName, ExtensionStatement, EffectiveStatement<QName, ExtensionStatement>> ctx) {
         super(ctx);
-
         this.qname = ctx.getStatementArgument();
         this.schemaPath = Utils.getSchemaPath(ctx);
 
-        initSubstatementCollections();
-        initFields();
-    }
-
-    private void initFields() {
+        // initSubstatementCollections
+        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
+        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
+        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
+            if (effectiveStatement instanceof UnknownSchemaNode) {
+                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
+                unknownNodesInit.add(unknownNode);
+            }
+        }
+        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
 
+        // initFields
         ArgumentEffectiveStatementImpl argumentSubstatement = firstEffective(ArgumentEffectiveStatementImpl.class);
-
         if (argumentSubstatement != null) {
             this.argument = argumentSubstatement.argument().getLocalName();
 
@@ -55,24 +59,12 @@ public class ExtensionEffectiveStatementImpl extends AbstractEffectiveDocumented
             } else {
                 this.yin = false;
             }
+        } else {
+            this.argument = null;
+            this.yin = false;
         }
     }
 
-    private void initSubstatementCollections() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
     @Override
     public QName getQName() {
         return qname;
index 40aae1d7c96bed8ad0cfeec76795ba1a9ac7cf9d..9c99f8cbcfbfc3276b81067a2ab3da794f733289 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -7,98 +7,25 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import com.google.common.collect.ImmutableList;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class FeatureEffectiveStatementImpl extends EffectiveStatementBase<QName, FeatureStatement> implements
+public final class FeatureEffectiveStatementImpl extends AbstractEffectiveSchemaNode<FeatureStatement> implements
         FeatureDefinition {
 
-    private final QName qName;
-    private final SchemaPath path;
-    private List<UnknownSchemaNode> unknownSchemaNodes;
-    private String description;
-    private String reference;
-    private Status status;
-
     public FeatureEffectiveStatementImpl(final StmtContext<QName, FeatureStatement, ?> ctx) {
         super(ctx);
-
-        this.qName = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-
-        initFields();
-    }
-
-    private void initFields() {
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof DescriptionEffectiveStatementImpl) {
-                description = ((DescriptionEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ReferenceEffectiveStatementImpl) {
-                reference = ((ReferenceEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof StatusEffectiveStatementImpl) {
-                status = ((StatusEffectiveStatementImpl) effectiveStatement).argument();
-            }
-
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                unknownNodesInit.add((UnknownSchemaNode) effectiveStatement);
-            }
-        }
-
-        this.unknownSchemaNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qName;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownSchemaNodes;
-    }
-
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public String getReference() {
-        return reference;
-    }
-
-    @Override
-    public Status getStatus() {
-        return status;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qName);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -114,13 +41,13 @@ public class FeatureEffectiveStatementImpl extends EffectiveStatementBase<QName,
             return false;
         }
         FeatureEffectiveStatementImpl other = (FeatureEffectiveStatementImpl) obj;
-        return Objects.equals(qName, other.qName) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder(FeatureEffectiveStatementImpl.class.getSimpleName());
-        sb.append("[name=").append(qName).append("]");
+        sb.append("[name=").append(getQName()).append("]");
         return sb.toString();
     }
 }
index 67d568d1c5ac1fd2e82610c41b0f16cb991201d6..77f6e28e6f5f6a3c237ad8b772eddf8bc9932443 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class FractionDigitsEffectiveStatementImpl extends EffectiveStatementBase<Integer, FractionDigitsStatement> {
+public final class FractionDigitsEffectiveStatementImpl extends EffectiveStatementBase<Integer, FractionDigitsStatement> {
     public FractionDigitsEffectiveStatementImpl(final StmtContext<Integer, FractionDigitsStatement, ?> ctx) {
         super(ctx);
     }
index b5c95cd82e954b8702fdf95e340b1bf071e8af2b..25696438a39938d00ff6e5caebdb9bf67eafc0a2 100644 (file)
@@ -26,9 +26,8 @@ public class GroupingEffectiveStatementImpl extends
         AbstractEffectiveDocumentedDataNodeContainer<QName, GroupingStatement> implements GroupingDefinition {
     private final QName qname;
     private final SchemaPath path;
-
-    private boolean addedByUses;
-    private List<UnknownSchemaNode> unknownNodes;
+    private final boolean addedByUses;
+    private final List<UnknownSchemaNode> unknownNodes;
 
     public GroupingEffectiveStatementImpl(
             final StmtContext<QName, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> ctx) {
@@ -37,25 +36,17 @@ public class GroupingEffectiveStatementImpl extends
         qname = ctx.getStatementArgument();
         path = Utils.getSchemaPath(ctx);
 
-        initCopyType(ctx);
-        initSubstatementCollections();
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> ctx) {
-
+        // initCopyType
         List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
         if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
             addedByUses = true;
+        } else {
+            addedByUses = false;
         }
-    }
 
-    private void initSubstatementCollections() {
+        // initSubstatementCollections
         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
         unknownNodes = new LinkedList<>();
-
         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
             if (effectiveStatement instanceof UnknownSchemaNode) {
                 UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
index 4228e9482db02b44e4b5ac801987cd8b5d0b39d9..1a175e91623570b291a42c23b77c390e528b1365 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -7,56 +7,36 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedList;
 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.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class IdentityEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<QName, IdentityStatement>
+public final class IdentityEffectiveStatementImpl extends AbstractEffectiveSchemaNode<IdentityStatement>
         implements IdentitySchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
     private IdentitySchemaNode baseIdentity;
-    private ImmutableSet<IdentitySchemaNode> derivedIdentities;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final Set<IdentitySchemaNode> derivedIdentities;
 
     public IdentityEffectiveStatementImpl(
             final StmtContext<QName, IdentityStatement, EffectiveStatement<QName, IdentityStatement>> ctx) {
         super(ctx);
 
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-
-        initSubstatementCollections();
-        initDerivedIdentities(ctx);
-    }
-
-    private void initDerivedIdentities(
-            final StmtContext<QName, IdentityStatement, EffectiveStatement<QName, IdentityStatement>> ctx) {
-
+        // initDerivedIdentities
         Set<IdentitySchemaNode> derivedIdentitiesInit = new HashSet<IdentitySchemaNode>();
         List<StmtContext<?, ?, ?>> derivedIdentitiesCtxList = ctx.getFromNamespace(
                 DerivedIdentitiesNamespace.class, ctx.getStatementArgument());
-
         if (derivedIdentitiesCtxList == null) {
             this.derivedIdentities = ImmutableSet.of();
             return;
         }
-
         for (StmtContext<?, ?, ?> derivedIdentityCtx : derivedIdentitiesCtxList) {
             IdentityEffectiveStatementImpl derivedIdentity = (IdentityEffectiveStatementImpl) derivedIdentityCtx
                     .buildEffective();
@@ -70,26 +50,6 @@ public class IdentityEffectiveStatementImpl extends AbstractEffectiveDocumentedN
         this.baseIdentity = baseIdentity;
     }
 
-    private void initSubstatementCollections() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
     @Override
     public IdentitySchemaNode getBaseIdentity() {
         return baseIdentity;
@@ -100,22 +60,12 @@ public class IdentityEffectiveStatementImpl extends AbstractEffectiveDocumentedN
         return Collections.unmodifiableSet(derivedIdentities);
     }
 
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -131,7 +81,7 @@ public class IdentityEffectiveStatementImpl extends AbstractEffectiveDocumentedN
             return false;
         }
         IdentityEffectiveStatementImpl other = (IdentityEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
@@ -140,7 +90,7 @@ public class IdentityEffectiveStatementImpl extends AbstractEffectiveDocumentedN
                 IdentityEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
         sb.append("base=").append(baseIdentity);
-        sb.append(", qname=").append(qname);
+        sb.append(", qname=").append(getQName());
         sb.append("]");
         return sb.toString();
     }
index 903d55f5e44609bef403679ddf4156ab20ea2f0e..933b2b7d6759e8feaaf5edbcf47f9ca99ffad430 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class IfFeatureEffectiveStatementImpl extends EffectiveStatementBase<QName, IfFeatureStatement> {
+public final class IfFeatureEffectiveStatementImpl extends EffectiveStatementBase<QName, IfFeatureStatement> {
     public IfFeatureEffectiveStatementImpl(final StmtContext<QName, IfFeatureStatement, ?> ctx) {
         super(ctx);
     }
index 4462819ef6e6a65d9b441f4a910e3d1af78e3201..9839ca4f1bc630ab8ce93abe2ce4524702b6932d 100644 (file)
@@ -11,7 +11,6 @@ import java.util.Date;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
@@ -19,22 +18,22 @@ public class ImportEffectiveStatementImpl extends EffectiveStatementBase<String,
         ModuleImport {
 
     private final String moduleName;
-    private Date revision;
-    private String prefix;
+    private final Date revision;
+    private final String prefix;
 
     public ImportEffectiveStatementImpl(final StmtContext<String, ImportStatement, ?> ctx) {
         super(ctx);
 
         moduleName = ctx.getStatementArgument();
-        revision = SimpleDateFormatUtil.DEFAULT_DATE_IMP;
 
-        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof RevisionDateEffectiveStatementImpl) {
-                revision = ((RevisionDateEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof PrefixEffectiveStatementImpl) {
-                prefix = ((PrefixEffectiveStatementImpl) effectiveStatement).argument();
-            }
+        RevisionDateEffectiveStatementImpl revisionDateStmt = firstEffective(RevisionDateEffectiveStatementImpl.class);
+        this.revision = (revisionDateStmt == null) ? SimpleDateFormatUtil.DEFAULT_DATE_IMP : revisionDateStmt.argument();
+
+        PrefixEffectiveStatementImpl prefixStmt = firstEffective(PrefixEffectiveStatementImpl.class);
+        if (prefixStmt != null ) {
+            this.prefix = prefixStmt.argument();
+        } else {
+            throw new IllegalStateException("Prefix is mandatory substatement of import statement");
         }
     }
 
index b68bd5a8908118d3cbd0f09ad714b8e10c12fb04..4123b9773341f555de294c8ef1cda38c5b30c3a5 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class IncludeEffectiveStatementImpl extends EffectiveStatementBase<String, IncludeStatement> {
+public final class IncludeEffectiveStatementImpl extends EffectiveStatementBase<String, IncludeStatement> {
     public IncludeEffectiveStatementImpl(final StmtContext<String, IncludeStatement, ?> ctx) {
         super(ctx);
     }
index b0fb26780e932be15d59a1f970a564aed7738cf0..5daaf8b4c90a1c66cedacf3be6cc31a62d7ee4f6 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-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.ConstraintDefinition;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class InputEffectiveStatementImpl extends
-        AbstractEffectiveDocumentedDataNodeContainer<QName, InputStatement>
-        implements ContainerSchemaNode {
-
-    private final QName qname;
-    private final SchemaPath path;
-    private final boolean presence;
-
-    private boolean augmenting;
-    private boolean addedByUses;
-    private boolean configuration = true;
-    private ContainerSchemaNode original;
-    private final ConstraintDefinition constraints;
-
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+public final class InputEffectiveStatementImpl extends AbstractEffectiveContainerSchemaNode<InputStatement> {
 
     public InputEffectiveStatementImpl(
             final StmtContext<QName, InputStatement, EffectiveStatement<QName, InputStatement>> ctx) {
         super(ctx);
-
-        qname = ctx.getStatementArgument();
-        path = Utils.getSchemaPath(ctx);
-        presence = firstEffective(PresenceEffectiveStatementImpl.class) != null;
-        this.constraints = new EffectiveConstraintDefinitionImpl(this);
-
-        initSubstatementCollectionsAndFields();
-        initCopyType(ctx);
-    }
-
-    private void initCopyType(final StmtContext<QName, InputStatement, EffectiveStatement<QName, InputStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-
-        if (ctx.getOriginalCtx() != null) {
-            original = (ContainerSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-
-    private void initSubstatementCollectionsAndFields() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-
-        boolean configurationInit = false;
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if (effectiveStatement instanceof AugmentationSchema) {
-                AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
-                augmentationsInit.add(augmentationSchema);
-            }
-            if (!configurationInit && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
-    }
-
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraints;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAvailableAugmentations() {
-        return augmentations;
-    }
-
-    @Override
-    public boolean isPresenceContainer() {
-        return presence;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -168,11 +41,11 @@ public class InputEffectiveStatementImpl extends
             return false;
         }
         InputEffectiveStatementImpl other = (InputEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
-        return "RPC input " + qname.getLocalName();
+        return "RPC input " + getQName().getLocalName();
     }
 }
index a0c23d9f4be717b3c20ab65f187960251db66f59..baee0ec82996858abd843384e9eac3475ebfd653 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -12,7 +12,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class KeyEffectiveStatementImpl extends EffectiveStatementBase<Collection<SchemaNodeIdentifier>, KeyStatement> {
+public final class KeyEffectiveStatementImpl extends EffectiveStatementBase<Collection<SchemaNodeIdentifier>,
+        KeyStatement> {
     public KeyEffectiveStatementImpl(final StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement, ?> ctx) {
         super(ctx);
     }
index 9590f292ed5faa4d5dc429684cd3f62c3b7ba6c7..fa692d646c5e5af045b0a18ea6e2c590f5138832 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class LeafEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<QName, LeafStatement> implements
+public final class LeafEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<LeafStatement> implements
         LeafSchemaNode, DerivableSchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
-
-    // FIXME: should be private
-    boolean augmenting;
-    private boolean addedByUses;
-    private LeafSchemaNode original;
-    private boolean configuration = true;
-    private final ConstraintDefinition constraintsDef;
-    private TypeDefinition<?> type;
-    private String defaultStr;
-    private String unitsStr;
-
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final LeafSchemaNode original;
+    private final TypeDefinition<?> type;
+    private final String defaultStr;
+    private final String unitsStr;
 
     public LeafEffectiveStatementImpl(final StmtContext<QName, LeafStatement, EffectiveStatement<QName, LeafStatement>> ctx) {
         super(ctx);
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-        this.constraintsDef = new EffectiveConstraintDefinitionImpl(this);
-
-        initSubstatementCollections(ctx);
-        initCopyType(ctx);
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, LeafStatement, EffectiveStatement<QName, LeafStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-        if (ctx.getOriginalCtx() != null) {
-            original = (LeafSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
+        this.original = ctx.getOriginalCtx() == null ? null : (LeafSchemaNode) ctx.getOriginalCtx().buildEffective();
 
-    private void initSubstatementCollections(
-            final StmtContext<QName, LeafStatement, EffectiveStatement<QName, LeafStatement>> ctx) {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
+        DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
+        this.defaultStr = (defaultStmt == null) ? null : defaultStmt.argument();
 
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        boolean configurationInit = false;
-        boolean defaultInit = false;
-        boolean unitsInit = false;
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                unknownNodesInit.add((UnknownSchemaNode) effectiveStatement);
-            }
-            if (effectiveStatement instanceof TypeDefinition) {
-                type = TypeUtils.getTypeFromEffectiveStatement(effectiveStatement);
-            }
-            if (!configurationInit && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-            if (!defaultInit && effectiveStatement instanceof DefaultEffectiveStatementImpl) {
-                DefaultEffectiveStatementImpl defStmt = (DefaultEffectiveStatementImpl) effectiveStatement;
-                this.defaultStr = defStmt.argument();
-                defaultInit = true;
-            }
-            if (!unitsInit && effectiveStatement instanceof UnitsEffectiveStatementImpl) {
-                UnitsEffectiveStatementImpl unitStmt = (UnitsEffectiveStatementImpl) effectiveStatement;
-                this.unitsStr = unitStmt.argument();
-                unitsInit = true;
-            }
-        }
+        UnitsEffectiveStatementImpl unitsStmt = firstEffective(UnitsEffectiveStatementImpl.class);
+        this.unitsStr = (unitsStmt == null) ? null : unitsStmt.argument();
 
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
+        EffectiveStatement<?,?> typeEffectiveSubstatement = firstEffectiveSubstatementOfType(TypeDefinition.class);
+        this.type = TypeUtils.getTypeFromEffectiveStatement(typeEffectiveSubstatement);
     }
 
     @Override
@@ -134,26 +44,11 @@ public class LeafEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<
         return Optional.fromNullable(original);
     }
 
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraintsDef;
-    }
-
     @Override
     public TypeDefinition<?> getType() {
         return type;
     }
 
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public String getDefault() {
         return defaultStr;
@@ -168,8 +63,8 @@ public class LeafEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -185,15 +80,15 @@ public class LeafEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<
             return false;
         }
         LeafEffectiveStatementImpl other = (LeafEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder(LeafEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
-        sb.append("qname=").append(qname);
-        sb.append(", path=").append(path);
+        sb.append("qname=").append(getQName());
+        sb.append(", path=").append(getPath());
         sb.append("]");
         return sb.toString();
     }
index 92cb8de401392849c5c4c9f4b6139008efbab837..1963d6b79acbfd69783065b19933866312099d08 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class LeafListEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<QName, LeafListStatement> implements
+public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<LeafListStatement> implements
         LeafListSchemaNode, DerivableSchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
 
-    // FIXME: should be private
-    boolean augmenting;
-    private boolean addedByUses;
-    private LeafListSchemaNode original;
-    private boolean configuration = true;
-    private final ConstraintDefinition constraintsDef;
-    private TypeDefinition<?> type;
-    private boolean userOrdered;
-
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+    private final LeafListSchemaNode original;
+    private final TypeDefinition<?> type;
+    private final boolean userOrdered;
+    private static final String ORDER_BY_USER_KEYWORD = "user";
 
     public LeafListEffectiveStatementImpl(
             final StmtContext<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> ctx) {
         super(ctx);
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-        this.constraintsDef = new EffectiveConstraintDefinitionImpl(this);
-
-        // :TODO init TypeDefinition
-
-        initSubstatementCollections();
-        initCopyType(ctx);
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
+        this.original = ctx.getOriginalCtx() == null ? null : (LeafListSchemaNode) ctx.getOriginalCtx()
+                .buildEffective();
+
+        OrderedByEffectiveStatementImpl orderedByStmt = firstEffective(OrderedByEffectiveStatementImpl.class);
+        if (orderedByStmt != null && orderedByStmt.argument().equals(ORDER_BY_USER_KEYWORD)) {
+            this.userOrdered = true;
+        } else {
+            this.userOrdered = false;
         }
 
-        if (ctx.getOriginalCtx() != null) {
-            original = (LeafListSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-    private void initSubstatementCollections() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
-        boolean configurationInit = false;
-        boolean userOrderedInit = false;
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                unknownNodesInit.add((UnknownSchemaNode) effectiveStatement);
-            }
-            if (effectiveStatement instanceof TypeDefinition) {
-                type = TypeUtils.getTypeFromEffectiveStatement(effectiveStatement);
-            }
-            if (!configurationInit && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-            if (!userOrderedInit && effectiveStatement instanceof OrderedByEffectiveStatementImpl) {
-                OrderedByEffectiveStatementImpl orderedByStmt = (OrderedByEffectiveStatementImpl) effectiveStatement;
-                this.userOrdered = orderedByStmt.argument().equals("user") ? true : false;
-                userOrderedInit = true;
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
+        EffectiveStatement<?, ?> typeEffectiveSubstatement = firstEffectiveSubstatementOfType(TypeDefinition.class);
+        this.type = TypeUtils.getTypeFromEffectiveStatement(typeEffectiveSubstatement);
     }
 
     @Override
@@ -129,16 +48,6 @@ public class LeafListEffectiveStatementImpl extends AbstractEffectiveDocumentedN
         return Optional.fromNullable(original);
     }
 
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraintsDef;
-    }
-
     @Override
     public TypeDefinition<?> getType() {
         return type;
@@ -149,17 +58,12 @@ public class LeafListEffectiveStatementImpl extends AbstractEffectiveDocumentedN
         return userOrdered;
     }
 
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -175,14 +79,14 @@ public class LeafListEffectiveStatementImpl extends AbstractEffectiveDocumentedN
             return false;
         }
         LeafListEffectiveStatementImpl other = (LeafListEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder(LeafListEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
-        sb.append(qname);
+        sb.append(getQName());
         sb.append("]");
         return sb.toString();
     }
index 017dfe0615874202be1fbcc0691a814612dbeaf6..8ac81815b82e35c192b609860e866efe30c67d88 100644 (file)
@@ -5,12 +5,10 @@
  * 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.stmt.rfc6020.effective;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -18,69 +16,36 @@ 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.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
-
-public class ListEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer<QName, ListStatement>
-        implements ListSchemaNode, DerivableSchemaNode {
-    private final QName qname;
-    private final SchemaPath path;
-
-    // FIXME: should be private
-    boolean augmenting;
-    private boolean addedByUses;
-    private ListSchemaNode original;
-    private boolean configuration = true;
-    private final ConstraintDefinition constraints;
-    private boolean userOrdered;
-
-    private ImmutableList<QName> keyDefinition;
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
-
-    public ListEffectiveStatementImpl(final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
-        super(ctx);
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-        this.constraints = new EffectiveConstraintDefinitionImpl(this);
 
-        initSubstatementCollectionsAndFields();
-        initCopyType(ctx);
+public final class ListEffectiveStatementImpl extends AbstractEffectiveSimpleDataNodeContainer<ListStatement> implements
+        ListSchemaNode, DerivableSchemaNode {
 
-        // should be after initSubstatementCollectionsAndFields()
-        initKeyDefinition(ctx);
-    }
+    private final boolean userOrdered;
+    private final List<QName> keyDefinition;
+    private static final String ORDER_BY_USER_KEYWORD = "user";
+    private final ListSchemaNode original;
 
-    private void initCopyType(final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
+    public ListEffectiveStatementImpl(
+            final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
+        super(ctx);
 
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
+        this.original = ctx.getOriginalCtx() == null ? null : (ListSchemaNode) ctx.getOriginalCtx().buildEffective();
 
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
+        OrderedByEffectiveStatementImpl orderedByStmt = firstEffective(OrderedByEffectiveStatementImpl.class);
+        if (orderedByStmt != null && orderedByStmt.argument().equals(ORDER_BY_USER_KEYWORD)) {
+            this.userOrdered = true;
+        } else {
+            this.userOrdered = false;
         }
-        if (ctx.getOriginalCtx() != null) {
-            original = (ListSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
 
-    private void initKeyDefinition(final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
+        // initKeyDefinition
         List<QName> keyDefinitionInit = new LinkedList<>();
         KeyEffectiveStatementImpl keyEffectiveSubstatement = firstEffective(KeyEffectiveStatementImpl.class);
 
@@ -99,8 +64,8 @@ public class ListEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
 
                 if (!possibleLeafQNamesForKey.contains(keyQName)) {
                     throw new IllegalArgumentException(String.format("Key '%s' misses node '%s' in list '%s', file %s",
-                            keyEffectiveSubstatement.getDeclared().rawArgument(), keyQName.getLocalName(), ctx.getStatementArgument(),
-                            ctx.getStatementSourceReference()));
+                            keyEffectiveSubstatement.getDeclared().rawArgument(), keyQName.getLocalName(),
+                            ctx.getStatementArgument(), ctx.getStatementSourceReference()));
                 }
 
                 keyDefinitionInit.add(keyQName);
@@ -110,82 +75,14 @@ public class ListEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
         this.keyDefinition = ImmutableList.copyOf(keyDefinitionInit);
     }
 
-    private void initSubstatementCollectionsAndFields() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-
-        boolean configurationInit = false;
-        boolean userOrderedInit = false;
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if (effectiveStatement instanceof AugmentationSchema) {
-                AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
-                augmentationsInit.add(augmentationSchema);
-            }
-            if (!configurationInit && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-            if (!userOrderedInit && effectiveStatement instanceof OrderedByEffectiveStatementImpl) {
-                OrderedByEffectiveStatementImpl orderedByStmt = (OrderedByEffectiveStatementImpl) effectiveStatement;
-                this.userOrdered = orderedByStmt.argument().equals("user") ? true : false;
-                userOrderedInit = true;
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public List<QName> getKeyDefinition() {
-        return keyDefinition;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
-    }
-
     @Override
     public Optional<ListSchemaNode> getOriginal() {
         return Optional.fromNullable(original);
     }
 
     @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraints;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAvailableAugmentations() {
-        return augmentations;
+    public List<QName> getKeyDefinition() {
+        return keyDefinition;
     }
 
     @Override
@@ -193,17 +90,12 @@ public class ListEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
         return userOrdered;
     }
 
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -219,11 +111,11 @@ public class ListEffectiveStatementImpl extends AbstractEffectiveDocumentedDataN
             return false;
         }
         final ListEffectiveStatementImpl other = (ListEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
-        return "list " + qname.getLocalName();
+        return "list " + getQName().getLocalName();
     }
 }
index bcd8e8cb8783845e69964b96c0b6d1c232c59eed..b1eda0d3508c8e5c1b771ffe207e493d5eb38211 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class MandatoryEffectiveStatementImpl extends EffectiveStatementBase<Boolean, MandatoryStatement> {
+public final class MandatoryEffectiveStatementImpl extends EffectiveStatementBase<Boolean, MandatoryStatement> {
     public MandatoryEffectiveStatementImpl(final StmtContext<Boolean, MandatoryStatement, ?> ctx) {
         super(ctx);
     }
index ee58993cfa30caa19a8268a203b548fe459d455f..1e1f2141a88f7a6ba7e33b41f5dec0ba074ee79f 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,9 +10,8 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class MaxElementsEffectiveStatementImpl extends EffectiveStatementBase<String, MaxElementsStatement> {
+public final class MaxElementsEffectiveStatementImpl extends EffectiveStatementBase<String, MaxElementsStatement> {
     public MaxElementsEffectiveStatementImpl(final StmtContext<String, MaxElementsStatement, ?> ctx) {
         super(ctx);
-
     }
 }
\ No newline at end of file
index 819ff549d8ece20dacaee3331d418af01b3d58bc..8816fc5b1c976998280c7a2d3ecb2a781cd0aeb9 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class MinElementsEffectiveStatementImpl extends EffectiveStatementBase<Integer, MinElementsStatement> {
+public final class MinElementsEffectiveStatementImpl extends EffectiveStatementBase<Integer, MinElementsStatement> {
     public MinElementsEffectiveStatementImpl(final StmtContext<Integer, MinElementsStatement, ?> ctx) {
         super(ctx);
     }
index 5e673783f024828c2d8c33ca8c78de056feccad2..d2d7f7cacdd0f69e6226ffb989792cafe402421a 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import java.net.URI;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
 import java.util.Objects;
-import java.util.Set;
-import org.opendaylight.yangtools.concepts.Immutable;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Deviation;
-import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
-import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
-import org.opendaylight.yangtools.yang.model.api.ModuleImport;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.UsesNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
-import org.opendaylight.yangtools.yang.model.util.ExtendedType;
-import org.opendaylight.yangtools.yang.model.util.ModuleImportImpl;
-import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
-import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource;
-import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
-
-public class ModuleEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<String, ModuleStatement> implements
-        Module, Immutable {
 
+public final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleStatement> {
     private final QNameModule qNameModule;
-    private final String name;
-    private final String sourcePath;
-    private String prefix;
-    private String yangVersion;
-    private String organization;
-    private String contact;
-    private ImmutableSet<ModuleImport> imports;
-    private ImmutableSet<Module> submodules;
-    private ImmutableSet<FeatureDefinition> features;
-    private ImmutableSet<NotificationDefinition> notifications;
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableSet<RpcDefinition> rpcs;
-    private ImmutableSet<Deviation> deviations;
-    private ImmutableList<ExtensionDefinition> extensionNodes;
-    private ImmutableSet<IdentitySchemaNode> identities;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
-    private ImmutableList<EffectiveStatement<?, ?>> substatementsOfSubmodules;
-
-    private ImmutableMap<QName, DataSchemaNode> childNodes;
-    private ImmutableSet<GroupingDefinition> groupings;
-    private ImmutableSet<UsesNode> uses;
-    private ImmutableSet<TypeDefinition<?>> typeDefinitions;
-    private ImmutableSet<DataSchemaNode> publicChildNodes;
 
     public ModuleEffectiveStatementImpl(
             final StmtContext<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> ctx) {
         super(ctx);
 
-        name = argument();
-        QNameModule qNameModuleInit = ctx.getFromNamespace( ModuleCtxToModuleQName.class, ctx);
-        qNameModule = qNameModuleInit.getRevision() == null
-                ? QNameModule.create(qNameModuleInit.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV)
-                : qNameModuleInit;
-
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof PrefixEffectiveStatementImpl) {
-                prefix = ((PrefixEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof YangVersionEffectiveStatementImpl) {
-                yangVersion = ((YangVersionEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof OrganizationEffectiveStatementImpl) {
-                organization = ((OrganizationEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ContactEffectiveStatementImpl) {
-                contact = ((ContactEffectiveStatementImpl) effectiveStatement).argument();
-            }
-        }
-
-        if (yangVersion == null) {
-            yangVersion = "1";
-        }
-        if(ctx.getStatementSourceReference() instanceof DeclarationInTextSource) {
-            sourcePath = ((DeclarationInTextSource) ctx.getStatementSourceReference()).getSourceName();
-        } else {
-            sourcePath = null;
-        }
-
-
-        initSubmodules(ctx);
-        initSubstatementCollections(ctx);
-    }
-
-    private void initSubmodules(
-            final StmtContext<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> ctx) {
-        Map<String, ModuleIdentifier> includedSubmodulesMap = ctx
-                .getAllFromCurrentStmtCtxNamespace(IncludedSubmoduleNameToIdentifier.class);
-
-        if (includedSubmodulesMap == null || includedSubmodulesMap.isEmpty()) {
-            this.submodules = ImmutableSet.of();
-            this.substatementsOfSubmodules = ImmutableList.of();
-            return;
-        }
-
-        Collection<ModuleIdentifier> includedSubmodules = includedSubmodulesMap.values();
-
-        Set<Module> submodulesInit = new HashSet<>();
-        List<EffectiveStatement<?, ?>> substatementsOfSubmodulesInit = new LinkedList<>();
-        for (ModuleIdentifier submoduleIdentifier : includedSubmodules) {
-            @SuppressWarnings("unchecked")
-            Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> submoduleCtx =
-                    (Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>)
-                    ctx.getFromNamespace(SubmoduleNamespace.class, submoduleIdentifier);
-            SubmoduleEffectiveStatementImpl submodule = (SubmoduleEffectiveStatementImpl) submoduleCtx
-                    .buildEffective();
-            submodulesInit.add(submodule);
-            substatementsOfSubmodulesInit.addAll(submodule.effectiveSubstatements());
-        }
-
-        this.submodules = ImmutableSet.copyOf(submodulesInit);
-        this.substatementsOfSubmodules = ImmutableList
-                .copyOf(substatementsOfSubmodulesInit);
-    }
-
-    private void initSubstatementCollections(
-            final StmtContext<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> ctx) {
-        List<EffectiveStatement<?, ?>> effectiveSubstatements = new LinkedList<>();
-
-        effectiveSubstatements.addAll(effectiveSubstatements());
-        effectiveSubstatements.addAll(substatementsOfSubmodules);
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-        Set<ModuleImport> importsInit = new HashSet<>();
-        Set<NotificationDefinition> notificationsInit = new HashSet<>();
-        Set<RpcDefinition> rpcsInit = new HashSet<>();
-        Set<Deviation> deviationsInit = new HashSet<>();
-        Set<IdentitySchemaNode> identitiesInit = new HashSet<>();
-        Set<FeatureDefinition> featuresInit = new HashSet<>();
-        List<ExtensionDefinition> extensionNodesInit = new LinkedList<>();
-
-        Map<QName, DataSchemaNode> mutableChildNodes = new LinkedHashMap<>();
-        Set<GroupingDefinition> mutableGroupings = new HashSet<>();
-        Set<UsesNode> mutableUses = new HashSet<>();
-        Set<TypeDefinition<?>> mutableTypeDefinitions = new LinkedHashSet<>();
-        Set<DataSchemaNode> mutablePublicChildNodes = new LinkedHashSet<>();
-
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                unknownNodesInit.add((UnknownSchemaNode) effectiveStatement);
-            }
-            if (effectiveStatement instanceof AugmentationSchema) {
-                augmentationsInit.add((AugmentationSchema) effectiveStatement);
-            }
-            if (effectiveStatement instanceof ModuleImport) {
-                importsInit.add((ModuleImport) effectiveStatement);
-            }
-            if (effectiveStatement instanceof NotificationDefinition) {
-                notificationsInit.add((NotificationDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof RpcDefinition) {
-                rpcsInit.add((RpcDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof Deviation) {
-                deviationsInit.add((Deviation) effectiveStatement);
-            }
-            if (effectiveStatement instanceof IdentitySchemaNode) {
-                identitiesInit.add((IdentitySchemaNode) effectiveStatement);
-            }
-            if (effectiveStatement instanceof FeatureDefinition) {
-                featuresInit.add((FeatureDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof ExtensionDefinition) {
-                extensionNodesInit.add((ExtensionDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof DataSchemaNode) {
-                DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
-                if (!mutableChildNodes.containsKey(dataSchemaNode.getQName())) {
-                    mutableChildNodes.put(dataSchemaNode.getQName(), dataSchemaNode);
-                    mutablePublicChildNodes.add(dataSchemaNode);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-            if (effectiveStatement instanceof UsesNode) {
-                UsesNode usesNode = (UsesNode) effectiveStatement;
-                if (!mutableUses.contains(usesNode)) {
-                    mutableUses.add(usesNode);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-            if (effectiveStatement instanceof TypeDefEffectiveStatementImpl) {
-                TypeDefEffectiveStatementImpl typeDef = (TypeDefEffectiveStatementImpl) effectiveStatement;
-                ExtendedType extendedType = typeDef.buildType();
-                if (!mutableTypeDefinitions.contains(extendedType)) {
-                    mutableTypeDefinitions.add(extendedType);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-            if (effectiveStatement instanceof GroupingDefinition) {
-                GroupingDefinition grp = (GroupingDefinition) effectiveStatement;
-                if (!mutableGroupings.contains(grp)) {
-                    mutableGroupings.add(grp);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-        this.imports = ImmutableSet.copyOf(resolveModuleImports(importsInit, ctx));
-        this.notifications = ImmutableSet.copyOf(notificationsInit);
-        this.rpcs = ImmutableSet.copyOf(rpcsInit);
-        this.deviations = ImmutableSet.copyOf(deviationsInit);
-        this.identities = ImmutableSet.copyOf(identitiesInit);
-        this.features = ImmutableSet.copyOf(featuresInit);
-        this.extensionNodes = ImmutableList.copyOf(extensionNodesInit);
-
-        this.childNodes = ImmutableMap.copyOf(mutableChildNodes);
-        this.groupings = ImmutableSet.copyOf(mutableGroupings);
-        this.publicChildNodes = ImmutableSet.copyOf(mutablePublicChildNodes);
-        this.typeDefinitions = ImmutableSet.copyOf(mutableTypeDefinitions);
-        this.uses = ImmutableSet.copyOf(mutableUses);
-    }
-
-    private static Set<ModuleImport> resolveModuleImports(final Set<ModuleImport> importsInit,
-            final StmtContext<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> ctx) {
-        Set<ModuleImport> resolvedModuleImports = new LinkedHashSet<>();
-        for (ModuleImport moduleImport : importsInit) {
-            if (moduleImport.getRevision().equals(
-                    SimpleDateFormatUtil.DEFAULT_DATE_IMP)) {
-                QNameModule impModuleQName = Utils.getModuleQNameByPrefix(ctx,
-                        moduleImport.getPrefix());
-                if (!impModuleQName.getRevision().equals(
-                        SimpleDateFormatUtil.DEFAULT_DATE_REV)) {
-                    ModuleImport resolvedModuleImport = new ModuleImportImpl(
-                            moduleImport.getModuleName(),
-                            impModuleQName.getRevision(),
-                            moduleImport.getPrefix());
-                    resolvedModuleImports.add(resolvedModuleImport);
-                }
-            } else {
-                resolvedModuleImports.add(moduleImport);
-            }
-        }
-        return resolvedModuleImports;
-    }
-
-    @Override
-    public String getModuleSourcePath() {
-        return sourcePath;
-    }
-
-    @Override
-    public URI getNamespace() {
-        return qNameModule.getNamespace();
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public Date getRevision() {
-        return qNameModule.getRevision();
+        QNameModule qNameModuleInit = ctx.getFromNamespace(ModuleCtxToModuleQName.class, ctx);
+        this.qNameModule = qNameModuleInit.getRevision() == null ? QNameModule.create(qNameModuleInit.getNamespace(),
+                SimpleDateFormatUtil.DEFAULT_DATE_REV) : qNameModuleInit;
     }
 
     @Override
-    public String getPrefix() {
-        return prefix;
-    }
-
-    @Override
-    public String getYangVersion() {
-        return yangVersion;
-    }
-
-    @Override
-    public String getOrganization() {
-        return organization;
-    }
-
-    @Override
-    public String getContact() {
-        return contact;
-    }
-
-    @Override
-    public Set<ModuleImport> getImports() {
-        return imports;
-    }
-
-    @Override
-    public Set<Module> getSubmodules() {
-        return submodules;
-    }
-
-    @Override
-    public Set<FeatureDefinition> getFeatures() {
-        return features;
-    }
-
-    @Override
-    public Set<NotificationDefinition> getNotifications() {
-        return notifications;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAugmentations() {
-        return augmentations;
-    }
-
-    @Override
-    public Set<RpcDefinition> getRpcs() {
-        return rpcs;
-    }
-
-    @Override
-    public Set<Deviation> getDeviations() {
-        return deviations;
-    }
-
-    @Override
-    public List<ExtensionDefinition> getExtensionSchemaNodes() {
-        return extensionNodes;
-    }
-
-    @Override
-    public Set<IdentitySchemaNode> getIdentities() {
-        return identities;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
-    @Override
-    public final Set<TypeDefinition<?>> getTypeDefinitions() {
-        return typeDefinitions;
-    }
-
-    @Override
-    public final Set<DataSchemaNode> getChildNodes() {
-        return publicChildNodes;
-    }
-
-    @Override
-    public final Set<GroupingDefinition> getGroupings() {
-        return groupings;
-    }
-
-    @Override
-    public final DataSchemaNode getDataChildByName(final QName name) {
-        // Child nodes are keyed by their container name, so we can do a direct
-        // lookup
-        return childNodes.get(name);
-    }
-
-    @Override
-    public final DataSchemaNode getDataChildByName(final String name) {
-        for (DataSchemaNode node : childNodes.values()) {
-            if (node.getQName().getLocalName().equals(name)) {
-                return node;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public Set<UsesNode> getUses() {
-        return uses;
-    }
-
-    @Override
-    public String getSource() {
-        return null;
+    public QNameModule getQNameModule() {
+        return qNameModule;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(name);
-        result = prime * result + Objects.hashCode(yangVersion);
-        result = prime * result + qNameModule.hashCode();
+        result = prime * result + Objects.hashCode(getName());
+        result = prime * result + Objects.hashCode(getYangVersion());
+        result = prime * result + Objects.hashCode(qNameModule);
         return result;
     }
 
@@ -432,34 +54,16 @@ public class ModuleEffectiveStatementImpl extends AbstractEffectiveDocumentedNod
             return false;
         }
         ModuleEffectiveStatementImpl other = (ModuleEffectiveStatementImpl) obj;
-        if (!Objects.equals(name, other.name)) {
+        if (!Objects.equals(getName(), other.getName())) {
             return false;
         }
         if (!qNameModule.equals(other.qNameModule)) {
             return false;
         }
-        if (!Objects.equals(yangVersion, other.yangVersion)) {
+        if (!Objects.equals(getYangVersion(), other.getYangVersion())) {
             return false;
         }
         return true;
     }
 
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder(ModuleEffectiveStatementImpl.class.getSimpleName());
-        sb.append("[");
-        sb.append("name=").append(name);
-        sb.append(", namespace=").append(getNamespace());
-        sb.append(", revision=").append(getRevision());
-        sb.append(", prefix=").append(prefix);
-        sb.append(", yangVersion=").append(yangVersion);
-        sb.append("]");
-        return sb.toString();
-    }
-
-    @Override
-    public QNameModule getQNameModule() {
-        return qNameModule;
-    }
-
 }
index e8c9d4ac1e4b32fbffde66e716efc8b8e5fe73e7..e76d12296eaf852168ee29056d44c1e6bec25d4f 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import java.util.Objects;
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
@@ -18,36 +17,26 @@ public class MustEffectiveStatementImpl extends EffectiveStatementBase<RevisionA
         MustDefinition {
 
     private final RevisionAwareXPath xPath;
-    private String description;
-    private String errorAppTag;
-    private String errorMessage;
-    private String reference;
+    private final String description;
+    private final String errorAppTag;
+    private final String errorMessage;
+    private final String reference;
 
     public MustEffectiveStatementImpl(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
         super(ctx);
+        this.xPath = ctx.getStatementArgument();
 
-        initFields();
+        DescriptionEffectiveStatementImpl descriptionStmt = firstEffective(DescriptionEffectiveStatementImpl.class);
+        this.description = (descriptionStmt == null) ? null : descriptionStmt.argument();
 
-        xPath = ctx.getStatementArgument();
-    }
+        ErrorAppTagEffectiveStatementImpl errorAppTagStmt = firstEffective(ErrorAppTagEffectiveStatementImpl.class);
+        this.errorAppTag = (errorAppTagStmt == null) ? null : errorAppTagStmt.argument();
 
-    private void initFields() {
-
-        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-
-            if (effectiveStatement instanceof DescriptionEffectiveStatementImpl) {
-                description = ((DescriptionEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ErrorAppTagEffectiveStatementImpl) {
-                errorAppTag = ((ErrorAppTagEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ErrorMessageEffectiveStatementImpl) {
-                errorMessage = ((ErrorMessageEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ReferenceEffectiveStatementImpl) {
-                reference = ((ReferenceEffectiveStatementImpl) effectiveStatement).argument();
-            }
-        }
+        ErrorMessageEffectiveStatementImpl errorMessageStmt = firstEffective(ErrorMessageEffectiveStatementImpl.class);
+        this.errorMessage = (errorMessageStmt == null) ? null : errorMessageStmt.argument();
+
+        ReferenceEffectiveStatementImpl referenceStmt = firstEffective(ReferenceEffectiveStatementImpl.class);
+        this.reference = (referenceStmt == null) ? null : referenceStmt.argument();
     }
 
     @Override
@@ -103,7 +92,7 @@ public class MustEffectiveStatementImpl extends EffectiveStatementBase<RevisionA
         if (!Objects.equals(description, other.description)) {
             return false;
         }
-        if (!Objects.equals(reference,other.reference)) {
+        if (!Objects.equals(reference, other.reference)) {
             return false;
         }
         return true;
index 3164a816c29072e234609130920374c8fe03460e..78cad170b316c58fa9218c541c6432655477e641 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,7 @@ import java.net.URI;
 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class NamespaceEffectiveStatementImpl extends EffectiveStatementBase<URI, NamespaceStatement>  {
+public final class NamespaceEffectiveStatementImpl extends EffectiveStatementBase<URI, NamespaceStatement>  {
     public NamespaceEffectiveStatementImpl(final StmtContext<URI, NamespaceStatement, ?> ctx) {
         super(ctx);
     }
index b89e34211a1511a5ce5e6cbeafc2d1289d9d8036..849ae138f400c9f1649ac5c8b7dfe5da4b088379 100644 (file)
@@ -25,13 +25,12 @@ import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class NotificationEffectiveStatementImpl
-        extends AbstractEffectiveDocumentedDataNodeContainer<QName, NotificationStatement>
-        implements NotificationDefinition {
+public class NotificationEffectiveStatementImpl extends
+        AbstractEffectiveDocumentedDataNodeContainer<QName, NotificationStatement> implements NotificationDefinition {
     private final QName qname;
     private final SchemaPath path;
-    private Set<AugmentationSchema> augmentations;
-    private List<UnknownSchemaNode> unknownNodes;
+    private final Set<AugmentationSchema> augmentations;
+    private final List<UnknownSchemaNode> unknownNodes;
 
     public NotificationEffectiveStatementImpl(
             final StmtContext<QName, NotificationStatement, EffectiveStatement<QName, NotificationStatement>> ctx) {
@@ -39,15 +38,10 @@ public class NotificationEffectiveStatementImpl
         this.qname = ctx.getStatementArgument();
         this.path = Utils.getSchemaPath(ctx);
 
-        initSubstatementCollections();
-    }
-
-    private void initSubstatementCollections() {
+        // initSubstatementCollections
         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
         List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
         Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-
         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
             if (effectiveStatement instanceof UnknownSchemaNode) {
                 UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
@@ -58,7 +52,6 @@ public class NotificationEffectiveStatementImpl
                 augmentationsInit.add(augmentationSchema);
             }
         }
-
         this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
         this.augmentations = ImmutableSet.copyOf(augmentationsInit);
     }
index 41f5f410162ae59aaa91e2c8c6f6f92d0a3cb24f..9ad3e22845c4271ef9dbb59ad90c7cd76ed8bf36 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class OrderedByEffectiveStatementImpl extends EffectiveStatementBase<String, OrderedByStatement> {
+public final class OrderedByEffectiveStatementImpl extends EffectiveStatementBase<String, OrderedByStatement> {
     public OrderedByEffectiveStatementImpl(final StmtContext<String, OrderedByStatement, ?> ctx) {
         super(ctx);
     }
index 16ef3c523a5c1a5568ae9d2439b0e9e0663b3c54..02c5c92bd9ed806d336f55471db3d89efd4a6439 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class OrganizationEffectiveStatementImpl extends EffectiveStatementBase<String, OrganizationStatement> {
+public final class OrganizationEffectiveStatementImpl extends EffectiveStatementBase<String, OrganizationStatement> {
     public OrganizationEffectiveStatementImpl(final StmtContext<String, OrganizationStatement, ?> ctx) {
         super(ctx);
     }
index ce7648c5fb612651741b7412d043371b1ffc8590..6c3b619a170130c58db967dd2ec93ed947542284 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-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.ConstraintDefinition;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class OutputEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer<QName, OutputStatement>
-        implements ContainerSchemaNode {
-
-    private final QName qname;
-    private final SchemaPath path;
-    private final boolean presence;
-
-    private boolean augmenting;
-    private boolean addedByUses;
-    private boolean configuration = true;
-    private ContainerSchemaNode original;
-    private final ConstraintDefinition constraints;
-
-    private Set<AugmentationSchema> augmentations;
-    private List<UnknownSchemaNode> unknownNodes;
+public final class OutputEffectiveStatementImpl extends AbstractEffectiveContainerSchemaNode<OutputStatement> {
 
     public OutputEffectiveStatementImpl(
             final StmtContext<QName, OutputStatement, EffectiveStatement<QName, OutputStatement>> ctx) {
         super(ctx);
-
-        qname = ctx.getStatementArgument();
-        path = Utils.getSchemaPath(ctx);
-        presence = firstEffective(PresenceEffectiveStatementImpl.class) != null;
-        this.constraints = new EffectiveConstraintDefinitionImpl(this);
-
-        initSubstatementCollections();
-        initCopyType(ctx);
-    }
-
-    private void initCopyType(
-            final StmtContext<QName, OutputStatement, EffectiveStatement<QName, OutputStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
-        }
-        if (ctx.getOriginalCtx() != null) {
-            original = (ContainerSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-    }
-
-    private void initSubstatementCollections() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-
-        boolean configurationInit = false;
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
-            if (effectiveStatement instanceof AugmentationSchema) {
-                AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
-                augmentationsInit.add(augmentationSchema);
-            }
-            if (!configurationInit && effectiveStatement instanceof ConfigEffectiveStatementImpl) {
-                ConfigEffectiveStatementImpl configStmt = (ConfigEffectiveStatementImpl) effectiveStatement;
-                this.configuration = configStmt.argument();
-                configurationInit = true;
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
-    @Override
-    public boolean isAugmenting() {
-        return augmenting;
-    }
-
-    @Override
-    public boolean isAddedByUses() {
-        return addedByUses;
-    }
-
-    @Override
-    public boolean isConfiguration() {
-        return configuration;
-    }
-
-    @Override
-    public ConstraintDefinition getConstraints() {
-        return constraints;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAvailableAugmentations() {
-        return augmentations;
-    }
-
-    @Override
-    public boolean isPresenceContainer() {
-        return presence;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -168,12 +41,12 @@ public class OutputEffectiveStatementImpl extends AbstractEffectiveDocumentedDat
             return false;
         }
         OutputEffectiveStatementImpl other = (OutputEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
     public String toString() {
-        return "RPC Output " + qname.getLocalName();
+        return "RPC Output " + getQName().getLocalName();
     }
 
 }
index cfdd800606dd48168d30fcbbbf98504047f92b65..569fba12132e2b7e83c6c96105d84a18d6336383 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class PathEffectiveStatementImpl extends EffectiveStatementBase<RevisionAwareXPath, PathStatement> {
+public final class PathEffectiveStatementImpl extends EffectiveStatementBase<RevisionAwareXPath, PathStatement> {
     public PathEffectiveStatementImpl(final StmtContext<RevisionAwareXPath, PathStatement, ?> ctx) {
         super(ctx);
     }
index 15638e03a97264394f85aa1c784c2711d55ea4fe..8946e7f15d6e3226d59cd9cffafadaff00495500 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class PositionEffectiveStatementImpl extends EffectiveStatementBase<Long, PositionStatement> {
+public final class PositionEffectiveStatementImpl extends EffectiveStatementBase<Long, PositionStatement> {
     public PositionEffectiveStatementImpl(final StmtContext<Long, PositionStatement, ?> ctx) {
         super(ctx);
     }
index 294840f671a9bb2b3e8bf97646a3141bf2b1d351..bf311ec51b12d5b4484076d4b253b8954d00d4c9 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class PrefixEffectiveStatementImpl extends EffectiveStatementBase<String, PrefixStatement>  {
+public final class PrefixEffectiveStatementImpl extends EffectiveStatementBase<String, PrefixStatement>  {
     public PrefixEffectiveStatementImpl(final StmtContext<String, PrefixStatement, ?> ctx) {
         super(ctx);
     }
index 9bed5d4f2e4d53142e42c7597fe76bd0ef131521..f92077aed7234686cbf1dcc588f19de0cc2bb7b8 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class PresenceEffectiveStatementImpl extends EffectiveStatementBase<String, PresenceStatement> {
+public final class PresenceEffectiveStatementImpl extends EffectiveStatementBase<String, PresenceStatement> {
     public PresenceEffectiveStatementImpl(final StmtContext<String, PresenceStatement, ?> ctx) {
         super(ctx);
     }
index b2d9171c4994dce81c01482c762b66b986bbdd13..3a821ae7ff5fcb080b81799fa69c7f88ac8c8272 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ReferenceEffectiveStatementImpl extends EffectiveStatementBase<String, ReferenceStatement>  {
+public final class ReferenceEffectiveStatementImpl extends EffectiveStatementBase<String, ReferenceStatement>  {
     public ReferenceEffectiveStatementImpl(final StmtContext<String, ReferenceStatement, ?> ctx) {
         super(ctx);
     }
index 9752e4e2151826679c6b376b45f800ef1a49f978..ebef3fd511791d4ac6e7f6bbfaf444172cb148b9 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -21,45 +21,36 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class RefineEffectiveStatementImpl extends
-        AbstractEffectiveDocumentedNode<SchemaNodeIdentifier, RefineStatement>
-        implements SchemaNode {
+public final class RefineEffectiveStatementImpl extends
+        AbstractEffectiveDocumentedNode<SchemaNodeIdentifier, RefineStatement> implements SchemaNode {
 
     private final QName qname;
     private final SchemaPath path;
-    private List<UnknownSchemaNode> unknownNodes;
+    private final List<UnknownSchemaNode> unknownNodes;
     private final SchemaNode refineTargetNode;
 
-    public RefineEffectiveStatementImpl(
-            final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> ctx) {
+    public RefineEffectiveStatementImpl(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> ctx) {
         super(ctx);
-
         qname = ctx.getStatementArgument().getLastComponent();
         path = Utils.getSchemaPath(ctx);
         refineTargetNode = (SchemaNode) ctx.getEffectOfStatement().iterator().next().buildEffective();
 
-        initSubstatementCollectionsAndFields();
-    }
-
-    public SchemaNode getRefineTargetNode() {
-        return refineTargetNode;
-    }
-
-    private void initSubstatementCollectionsAndFields() {
+        // initSubstatementCollectionsAndFields
         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
         List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-
         for (EffectiveStatement<?, ?> effectiveSubstatement : effectiveSubstatements) {
             if (effectiveSubstatement instanceof UnknownSchemaNode) {
                 UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveSubstatement;
                 unknownNodesInit.add(unknownNode);
             }
         }
-
         this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
     }
 
+    public SchemaNode getRefineTargetNode() {
+        return refineTargetNode;
+    }
+
     @Override
     public QName getQName() {
         return qname;
index f6883b18bf364c08ee9e33b54e6e4bbe2cf639ca..c71857b0f797aec6d27b1da005ca5221f6c209f7 100644 (file)
@@ -10,7 +10,8 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class RequireInstanceEffectiveStatementImpl extends EffectiveStatementBase<Boolean, RequireInstanceStatement> {
+public final class RequireInstanceEffectiveStatementImpl extends EffectiveStatementBase<Boolean,
+        RequireInstanceStatement> {
     public RequireInstanceEffectiveStatementImpl(final StmtContext<Boolean, RequireInstanceStatement, ?> ctx) {
         super(ctx);
     }
index 0b925b169c0d6bbd20de7efaa9de9814050487e2..ef66c81bc3487694bcb48bed33962b7c9e79cb58 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,7 @@ import java.util.Date;
 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class RevisionDateEffectiveStatementImpl extends EffectiveStatementBase<Date, RevisionDateStatement> {
+public final class RevisionDateEffectiveStatementImpl extends EffectiveStatementBase<Date, RevisionDateStatement> {
     public RevisionDateEffectiveStatementImpl(final StmtContext<Date, RevisionDateStatement, ?> ctx) {
         super(ctx);
     }
index 4aff93ae0babd0f93d89a9b04528e85833802306..134d69c8fcafa6ea81df7a17b05efc54e27b585e 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,7 @@ import java.util.Date;
 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class RevisionEffectiveStatementImpl extends EffectiveStatementBase<Date, RevisionStatement> {
+public final class RevisionEffectiveStatementImpl extends EffectiveStatementBase<Date, RevisionStatement> {
     private final String reference;
     private final String description;
 
index 65e336ca0a039d241b6ef8ec7adaa4f468c4012d..187c593838177ccd21ba20a59d5e77d245804100 100644 (file)
@@ -7,57 +7,36 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
-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.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class RpcEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<QName, RpcStatement> implements RpcDefinition {
-    private final QName qname;
-    private final SchemaPath path;
-
-    private ContainerSchemaNode input;
-    private ContainerSchemaNode output;
-
-    private Set<TypeDefinition<?>> typeDefinitions;
-    private Set<GroupingDefinition> groupings;
-    private List<UnknownSchemaNode> unknownNodes;
+public class RpcEffectiveStatementImpl extends AbstractEffectiveSchemaNode<RpcStatement> implements RpcDefinition {
+    private final ContainerSchemaNode input;
+    private final ContainerSchemaNode output;
+    private final Set<TypeDefinition<?>> typeDefinitions;
+    private final Set<GroupingDefinition> groupings;
 
     public RpcEffectiveStatementImpl(final StmtContext<QName, RpcStatement, EffectiveStatement<QName, RpcStatement>> ctx) {
         super(ctx);
-        this.qname = ctx.getStatementArgument();
-        this.path = Utils.getSchemaPath(ctx);
-
-        initSubstatements();
-    }
+        this.input = firstEffective(InputEffectiveStatementImpl.class);
+        this.output = firstEffective(OutputEffectiveStatementImpl.class);
 
-    private void initSubstatements() {
+        // initSubstatements
         Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
         Set<GroupingDefinition> groupingsInit = new HashSet<>();
         Set<TypeDefinition<?>> typeDefinitionsInit = new HashSet<>();
-
         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
-                unknownNodesInit.add(unknownNode);
-            }
             if (effectiveStatement instanceof GroupingDefinition) {
                 GroupingDefinition groupingDefinition = (GroupingDefinition) effectiveStatement;
                 groupingsInit.add(groupingDefinition);
@@ -66,47 +45,21 @@ public class RpcEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<Q
                 TypeDefinition<?> typeDefinition = (TypeDefinition<?>) effectiveStatement;
                 typeDefinitionsInit.add(typeDefinition);
             }
-            if (this.input == null && effectiveStatement instanceof InputEffectiveStatementImpl) {
-                this.input = (InputEffectiveStatementImpl) effectiveStatement;
-            }
-            if (this.output == null && effectiveStatement instanceof OutputEffectiveStatementImpl) {
-                this.output = (OutputEffectiveStatementImpl) effectiveStatement;
-            }
         }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
         this.groupings = ImmutableSet.copyOf(groupingsInit);
         this.typeDefinitions = ImmutableSet.copyOf(typeDefinitionsInit);
     }
 
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
     @Override
     public ContainerSchemaNode getInput() {
         return input;
     }
 
-    void setInput(final ContainerSchemaNode input) {
-        this.input = input;
-    }
-
     @Override
     public ContainerSchemaNode getOutput() {
         return output;
     }
 
-    void setOutput(final ContainerSchemaNode output) {
-        this.output = output;
-    }
-
     @Override
     public Set<TypeDefinition<?>> getTypeDefinitions() {
         return typeDefinitions;
@@ -117,17 +70,12 @@ public class RpcEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<Q
         return groupings;
     }
 
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(qname);
-        result = prime * result + Objects.hashCode(path);
+        result = prime * result + Objects.hashCode(getQName());
+        result = prime * result + Objects.hashCode(getPath());
         return result;
     }
 
@@ -143,7 +91,7 @@ public class RpcEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<Q
             return false;
         }
         final RpcEffectiveStatementImpl other = (RpcEffectiveStatementImpl) obj;
-        return Objects.equals(qname, other.qname) && Objects.equals(path, other.path);
+        return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
     }
 
     @Override
@@ -151,9 +99,9 @@ public class RpcEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<Q
         StringBuilder sb = new StringBuilder(RpcEffectiveStatementImpl.class.getSimpleName());
         sb.append("[");
         sb.append("qname=");
-        sb.append(qname);
+        sb.append(getQName());
         sb.append(", path=");
-        sb.append(path);
+        sb.append(getPath());
         sb.append(", input=");
         sb.append(input);
         sb.append(", output=");
index 73e892f95870422b7f15bf25a4b605675b7526b3..8fc88c605b613804eeffba04e1dbb9fdd7a0cecd 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class StatusEffectiveStatementImpl extends EffectiveStatementBase<Status, StatusStatement> {
+public final class StatusEffectiveStatementImpl extends EffectiveStatementBase<Status, StatusStatement> {
     public StatusEffectiveStatementImpl(final StmtContext<Status, StatusStatement, ?> ctx) {
         super(ctx);
     }
index b3af3c8c0b0b47915356440588e8a130412e9da1..64b0bcbf8048a64eb3ad4e0064054a437ef051c9 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
 import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import java.net.URI;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+
 import java.util.Objects;
-import java.util.Set;
-import org.opendaylight.yangtools.concepts.Immutable;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Deviation;
-import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
-import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
-import org.opendaylight.yangtools.yang.model.api.ModuleImport;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.UsesNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
-import org.opendaylight.yangtools.yang.model.util.ExtendedType;
-import org.opendaylight.yangtools.yang.model.util.ModuleImportImpl;
-import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
-import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource;
-import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class SubmoduleEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<String, SubmoduleStatement>
-        implements Module, Immutable {
+public final class SubmoduleEffectiveStatementImpl extends AbstractEffectiveModule<SubmoduleStatement> {
 
     private final QNameModule qNameModule;
-    private final String name;
-    private final String sourcePath;
-    private String prefix;
-    private String yangVersion;
-    private String organization;
-    private String contact;
-    private ImmutableSet<ModuleImport> imports;
-    private ImmutableSet<Module> submodules;
-    private ImmutableSet<FeatureDefinition> features;
-    private ImmutableSet<NotificationDefinition> notifications;
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableSet<RpcDefinition> rpcs;
-    private ImmutableSet<Deviation> deviations;
-    private ImmutableList<ExtensionDefinition> extensionNodes;
-    private ImmutableSet<IdentitySchemaNode> identities;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
-    private String source;
-    private ImmutableList<EffectiveStatement<?,?>> substatementsOfSubmodules;
-
-    private ImmutableMap<QName, DataSchemaNode> childNodes;
-    private ImmutableSet<GroupingDefinition> groupings;
-    private ImmutableSet<UsesNode> uses;
-    private ImmutableSet<TypeDefinition<?>> typeDefinitions;
-    private ImmutableSet<DataSchemaNode> publicChildNodes;
 
     public SubmoduleEffectiveStatementImpl(
             final StmtContext<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> ctx) {
         super(ctx);
 
-        name = argument();
-
         String belongsToModuleName = firstAttributeOf(ctx.declaredSubstatements(), BelongsToStatement.class);
-        final QNameModule belongsToModuleQName = ctx.getFromNamespace(
-                ModuleNameToModuleQName.class, belongsToModuleName);
+        final QNameModule belongsToModuleQName = ctx.getFromNamespace(ModuleNameToModuleQName.class,
+                belongsToModuleName);
         RevisionEffectiveStatementImpl submoduleRevision = firstEffective(RevisionEffectiveStatementImpl.class);
 
-        qNameModule = submoduleRevision == null
-                ? QNameModule.create(belongsToModuleQName.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV)
-                : QNameModule.create(belongsToModuleQName.getNamespace(), submoduleRevision.argument());
-
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof PrefixEffectiveStatementImpl) {
-                prefix = ((PrefixEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof YangVersionEffectiveStatementImpl) {
-                yangVersion = ((YangVersionEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof OrganizationEffectiveStatementImpl) {
-                organization = ((OrganizationEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ContactEffectiveStatementImpl) {
-                contact = ((ContactEffectiveStatementImpl) effectiveStatement).argument();
-            }
-        }
-
-        //:TODO init source
-//        source = ctx.getStatementSource().name();
-        sourcePath = ((DeclarationInTextSource) ctx.getStatementSourceReference()).getSourceName();
-
-        initSubmodules(ctx);
-        initSubstatementCollections(ctx);
-    }
-
-    private void initSubmodules(
-            final StmtContext<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> ctx) {
-        Map<String, ModuleIdentifier> includedSubmodulesMap = ctx
-                .getAllFromCurrentStmtCtxNamespace(IncludedSubmoduleNameToIdentifier.class);
-
-        if (includedSubmodulesMap == null || includedSubmodulesMap.isEmpty()) {
-            this.submodules = ImmutableSet.of();
-            this.substatementsOfSubmodules = ImmutableList.of();
-            return;
-        }
-
-        Collection<ModuleIdentifier> includedSubmodules = includedSubmodulesMap
-                .values();
-
-        Set<Module> submodulesInit = new HashSet<>();
-        List<EffectiveStatement<?,?>> substatementsOfSubmodulesInit = new LinkedList<>();
-        for (ModuleIdentifier submoduleIdentifier : includedSubmodules) {
-            Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> submoduleCtx = (Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>) ctx
-                    .getFromNamespace(SubmoduleNamespace.class,
-                            submoduleIdentifier);
-            SubmoduleEffectiveStatementImpl submodule = (SubmoduleEffectiveStatementImpl) submoduleCtx.buildEffective();
-            submodulesInit.add(submodule);
-            substatementsOfSubmodulesInit.addAll(submodule.effectiveSubstatements());
-        }
-
-        this.submodules = ImmutableSet.copyOf(submodulesInit);
-        this.substatementsOfSubmodules = ImmutableList.copyOf(substatementsOfSubmodulesInit);
-    }
-
-    private void initSubstatementCollections(final StmtContext<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> ctx) {
-        List<EffectiveStatement<?, ?>> effectiveSubstatements = new LinkedList<>();
-
-        effectiveSubstatements.addAll(effectiveSubstatements());
-        effectiveSubstatements.addAll(this.substatementsOfSubmodules);
-
-        List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
-        Set<AugmentationSchema> augmentationsInit = new HashSet<>();
-        Set<ModuleImport> importsInit = new HashSet<>();
-        Set<NotificationDefinition> notificationsInit = new HashSet<>();
-        Set<RpcDefinition> rpcsInit = new HashSet<>();
-        Set<Deviation> deviationsInit = new HashSet<>();
-        Set<IdentitySchemaNode> identitiesInit = new HashSet<>();
-        Set<FeatureDefinition> featuresInit = new HashSet<>();
-        List<ExtensionDefinition> extensionNodesInit = new LinkedList<>();
-
-        Map<QName, DataSchemaNode> mutableChildNodes = new LinkedHashMap<>();
-        Set<GroupingDefinition> mutableGroupings = new HashSet<>();
-        Set<UsesNode> mutableUses = new HashSet<>();
-        Set<TypeDefinition<?>> mutableTypeDefinitions = new LinkedHashSet<>();
-        Set<DataSchemaNode> mutablePublicChildNodes = new LinkedHashSet<>();
-
-        //:TODO add validation also for other node types
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
-                unknownNodesInit.add((UnknownSchemaNode) effectiveStatement);
-            }
-            if (effectiveStatement instanceof AugmentationSchema) {
-                augmentationsInit.add((AugmentationSchema) effectiveStatement);
-            }
-            if (effectiveStatement instanceof ModuleImport) {
-                importsInit.add((ModuleImport) effectiveStatement);
-            }
-            if (effectiveStatement instanceof NotificationDefinition) {
-                notificationsInit
-                        .add((NotificationDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof RpcDefinition) {
-                rpcsInit.add((RpcDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof Deviation) {
-                deviationsInit.add((Deviation) effectiveStatement);
-            }
-            if (effectiveStatement instanceof IdentitySchemaNode) {
-                identitiesInit.add((IdentitySchemaNode) effectiveStatement);
-            }
-            if (effectiveStatement instanceof FeatureDefinition) {
-                featuresInit.add((FeatureDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof ExtensionDefinition) {
-                extensionNodesInit
-                        .add((ExtensionDefinition) effectiveStatement);
-            }
-            if (effectiveStatement instanceof DataSchemaNode) {
-                DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
-                if (!mutableChildNodes.containsKey(dataSchemaNode.getQName())) {
-                    mutableChildNodes.put(dataSchemaNode.getQName(),
-                            dataSchemaNode);
-                    mutablePublicChildNodes.add(dataSchemaNode);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-            if (effectiveStatement instanceof UsesNode) {
-                UsesNode usesNode = (UsesNode) effectiveStatement;
-                if (!mutableUses.contains(usesNode)) {
-                    mutableUses.add(usesNode);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-            if (effectiveStatement instanceof TypeDefEffectiveStatementImpl) {
-                TypeDefEffectiveStatementImpl typeDef = (TypeDefEffectiveStatementImpl) effectiveStatement;
-                ExtendedType extendedType = typeDef.buildType();
-                if (!mutableTypeDefinitions.contains(extendedType)) {
-                    mutableTypeDefinitions.add(extendedType);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-            if (effectiveStatement instanceof GroupingDefinition) {
-                GroupingDefinition grp = (GroupingDefinition) effectiveStatement;
-                if (!mutableGroupings.contains(grp)) {
-                    mutableGroupings.add(grp);
-                } else {
-                    throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
-                }
-            }
-        }
-
-        this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
-        this.augmentations = ImmutableSet.copyOf(augmentationsInit);
-        this.imports = ImmutableSet.copyOf(resolveModuleImports(importsInit,ctx));
-        this.notifications = ImmutableSet.copyOf(notificationsInit);
-        this.rpcs = ImmutableSet.copyOf(rpcsInit);
-        this.deviations = ImmutableSet.copyOf(deviationsInit);
-        this.identities = ImmutableSet.copyOf(identitiesInit);
-        this.features = ImmutableSet.copyOf(featuresInit);
-        this.extensionNodes = ImmutableList.copyOf(extensionNodesInit);
-
-        this.childNodes = ImmutableMap.copyOf(mutableChildNodes);
-        this.groupings = ImmutableSet.copyOf(mutableGroupings);
-        this.publicChildNodes = ImmutableSet.copyOf(mutablePublicChildNodes);
-        this.typeDefinitions = ImmutableSet.copyOf(mutableTypeDefinitions);
-        this.uses = ImmutableSet.copyOf(mutableUses);
-    }
-
-    private static Set<ModuleImport> resolveModuleImports(
-            final Set<ModuleImport> importsInit,
-            final StmtContext<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> ctx) {
-        Set<ModuleImport> resolvedModuleImports = new LinkedHashSet<>();
-        for (ModuleImport moduleImport : importsInit) {
-            if (moduleImport.getRevision().equals(
-                    SimpleDateFormatUtil.DEFAULT_DATE_IMP)) {
-                QNameModule impModuleQName = Utils.getModuleQNameByPrefix(ctx,
-                        moduleImport.getPrefix());
-                if (!impModuleQName.getRevision().equals(
-                        SimpleDateFormatUtil.DEFAULT_DATE_REV)) {
-                    ModuleImport resolvedModuleImport = new ModuleImportImpl(
-                            moduleImport.getModuleName(),
-                            impModuleQName.getRevision(),
-                            moduleImport.getPrefix());
-                    resolvedModuleImports.add(resolvedModuleImport);
-                }
-            } else {
-                resolvedModuleImports.add(moduleImport);
-            }
-        }
-        return resolvedModuleImports;
-    }
-
-    @Override
-    public String getModuleSourcePath() {
-        return sourcePath;
-    }
-
-    @Override
-    public URI getNamespace() {
-        return qNameModule.getNamespace();
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public Date getRevision() {
-        return qNameModule.getRevision();
-    }
-
-    @Override
-    public String getPrefix() {
-        return prefix;
-    }
-
-    @Override
-    public String getYangVersion() {
-        return yangVersion;
-    }
-
-    @Override
-    public String getOrganization() {
-        return organization;
-    }
-
-    @Override
-    public String getContact() {
-        return contact;
-    }
-
-    @Override
-    public Set<ModuleImport> getImports() {
-        return imports;
-    }
-
-    @Override
-    public Set<Module> getSubmodules() {
-        return submodules;
-    }
-
-    @Override
-    public Set<FeatureDefinition> getFeatures() {
-        return features;
-    }
-
-    @Override
-    public Set<NotificationDefinition> getNotifications() {
-        return notifications;
-    }
-
-    @Override
-    public Set<AugmentationSchema> getAugmentations() {
-        return augmentations;
-    }
-
-    @Override
-    public Set<RpcDefinition> getRpcs() {
-        return rpcs;
-    }
-
-    @Override
-    public Set<Deviation> getDeviations() {
-        return deviations;
-    }
-
-    @Override
-    public List<ExtensionDefinition> getExtensionSchemaNodes() {
-        return extensionNodes;
-    }
-
-    @Override
-    public Set<IdentitySchemaNode> getIdentities() {
-        return identities;
-    }
-
-    @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
-    }
-
-    @Override
-    public final Set<TypeDefinition<?>> getTypeDefinitions() {
-        return typeDefinitions;
-    }
-
-    @Override
-    public final Set<DataSchemaNode> getChildNodes() {
-        return publicChildNodes;
-    }
-
-    @Override
-    public final Set<GroupingDefinition> getGroupings() {
-        return groupings;
-    }
-
-    @Override
-    public final DataSchemaNode getDataChildByName(final QName name) {
-        // Child nodes are keyed by their container name, so we can do a direct
-        // lookup
-        return childNodes.get(name);
-    }
-
-    @Override
-    public final DataSchemaNode getDataChildByName(final String name) {
-        for (DataSchemaNode node : childNodes.values()) {
-            if (node.getQName().getLocalName().equals(name)) {
-                return node;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public Set<UsesNode> getUses() {
-        return uses;
+        this.qNameModule = submoduleRevision == null ? QNameModule.create(belongsToModuleQName.getNamespace(),
+                SimpleDateFormatUtil.DEFAULT_DATE_REV) : QNameModule.create(belongsToModuleQName.getNamespace(),
+                submoduleRevision.argument());
     }
 
     @Override
-    public String getSource() {
-        return source;
+    public QNameModule getQNameModule() {
+        return qNameModule;
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(name);
-        result = prime * result + Objects.hashCode(yangVersion);
-        result = prime * result + qNameModule.hashCode();
+        result = prime * result + Objects.hashCode(getName());
+        result = prime * result + Objects.hashCode(getYangVersion());
+        result = prime * result + Objects.hashCode(qNameModule);
         return result;
     }
 
@@ -435,34 +63,16 @@ public class SubmoduleEffectiveStatementImpl extends AbstractEffectiveDocumented
             return false;
         }
         SubmoduleEffectiveStatementImpl other = (SubmoduleEffectiveStatementImpl) obj;
-        if (!Objects.equals(name, other.name)) {
+        if (!Objects.equals(getName(), other.getName())) {
             return false;
         }
         if (!qNameModule.equals(other.qNameModule)) {
             return false;
         }
-        if (!Objects.equals(yangVersion, other.yangVersion)) {
+        if (!Objects.equals(getYangVersion(), other.getYangVersion())) {
             return false;
         }
         return true;
     }
 
-    @Override
-    public String toString() {
-
-        StringBuilder sb = new StringBuilder(SubmoduleEffectiveStatementImpl.class.getSimpleName());
-        sb.append("[");
-        sb.append("name=").append(name);
-        sb.append(", namespace=").append(getNamespace());
-        sb.append(", revision=").append(getRevision());
-        sb.append(", prefix=").append(prefix);
-        sb.append(", yangVersion=").append(yangVersion);
-        sb.append("]");
-        return sb.toString();
-    }
-
-    @Override
-    public QNameModule getQNameModule() {
-        return qNameModule;
-    }
 }
index 4a806d64052b9a82f81ede3dd82799e014664bba..8cab8598eb370e9777e90105bce1e4705a904b48 100644 (file)
@@ -13,8 +13,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.yangtools.yang.common.QName;
-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.meta.EffectiveStatement;
@@ -36,106 +34,69 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.Patter
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.TypeDefinitionEffectiveBuilder;
 
-public class TypeDefEffectiveStatementImpl extends EffectiveStatementBase<QName, TypedefStatement>
-        implements TypeDefinition<TypeDefinition<?>>, TypeDefinitionEffectiveBuilder {
-
-    private final QName qName;
-    private final SchemaPath path;
-
+public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchemaNode<TypedefStatement> implements
+        TypeDefinition<TypeDefinition<?>>, TypeDefinitionEffectiveBuilder {
     private final TypeDefinition<?> baseType;
-
-    private String defaultValue;
-    private String units;
-
-    private String description;
-    private String reference;
-
-    private Status status;
-
+    private final String defaultValue;
+    private final String units;
     private final List<RangeConstraint> ranges;
     private final List<LengthConstraint> lengths;
     private final List<PatternConstraint> patterns;
     private final Integer fractionDigits;
-
     private ExtendedType extendedType = null;
 
     public TypeDefEffectiveStatementImpl(final StmtContext<QName, TypedefStatement, ?> ctx) {
         super(ctx);
-
-        qName = ctx.getStatementArgument();
-        path = Utils.getSchemaPath(ctx);
         baseType = parseBaseTypeFromCtx(ctx);
 
-        EffectiveStatementBase<?, ?> typeEffectiveStmt = firstSubstatementOfType(
-                TypeDefinition.class, EffectiveStatementBase.class);
+        UnitsEffectiveStatementImpl unitsStmt = firstEffective(UnitsEffectiveStatementImpl.class);
+        this.units = (unitsStmt == null) ? null : unitsStmt.argument();
+        DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
+        this.defaultValue = (defaultStmt == null) ? null : defaultStmt.argument();
 
+        EffectiveStatementBase<?, ?> typeEffectiveStmt = firstSubstatementOfType(TypeDefinition.class,
+                EffectiveStatementBase.class);
         ranges = initRanges(typeEffectiveStmt);
         lengths = initLengths(typeEffectiveStmt);
         patterns = initPatterns(typeEffectiveStmt);
 
-        //due to compatibility problems with original yang parser
-        //:FIXME try to find out better solution
-        if (typeEffectiveStmt.argument().equals(TypeUtils.DECIMAL64)
-                && ranges.isEmpty()) {
+        // due to compatibility problems with original yang parser
+        // :FIXME try to find out better solution
+        if (typeEffectiveStmt.argument().equals(TypeUtils.DECIMAL64) && ranges.isEmpty()) {
             fractionDigits = null;
         } else {
             fractionDigits = initFractionDigits(typeEffectiveStmt);
         }
-
-        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof DefaultEffectiveStatementImpl) {
-                defaultValue = ((DefaultEffectiveStatementImpl) effectiveStatement)
-                        .argument();
-            }
-            if (effectiveStatement instanceof UnitsEffectiveStatementImpl) {
-                units = ((UnitsEffectiveStatementImpl) effectiveStatement)
-                        .argument();
-            }
-            if (effectiveStatement instanceof DescriptionEffectiveStatementImpl) {
-                description = ((DescriptionEffectiveStatementImpl) effectiveStatement)
-                        .argument();
-            }
-            if (effectiveStatement instanceof ReferenceEffectiveStatementImpl) {
-                reference = ((ReferenceEffectiveStatementImpl) effectiveStatement)
-                        .argument();
-            }
-            if (effectiveStatement instanceof StatusEffectiveStatementImpl) {
-                status = ((StatusEffectiveStatementImpl) effectiveStatement)
-                        .argument();
-            }
-        }
     }
 
     private TypeDefinition<?> parseBaseTypeFromCtx(final StmtContext<QName, TypedefStatement, ?> ctx) {
 
-        TypeDefinition<?> baseType;
+        TypeDefinition<?> baseTypeInit;
 
-        QName baseTypeQName = Utils.qNameFromArgument(ctx, StmtContextUtils
-                .firstAttributeOf(ctx.declaredSubstatements(),
-                        TypeStatement.class));
+        QName baseTypeQName = Utils.qNameFromArgument(ctx,
+                StmtContextUtils.firstAttributeOf(ctx.declaredSubstatements(), TypeStatement.class));
 
         if (TypeUtils.isYangBuiltInTypeString(baseTypeQName.getLocalName())) {
-            baseType = TypeUtils.getYangPrimitiveTypeFromString(baseTypeQName
-                    .getLocalName());
-            if (baseType == null) {
-                baseType = firstSubstatementOfType(TypeDefinition.class);
-
-                //due to compatibility problems with original yang parser
-                //:FIXME try to find out better solution
-                if(baseType instanceof Decimal64SpecificationEffectiveStatementImpl) {
-                    Decimal64SpecificationEffectiveStatementImpl decimal64 = (Decimal64SpecificationEffectiveStatementImpl) baseType;
-                    if(decimal64.isExtended()) {
-                        baseType = decimal64.getBaseType();
+            baseTypeInit = TypeUtils.getYangPrimitiveTypeFromString(baseTypeQName.getLocalName());
+            if (baseTypeInit == null) {
+                baseTypeInit = firstSubstatementOfType(TypeDefinition.class);
+
+                // due to compatibility problems with original yang parser
+                // :FIXME try to find out better solution
+                if (baseTypeInit instanceof Decimal64SpecificationEffectiveStatementImpl) {
+                    Decimal64SpecificationEffectiveStatementImpl decimal64 = (Decimal64SpecificationEffectiveStatementImpl) baseTypeInit;
+                    if (decimal64.isExtended()) {
+                        baseTypeInit = decimal64.getBaseType();
                     }
                 }
             }
         } else {
             StmtContext<?, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> baseTypeCtx = ctx
                     .getParentContext().getFromNamespace(TypeNamespace.class, baseTypeQName);
-            baseType = (TypeDefEffectiveStatementImpl) baseTypeCtx.buildEffective();
+            baseTypeInit = (TypeDefEffectiveStatementImpl) baseTypeCtx.buildEffective();
         }
 
-        return baseType;
+        return baseTypeInit;
     }
 
     protected Integer initFractionDigits(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
@@ -147,13 +108,13 @@ public class TypeDefEffectiveStatementImpl extends EffectiveStatementBase<QName,
     protected List<RangeConstraint> initRanges(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
         final RangeEffectiveStatementImpl rangeConstraints = typeEffectiveStmt
                 .firstEffective(RangeEffectiveStatementImpl.class);
-        return rangeConstraints != null ? rangeConstraints.argument(): Collections.<RangeConstraint> emptyList();
+        return rangeConstraints != null ? rangeConstraints.argument() : Collections.<RangeConstraint> emptyList();
     }
 
     protected List<LengthConstraint> initLengths(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
         final LengthEffectiveStatementImpl lengthConstraints = typeEffectiveStmt
                 .firstEffective(LengthEffectiveStatementImpl.class);
-        return lengthConstraints != null ? lengthConstraints.argument(): Collections.<LengthConstraint> emptyList();
+        return lengthConstraints != null ? lengthConstraints.argument() : Collections.<LengthConstraint> emptyList();
     }
 
     protected List<PatternConstraint> initPatterns(final EffectiveStatementBase<?, ?> typeEffectiveStmt) {
@@ -186,36 +147,11 @@ public class TypeDefEffectiveStatementImpl extends EffectiveStatementBase<QName,
         return defaultValue;
     }
 
-    @Override
-    public QName getQName() {
-        return qName;
-    }
-
-    @Override
-    public SchemaPath getPath() {
-        return path;
-    }
-
     @Override
     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
         return Collections.emptyList();
     }
 
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public String getReference() {
-        return reference;
-    }
-
-    @Override
-    public Status getStatus() {
-        return status;
-    }
-
     public List<RangeConstraint> getRangeConstraints() {
         return ranges;
     }
@@ -242,14 +178,11 @@ public class TypeDefEffectiveStatementImpl extends EffectiveStatementBase<QName,
         Builder extendedTypeBuilder;
         if (baseType instanceof TypeDefinitionEffectiveBuilder) {
             TypeDefinitionEffectiveBuilder typeDefBaseType = (TypeDefinitionEffectiveBuilder) baseType;
-            extendedTypeBuilder = ExtendedType.builder(qName,
-                    typeDefBaseType.buildType(),
-                    Optional.fromNullable(description),
-                    Optional.fromNullable(reference), path);
+            extendedTypeBuilder = ExtendedType.builder(getQName(), typeDefBaseType.buildType(),
+                    Optional.fromNullable(getDescription()), Optional.fromNullable(getReference()), getPath());
         } else {
-            extendedTypeBuilder = ExtendedType.builder(qName, baseType,
-                    Optional.fromNullable(description),
-                    Optional.fromNullable(reference), path);
+            extendedTypeBuilder = ExtendedType.builder(getQName(), baseType, Optional.fromNullable(getDescription()),
+                    Optional.fromNullable(getReference()), getPath());
         }
 
         extendedTypeBuilder.defaultValue(defaultValue);
index 81af5e73f21bb168a9e374b915634c1fcf95dd1d..6e895efa1e78187ecde416e35f8e5a8256e91f5e 100644 (file)
@@ -13,12 +13,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class UniqueEffectiveStatementImpl extends
+public final class UniqueEffectiveStatementImpl extends
         EffectiveStatementBase<Collection<SchemaNodeIdentifier.Relative>, UniqueStatement> {
-
-    public UniqueEffectiveStatementImpl(
-            StmtContext<Collection<SchemaNodeIdentifier.Relative>, UniqueStatement, ?> ctx) {
+    public UniqueEffectiveStatementImpl(StmtContext<Collection<SchemaNodeIdentifier.Relative>, UniqueStatement, ?> ctx) {
         super(ctx);
     }
-
 }
index 4ac90946e3346bf5eb923e5643639cb0af876258..ecdb5133a23fb49ef3432aaafd07c44a852002e1 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class UnitsEffectiveStatementImpl extends EffectiveStatementBase<String, UnitsStatement> {
+public final class UnitsEffectiveStatementImpl extends EffectiveStatementBase<String, UnitsStatement> {
     public UnitsEffectiveStatementImpl(final StmtContext<String, UnitsStatement, ?> ctx) {
         super(ctx);
     }
index 41ff9c96e5b481fc9d5afb7e8ebb7e04a7606d98..f6f856b31113795b0e4c730b33f34fc4232fe915 100644 (file)
@@ -14,7 +14,6 @@ import java.util.Objects;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
@@ -24,21 +23,15 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class UnknownEffectiveStatementImpl extends EffectiveStatementBase<String, UnknownStatement<String>> implements
-        UnknownSchemaNode {
+public final class UnknownEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<String, UnknownStatement<String>>
+        implements UnknownSchemaNode {
 
-    private boolean augmenting;
-    private boolean addedByUses;
-    private UnknownSchemaNode original;
-
-    private QName maybeQNameArgument;
+    private final boolean addedByUses;
+    private final QName maybeQNameArgument;
     private final SchemaPath path;
-    private ExtensionDefinition extension;
-    private String description;
-    private String reference;
-    private final Status status = Status.CURRENT;
+    private final ExtensionDefinition extension;
     private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
-    private QName nodeType;
+    private final QName nodeType;
     private final String nodeParameter;
 
     public UnknownEffectiveStatementImpl(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
@@ -54,52 +47,41 @@ public class UnknownEffectiveStatementImpl extends EffectiveStatementBase<String
             extension = (ExtensionEffectiveStatementImpl) extensionInit.buildEffective();
             nodeType = extension.getQName();
         }
-        
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
 
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_AUGMENTATION)) {
-            augmenting = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)) {
-            addedByUses = augmenting = true;
+        // initCopyType
+        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
+        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES_AUGMENTATION)
+                || copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
+            this.addedByUses = true;
+        } else {
+            this.addedByUses = false;
         }
 
-        if (ctx.getOriginalCtx() != null) {
-            original = (UnknownSchemaNode) ctx.getOriginalCtx().buildEffective();
-        }
-        
         // FIXME: Remove following section after fixing 4380
-        if(original != null) {
-            maybeQNameArgument = original.getQName();
+        final UnknownSchemaNode original = ctx.getOriginalCtx() == null ? null : (UnknownSchemaNode) ctx
+                .getOriginalCtx().buildEffective();
+        if (original != null) {
+            this.maybeQNameArgument = original.getQName();
         } else {
+            QName maybeQNameArgumentInit = null;
             try {
-                maybeQNameArgument = Utils.qNameFromArgument(ctx, argument());
+                maybeQNameArgumentInit = Utils.qNameFromArgument(ctx, argument());
             } catch (IllegalArgumentException e) {
-                maybeQNameArgument = nodeType;
+                maybeQNameArgumentInit = nodeType;
             }
+            this.maybeQNameArgument = maybeQNameArgumentInit;
         }
         path = Utils.getSchemaPath(ctx.getParentContext()).createChild(maybeQNameArgument);
         nodeParameter = (ctx.rawStatementArgument() == null) ? "" : ctx.rawStatementArgument();
 
         // TODO init other fields (see Bug1412Test)
-
         for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof DescriptionEffectiveStatementImpl) {
-                description = ((DescriptionEffectiveStatementImpl) effectiveStatement).argument();
-            }
-            if (effectiveStatement instanceof ReferenceEffectiveStatementImpl) {
-                reference = ((ReferenceEffectiveStatementImpl) effectiveStatement).argument();
-            }
             if (effectiveStatement instanceof UnknownEffectiveStatementImpl) {
                 unknownNodes.add((UnknownEffectiveStatementImpl) effectiveStatement);
             }
         }
     }
 
-
     @Override
     public QName getNodeType() {
         return nodeType;
@@ -135,21 +117,6 @@ public class UnknownEffectiveStatementImpl extends EffectiveStatementBase<String
         return unknownNodes;
     }
 
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public String getReference() {
-        return reference;
-    }
-
-    @Override
-    public Status getStatus() {
-        return status;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
index f506bd091ccd0f24999f3c8e747f40024c276efe..421c11153c541bb3a08ef0f3f296ab8eb0d28988 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -33,34 +33,35 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
-public class UsesEffectiveStatementImpl extends EffectiveStatementBase<QName, UsesStatement> implements UsesNode {
-    private SchemaPath groupingPath;
-    private boolean addedByUses;
-    private ImmutableMap<SchemaPath, SchemaNode> refines;
-    private ImmutableSet<AugmentationSchema> augmentations;
-    private ImmutableList<UnknownSchemaNode> unknownNodes;
+public final class UsesEffectiveStatementImpl extends EffectiveStatementBase<QName, UsesStatement> implements UsesNode {
+    private final SchemaPath groupingPath;
+    private final boolean addedByUses;
+    private final Map<SchemaPath, SchemaNode> refines;
+    private final Set<AugmentationSchema> augmentations;
+    private final List<UnknownSchemaNode> unknownNodes;
 
-    public UsesEffectiveStatementImpl(final StmtContext<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> ctx) {
+    public UsesEffectiveStatementImpl(
+            final StmtContext<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> ctx) {
         super(ctx);
 
-        initGroupingPath(ctx);
-        initCopyType(ctx);
-        initSubstatementCollections();
-    }
-
-    private void initGroupingPath(final StmtContext<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> ctx) {
+        // initGroupingPath
         StmtContext<?, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> grpCtx = ctx.getFromNamespace(
                 GroupingNamespace.class, ctx.getStatementArgument());
         this.groupingPath = Utils.getSchemaPath(grpCtx);
-    }
 
-    private void initSubstatementCollections() {
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
+        // initCopyType
+        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
+        if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
+            addedByUses = true;
+        } else {
+            addedByUses = false;
+        }
 
+        // initSubstatementCollections
+        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
         List<UnknownSchemaNode> unknownNodesInit = new LinkedList<>();
         Set<AugmentationSchema> augmentationsInit = new HashSet<>();
         Map<SchemaPath, SchemaNode> refinesInit = new HashMap<>();
-
         for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
             if (effectiveStatement instanceof UnknownSchemaNode) {
                 UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
@@ -76,21 +77,11 @@ public class UsesEffectiveStatementImpl extends EffectiveStatementBase<QName, Us
                 refinesInit.put(identifier.asSchemaPath(), refineStmt.getRefineTargetNode());
             }
         }
-
         this.unknownNodes = ImmutableList.copyOf(unknownNodesInit);
         this.augmentations = ImmutableSet.copyOf(augmentationsInit);
         this.refines = ImmutableMap.copyOf(refinesInit);
     }
 
-    private void initCopyType(
-            final StmtContext<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> ctx) {
-
-        List<TypeOfCopy> copyTypesFromOriginal = ctx.getCopyHistory();
-        if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
-            addedByUses = true;
-        }
-    }
-
     @Override
     public SchemaPath getGroupingPath() {
         return groupingPath;
@@ -111,10 +102,6 @@ public class UsesEffectiveStatementImpl extends EffectiveStatementBase<QName, Us
         return addedByUses;
     }
 
-    void setAddedByUses(final boolean addedByUses) {
-        this.addedByUses = addedByUses;
-    }
-
     @Override
     public Map<SchemaPath, SchemaNode> getRefines() {
         return refines;
index 77d842a769318ee218ad73525cce496dd7178e5b..68254e6e2d3dba3238b58ed5b62e93d0ec86c745 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class ValueEffectiveStatementImpl extends EffectiveStatementBase<Integer, ValueStatement> {
+public final class ValueEffectiveStatementImpl extends EffectiveStatementBase<Integer, ValueStatement> {
     public ValueEffectiveStatementImpl(final StmtContext<Integer, ValueStatement, ?> ctx) {
         super(ctx);
     }
index 76f9b692ea36828030621ee60bd0d915d925a4a1..0f467171a0b8516de733c7895768dc912ec1a3dc 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class WhenEffectiveStatementImpl extends EffectiveStatementBase<RevisionAwareXPath, WhenStatement> {
+public final class WhenEffectiveStatementImpl extends EffectiveStatementBase<RevisionAwareXPath, WhenStatement> {
     public WhenEffectiveStatementImpl(final StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx) {
         super(ctx);
     }
index 34e38b4ea458adbb17d2fceb5c8ec20bac528c58..9d8c8fd0aae8b2d73146e38265fb8a9d025ed43c 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class YangVersionEffectiveStatementImpl extends EffectiveStatementBase<String, YangVersionStatement> {
+public final class YangVersionEffectiveStatementImpl extends EffectiveStatementBase<String, YangVersionStatement> {
     public YangVersionEffectiveStatementImpl(final StmtContext<String, YangVersionStatement, ?> ctx) {
         super(ctx);
     }
index f2d640c3db12c2a86135895213e5887afcfe73a5..8072d6fdb873a6ace1070d65c379d8e9939a4da6 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public class YinElementEffectiveStatementImpl extends EffectiveStatementBase<Boolean, YinElementStatement> {
+public final class YinElementEffectiveStatementImpl extends EffectiveStatementBase<Boolean, YinElementStatement> {
     public YinElementEffectiveStatementImpl(final StmtContext<Boolean, YinElementStatement, ?> ctx) {
         super(ctx);
     }
index 4fc93446eb3bb6e5ff5a8763a1c0b00e13c3c411..307551ebd3ded12901fb016f7f0db0b9ce8ffad9 100644 (file)
@@ -109,8 +109,8 @@ public class Decimal64SpecificationEffectiveStatementImpl extends
     }
 
     private List<RangeConstraint> initRanges() {
-        final RangeEffectiveStatementImpl rangeConstraints = firstEffective(RangeEffectiveStatementImpl.class);
-        return rangeConstraints != null ? rangeConstraints.argument() : Collections.<RangeConstraint> emptyList();
+        final RangeEffectiveStatementImpl rangeConstraintsStmt = firstEffective(RangeEffectiveStatementImpl.class);
+        return rangeConstraintsStmt != null ? rangeConstraintsStmt.argument() : Collections.<RangeConstraint> emptyList();
     }
 
     public boolean isExtended() {
index 6b9d11e2866f9b1c46106b09f2a6472fa23df3e4..7d443282ddddca866c37bb08f39c488c5eac33ea 100644 (file)
@@ -30,7 +30,6 @@ public class LeafrefSpecificationEffectiveStatementImpl extends
 
     public static final String LOCAL_NAME = "leafref";
     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, LOCAL_NAME);
-    private static final SchemaPath PATH = SchemaPath.create(true, QNAME);
     private static final String DESCRIPTION = "The leafref type is used to reference a particular leaf instance in the data tree.";
     private static final String REFERENCE = "https://tools.ietf.org/html/rfc6020#section-9.9";
     private static final String UNITS = "";