X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2FAbstractEffectiveModule.java;h=aab5cb9ac333835b953d68c5fee8a504e4a12408;hb=5d35db7723bb19c00955c580b21df9552de9fea0;hp=8de6d290a63c8c20c64466efdd7e216d0b27e506;hpb=3fb52b5ee8449944f233e8c277b2f689da6c433d;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index 8de6d290a6..aab5cb9ac3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -12,15 +12,13 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; +import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.ImmutableSet; -import java.net.URI; -import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -28,7 +26,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnqualifiedQName; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -37,8 +35,8 @@ 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.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -58,40 +56,29 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStateme import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta -public abstract class AbstractEffectiveModule, - E extends DataTreeAwareEffectiveStatement> extends - AbstractSchemaEffectiveDocumentedNode implements Module, - NotificationNodeContainerCompat { - private final String name; +public abstract class AbstractEffectiveModule, + E extends DataTreeAwareEffectiveStatement> + extends WithSubstatements + implements ModuleLike, DocumentedNodeMixin, + NotificationNodeContainerCompat { private final String prefix; - private final YangVersion yangVersion; - private final String organization; - private final String contact; - private final ImmutableSet imports; - private final ImmutableSet features; - private final @NonNull ImmutableSet notifications; - private final ImmutableSet augmentations; - private final ImmutableSet rpcs; - private final ImmutableSet deviations; - private final ImmutableList extensionNodes; - private final ImmutableSet identities; private final ImmutableSet groupings; private final ImmutableSet uses; private final ImmutableSet> typeDefinitions; - private final ImmutableSet publicChildNodes; - private final SemVer semanticVersion; private final ImmutableMap> schemaTreeNamespace; - protected AbstractEffectiveModule( - final @NonNull StmtContext> ctx, - final @NonNull String prefix) { - super(ctx); + protected AbstractEffectiveModule(final D declared, + final StmtContext> ctx, + final ImmutableList> substatements, final String prefix) { + super(declared, ctx, substatements); // This check is rather weird, but comes from our desire to lower memory footprint while providing both // EffectiveStatements and SchemaNode interfaces -- which do not overlap completely where child lookups are @@ -103,59 +90,13 @@ public abstract class AbstractEffectiveModule augmentationsInit = new LinkedHashSet<>(); - final Set importsInit = new LinkedHashSet<>(); - final Set notificationsInit = new LinkedHashSet<>(); - final Set rpcsInit = new LinkedHashSet<>(); - final Set deviationsInit = new LinkedHashSet<>(); - final Set identitiesInit = new LinkedHashSet<>(); - final Set featuresInit = new LinkedHashSet<>(); - final List extensionNodesInit = new ArrayList<>(); final Set mutableGroupings = new LinkedHashSet<>(); final Set mutableUses = new LinkedHashSet<>(); final Set> mutableTypeDefinitions = new LinkedHashSet<>(); - final Set mutablePublicChildNodes = new LinkedHashSet<>(); for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { - if (effectiveStatement instanceof AugmentationSchemaNode) { - augmentationsInit.add((AugmentationSchemaNode) 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) { - mutablePublicChildNodes.add((DataSchemaNode) effectiveStatement); - } if (effectiveStatement instanceof UsesNode && !mutableUses.add((UsesNode) effectiveStatement)) { throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement); } @@ -171,34 +112,19 @@ public abstract class AbstractEffectiveModule getRevision() { - return getQNameModule().getRevision(); + return argument().getLocalName(); } @Override @@ -208,57 +134,58 @@ public abstract class AbstractEffectiveModule getOrganization() { - return Optional.ofNullable(organization); + return findFirstEffectiveSubstatementArgument(OrganizationEffectiveStatement.class); } @Override public Optional getContact() { - return Optional.ofNullable(contact); + return findFirstEffectiveSubstatementArgument(ContactEffectiveStatement.class); } @Override - public Collection getImports() { - return imports; + public Collection getImports() { + return filterSubstatements(ModuleImport.class); } @Override - public Collection getFeatures() { - return features; + public Collection getFeatures() { + return filterSubstatements(FeatureDefinition.class); } @Override - public Collection getNotifications() { - return notifications; + public Collection getNotifications() { + return filterSubstatements(NotificationDefinition.class); } @Override - public Collection getAugmentations() { - return augmentations; + public Collection getAugmentations() { + return filterSubstatements(AugmentationSchemaNode.class); } @Override - public Collection getRpcs() { - return rpcs; + public Collection getRpcs() { + return filterSubstatements(RpcDefinition.class); } @Override - public Collection getDeviations() { - return deviations; + public Collection getDeviations() { + return filterSubstatements(Deviation.class); } @Override - public Collection getExtensionSchemaNodes() { - return extensionNodes; + public Collection getExtensionSchemaNodes() { + return filterSubstatements(ExtensionDefinition.class); } @Override - public Collection getIdentities() { - return identities; + public Collection getIdentities() { + return filterSubstatements(IdentitySchemaNode.class); } @Override @@ -268,7 +195,7 @@ public abstract class AbstractEffectiveModule getChildNodes() { - return publicChildNodes; + return filterSubstatements(DataSchemaNode.class); } @Override @@ -290,7 +217,7 @@ public abstract class AbstractEffectiveModule getSemanticVersion() { - return Optional.ofNullable(semanticVersion); + return findFirstEffectiveSubstatementArgument(OpenConfigVersionEffectiveStatement.class); } @Override @@ -306,11 +233,11 @@ public abstract class AbstractEffectiveModule @NonNull Collection filterSubstatements(final Class type) { + return (Collection) Collections2.filter(effectiveSubstatements(), type::isInstance); + } }