<artifactId>odlext-model-api</artifactId>
<version>2.0.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>odlext-parser-support</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <parent>
+ <groupId>org.opendaylight.odlparent</groupId>
+ <artifactId>bundle-parent</artifactId>
+ <version>2.0.5</version>
+ <relativePath/>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>odlext-parser-support</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>${project.artifactId}</name>
+ <description>OpenDaylight yang-ext parser support</description>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yangtools-artifacts</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ <scope>import</scope>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>concepts</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>yang-common</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>odlext-model-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>yang-parser-rfc7950</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <configuration>
+ <propertyExpansion>checkstyle.violationSeverity=error</propertyExpansion>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <!--
+ Maven Site Configuration
+
+ The following configuration is necessary for maven-site-plugin to
+ correctly identify the correct deployment path for OpenDaylight Maven
+ sites.
+ -->
+ <url>${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/</url>
+
+ <distributionManagement>
+ <site>
+ <id>opendaylight-site</id>
+ <url>${nexus.site.url}/${project.artifactId}/</url>
+ </site>
+ </distributionManagement>
+</project>
* 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.odlext.stmt;
+package org.opendaylight.yangtools.odlext.parser;
import com.google.common.annotations.VisibleForTesting;
import java.util.Objects;
* 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.odlext.namespace;
+package org.opendaylight.yangtools.odlext.parser;
import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
/**
public interface AnyxmlSchemaLocationNamespace extends IdentifierNamespace<StatementDefinition,
Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>>> {
-
+ NamespaceBehaviour<?, ?, ?> BEHAVIOR = NamespaceBehaviour.treeScoped(AnyxmlSchemaLocationNamespace.class);
}
* 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.odlext.stmt;
+package org.opendaylight.yangtools.odlext.parser;
import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
* 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.odlext.stmt;
+package org.opendaylight.yangtools.odlext.parser;
import static org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements.ANYXML_SCHEMA_LOCATION;
import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.parser.odlext.namespace.AnyxmlSchemaLocationNamespace;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
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.meta.SubstatementValidator;
-public final class AnyxmlSchemaLocationSupport
+public final class AnyxmlSchemaLocationStatementSupport
extends AbstractStatementSupport<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>> {
- private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
- ANYXML_SCHEMA_LOCATION).build();
- private static final AnyxmlSchemaLocationSupport INSTANCE = new AnyxmlSchemaLocationSupport();
+ private static final AnyxmlSchemaLocationStatementSupport INSTANCE =
+ new AnyxmlSchemaLocationStatementSupport(ANYXML_SCHEMA_LOCATION);
- private AnyxmlSchemaLocationSupport() {
- super(ANYXML_SCHEMA_LOCATION);
+ private final SubstatementValidator validator;
+
+ private AnyxmlSchemaLocationStatementSupport(final StatementDefinition definition) {
+ super(definition);
+ validator = SubstatementValidator.builder(definition).build();
}
- public static AnyxmlSchemaLocationSupport getInstance() {
+ public static AnyxmlSchemaLocationStatementSupport getInstance() {
return INSTANCE;
}
@Override
protected SubstatementValidator getSubstatementValidator() {
- return SUBSTATEMENT_VALIDATOR;
+ return validator;
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.odlext.parser;
+
+import java.util.Map;
+import java.util.Optional;
+import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.SchemaNodeIdentifierBuildNamespace;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml.AnyxmlStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ForwardingStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+
+public final class AnyxmlStatementSupportOverride
+ extends ForwardingStatementSupport<QName, AnyxmlStatement, AnyxmlEffectiveStatement> {
+ private static final AnyxmlStatementSupportOverride INSTANCE = new AnyxmlStatementSupportOverride();
+
+ private final StatementSupport<QName, AnyxmlStatement, AnyxmlEffectiveStatement> delegate =
+ new AnyxmlStatementSupport();
+
+ private AnyxmlStatementSupportOverride() {
+
+ }
+
+ public static AnyxmlStatementSupportOverride getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ protected StatementSupport<QName, AnyxmlStatement, AnyxmlEffectiveStatement> delegate() {
+ return delegate;
+ }
+
+ @Override
+ public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
+ // FIXME: this is not entirely accurate?
+ return delegate.getEffectiveRepresentationClass();
+ }
+
+ @Override
+ public AnyxmlEffectiveStatement createEffective(
+ final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx) {
+ final AnyxmlEffectiveStatement delegateStatement = delegate.createEffective(ctx);
+ final Map<StatementDefinition, Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
+ EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>>> schemaLocations =
+ ctx.getAllFromCurrentStmtCtxNamespace(AnyxmlSchemaLocationNamespace.class);
+ if (schemaLocations != null && !schemaLocations.isEmpty()) {
+ final SchemaNodeIdentifier anyXmlSchemaNodeIdentifier = schemaLocations.values().iterator().next()
+ .getStatementArgument();
+ final Optional<ContainerSchemaNode> anyXmlSchema = getAnyXmlSchema(ctx, anyXmlSchemaNodeIdentifier);
+ if (anyXmlSchema.isPresent()) {
+ return new YangModeledAnyxmlEffectiveStatementImpl(delegateStatement, anyXmlSchema.get());
+ }
+ }
+
+ return delegateStatement;
+ }
+
+ private static Optional<ContainerSchemaNode> getAnyXmlSchema(
+ final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx,
+ final SchemaNodeIdentifier contentSchemaPath) {
+ return SchemaNodeIdentifierBuildNamespace.findNode(ctx.getRoot(), contentSchemaPath)
+ .map(StmtContext::buildEffective)
+ .filter(ContainerSchemaNode.class::isInstance).map(ContainerSchemaNode.class::cast);
+ }
+}
--- /dev/null
+/*
+ * 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.odlext.parser;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+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.ForwardingEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
+
+final class YangModeledAnyxmlEffectiveStatementImpl
+ extends ForwardingEffectiveStatement<QName, AnyxmlStatement, AnyxmlEffectiveStatement>
+ implements YangModeledAnyXmlSchemaNode, AnyxmlEffectiveStatement {
+ private final AnyxmlEffectiveStatement delegate;
+ private final ContainerSchemaNode contentSchema;
+
+ YangModeledAnyxmlEffectiveStatementImpl(final AnyxmlEffectiveStatement delegate,
+ final ContainerSchemaNode contentSchema) {
+ this.delegate = requireNonNull(delegate);
+ this.contentSchema = requireNonNull(contentSchema);
+ }
+
+ @Override
+ protected AnyxmlEffectiveStatement delegate() {
+ return delegate;
+ }
+
+ @Nonnull
+ @Override
+ public ContainerSchemaNode getSchemaOfAnyXmlData() {
+ return contentSchema;
+ }
+
+ private AnyXmlSchemaNode delegateSchemaNode() {
+ return (AnyXmlSchemaNode) delegate;
+ }
+
+ @Override
+ public boolean isConfiguration() {
+ return delegateSchemaNode().isConfiguration();
+ }
+
+ @Override
+ public QName getQName() {
+ return delegateSchemaNode().getQName();
+ }
+
+ @Override
+ public SchemaPath getPath() {
+ return delegateSchemaNode().getPath();
+ }
+
+ @Override
+ public Status getStatus() {
+ return delegateSchemaNode().getStatus();
+ }
+
+ @Override
+ public Optional<String> getDescription() {
+ return delegateSchemaNode().getDescription();
+ }
+
+ @Override
+ public Optional<String> getReference() {
+ return delegateSchemaNode().getReference();
+ }
+
+ @Override
+ public boolean isAugmenting() {
+ return delegateSchemaNode().isAugmenting();
+ }
+
+ @Override
+ public boolean isAddedByUses() {
+ return delegateSchemaNode().isAddedByUses();
+ }
+
+ @Override
+ public Optional<RevisionAwareXPath> getWhenCondition() {
+ return delegateSchemaNode().getWhenCondition();
+ }
+
+ @Override
+ public boolean isMandatory() {
+ return delegateSchemaNode().isConfiguration();
+ }
+
+ @Override
+ public Collection<MustDefinition> getMustConstraints() {
+ return delegateSchemaNode().getMustConstraints();
+ }
+
+ @Override
+ public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+ return delegateSchemaNode().getUnknownSchemaNodes();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Objects.hashCode(getQName());
+ result = prime * result + Objects.hashCode(getPath());
+ return result;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ YangModeledAnyxmlEffectiveStatementImpl other = (YangModeledAnyxmlEffectiveStatementImpl) obj;
+ return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
+ }
+
+ @Override
+ public String toString() {
+ return YangModeledAnyxmlEffectiveStatementImpl.class.getSimpleName() + "["
+ + "qname=" + getQName()
+ + ", path=" + getPath()
+ + "]";
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies s.r.o. 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
+ */
+/**
+ * YANG parser support for OpenDaylight extensions as defined in yang-ext.yang.
+ *
+ * <p>
+ * To access this extension, add {@link org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationStatementSupport},
+ * {@link org.opendaylight.yangtools.odlext.parser.AnyxmlStatementSupportOverride} and
+ * {@link org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationNamespace#BEHAVIOR} to the reactor.
+ *
+ * @author Robert Varga
+ */
+package org.opendaylight.yangtools.odlext.parser;
* 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.stmt;
+package org.opendaylight.yangtools.odlext.parser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.net.URI;
import java.util.List;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
-import org.opendaylight.yangtools.yang.parser.impl.DefaultReactors;
-import org.opendaylight.yangtools.yang.parser.odlext.stmt.AnyxmlSchemaLocationEffectiveStatementImpl;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
public class Bug3874ExtensionTest {
+ private static CrossSourceStatementReactor reactor;
+
+ @BeforeClass
+ public static void createReactor() {
+ reactor = RFC7950Reactors.vanillaReactorBuilder()
+ .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+ AnyxmlSchemaLocationStatementSupport.getInstance())
+ .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationNamespace.BEHAVIOR)
+ .overrideStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+ AnyxmlStatementSupportOverride.getInstance())
+ .build();
+ }
@Test
public void test() throws Exception {
- SchemaContext context = DefaultReactors.defaultReactor().newBuild()
+ SchemaContext context = reactor.newBuild()
.addSource(YangStatementStreamSource.create(YangTextSchemaSource.forResource("/bugs/bug3874/foo.yang")))
.addSource(YangStatementStreamSource.create(
YangTextSchemaSource.forResource("/bugs/bug3874/yang-ext.yang")))
<!-- OpenDaylight messy extensions -->
<module>odlext-model-api</module>
+ <module>odlext-parser-support</module>
<!-- Metadata (annotation) metamodel support -->
<module>rfc7952-model-api</module>
<groupId>${project.groupId}</groupId>
<artifactId>odlext-model-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>odlext-parser-support</artifactId>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>openconfig-model-api</artifactId>
*/
package org.opendaylight.yangtools.yang.parser.impl;
-import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.treeScoped;
-
import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationNamespace;
+import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationStatementSupport;
+import org.opendaylight.yangtools.odlext.parser.AnyxmlStatementSupportOverride;
import org.opendaylight.yangtools.openconfig.parser.EncryptedValueStatementSupport;
import org.opendaylight.yangtools.openconfig.parser.HashedValueStatementSupport;
import org.opendaylight.yangtools.rfc7952.parser.AnnotationStatementSupport;
import org.opendaylight.yangtools.rfc8040.parser.YangDataStatementSupport;
-import org.opendaylight.yangtools.yang.parser.odlext.namespace.AnyxmlSchemaLocationNamespace;
-import org.opendaylight.yangtools.yang.parser.odlext.stmt.AnyxmlSchemaLocationSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.CustomCrossSourceStatementReactorBuilder;
import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
public static CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() {
return RFC7950Reactors.defaultReactorBuilder()
// AnyxmlSchemaLocation support
- .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationSupport.getInstance())
- .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION,
- treeScoped(AnyxmlSchemaLocationNamespace.class))
+ .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+ AnyxmlSchemaLocationStatementSupport.getInstance())
+ .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationNamespace.BEHAVIOR)
+ .overrideStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+ AnyxmlStatementSupportOverride.getInstance())
// RFC7952 annotation support
.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance())
<artifactId>yang-data-util</artifactId>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>odlext-model-api</artifactId>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>openconfig-model-api</artifactId>
</excludePackageNames>
</configuration>
</plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Export-Package>
- {local-packages},
- org.opendaylight.yangtools.yang.parser.impl.*,
- ;-split-package:=error
- </Export-Package>
- </instructions>
- </configuration>
- </plugin>
</plugins>
</build>
import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.MustDefinition;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
private final AnyXmlSchemaNode original;
private final boolean mandatory;
- AnyxmlEffectiveStatementImpl(
- final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
+ AnyxmlEffectiveStatementImpl(final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx) {
super(ctx);
this.original = (AnyXmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
mandatory = findFirstEffectiveSubstatementArgument(MandatoryEffectiveStatement.class).orElse(Boolean.FALSE)
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
-import java.util.Map;
-import java.util.Optional;
-import org.opendaylight.yangtools.odlext.model.api.AnyxmlSchemaLocationStatement;
import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.parser.odlext.namespace.AnyxmlSchemaLocationNamespace;
import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
-import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.SchemaNodeIdentifierBuildNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
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.meta.StmtContextUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-public final class AnyxmlStatementSupport extends
- AbstractQNameStatementSupport<AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> {
+public final class AnyxmlStatementSupport
+ extends AbstractQNameStatementSupport<AnyxmlStatement, AnyxmlEffectiveStatement> {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.ANYXML)
.addOptional(YangStmtMapping.CONFIG)
}
@Override
- public void onStatementAdded(final Mutable<QName, AnyxmlStatement,
- EffectiveStatement<QName, AnyxmlStatement>> stmt) {
+ public void onStatementAdded(final Mutable<QName, AnyxmlStatement, AnyxmlEffectiveStatement> stmt) {
stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
}
}
@Override
- public EffectiveStatement<QName, AnyxmlStatement> createEffective(
- final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
- final Map<StatementDefinition, Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
- EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>>> schemaLocations =
- ctx.getAllFromCurrentStmtCtxNamespace(AnyxmlSchemaLocationNamespace.class);
- if (schemaLocations != null && !schemaLocations.isEmpty()) {
- final SchemaNodeIdentifier anyXmlSchemaNodeIdentifier = schemaLocations.values().iterator().next()
- .getStatementArgument();
- final Optional<ContainerSchemaNode> anyXmlSchema = getAnyXmlSchema(ctx, anyXmlSchemaNodeIdentifier);
- if (anyXmlSchema.isPresent()) {
- return new YangModeledAnyXmlEffectiveStatementImpl(ctx, anyXmlSchema.get());
- }
- }
+ public AnyxmlEffectiveStatement createEffective(
+ final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx) {
return new AnyxmlEffectiveStatementImpl(ctx);
}
- private static Optional<ContainerSchemaNode> getAnyXmlSchema(
- final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx,
- final SchemaNodeIdentifier contentSchemaPath) {
- return SchemaNodeIdentifierBuildNamespace.findNode(ctx.getRoot(), contentSchemaPath)
- .map(StmtContext::buildEffective)
- .filter(ContainerSchemaNode.class::isInstance).map(ContainerSchemaNode.class::cast);
- }
-
@Override
protected SubstatementValidator getSubstatementValidator() {
return SUBSTATEMENT_VALIDATOR;
+++ /dev/null
-/*
- * 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.rfc7950.stmt.anyxml;
-
-import static java.util.Objects.requireNonNull;
-
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-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;
-
-final class YangModeledAnyXmlEffectiveStatementImpl extends AnyxmlEffectiveStatementImpl
- implements YangModeledAnyXmlSchemaNode {
-
- private final ContainerSchemaNode schemaOfAnyXmlData;
-
- YangModeledAnyXmlEffectiveStatementImpl(final StmtContext<QName, AnyxmlStatement,
- EffectiveStatement<QName, AnyxmlStatement>> ctx, final ContainerSchemaNode contentSchema) {
- super(ctx);
- schemaOfAnyXmlData = requireNonNull(contentSchema);
- }
-
- @Nonnull
- @Override
- public ContainerSchemaNode getSchemaOfAnyXmlData() {
- return schemaOfAnyXmlData;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + Objects.hashCode(getQName());
- result = prime * result + Objects.hashCode(getPath());
- return result;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
-
- YangModeledAnyXmlEffectiveStatementImpl other = (YangModeledAnyXmlEffectiveStatementImpl) obj;
- return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
- }
-
- @Override
- public String toString() {
- return YangModeledAnyXmlEffectiveStatementImpl.class.getSimpleName() + "["
- + "qname=" + getQName()
- + ", path=" + getPath()
- + "]";
- }
-}