<artifactId>ietf-netconf-monitoring-extension</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
</dependencies>
</project>
<artifactId>ietf-restconf</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<type>xml</type>
<classifier>features</classifier>
</dependency>
- <dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
- <version>1.5.0-SNAPSHOT</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>ietf-inet-types-2013-07-15</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
package org.opendaylight.netconf.mdsal.yang.library;
-import com.google.common.collect.Lists;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.sal.core.api.model.SchemaService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesStateBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.OptionalRevision;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module.ConformanceType;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.Submodules;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.SubmodulesBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.Submodule;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.SubmoduleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module.ConformanceType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.Submodule;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.model.api.Module;
}
private ModulesState createModuleStateFromModules(final Set<Module> modules) {
- final ModulesStateBuilder modulesStateBuilder = new ModulesStateBuilder();
- final List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list
- .Module> moduleList =
- Lists.newArrayList();
-
- for (final Module module : modules) {
- moduleList.add(createModuleEntryFromModule(module));
- }
-
- return modulesStateBuilder.setModule(moduleList).setModuleSetId(String.valueOf(moduleSetId.getAndIncrement()))
+ return new ModulesStateBuilder()
+ .setModule(modules.stream().map(this::createModuleEntryFromModule).collect(Collectors.toList()))
+ .setModuleSetId(String.valueOf(moduleSetId.getAndIncrement()))
.build();
}
- private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module
+ private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module
createModuleEntryFromModule(final Module module) {
- final ModuleBuilder moduleBuilder = new ModuleBuilder();
-
- // TODO Conformance type is always set to Implement value, but it should it really be like this?
- // TODO Add also deviations and features lists to module entries
- moduleBuilder.setName(new YangIdentifier(module.getName()));
-
- module.getQNameModule().getRevision().ifPresent(rev -> moduleBuilder.setRevision(
- new OptionalRevision(rev.toString())));
-
- return moduleBuilder.setNamespace(new Uri(module.getNamespace().toString()))
+ return new ModuleBuilder()
+ .setName(new YangIdentifier(module.getName()))
+ .setRevision(RevisionUtils.fromYangCommon(module.getQNameModule().getRevision()))
+ .setNamespace(new Uri(module.getNamespace().toString()))
+ // FIXME: Conformance type is always set to Implement value, but it should it really be like this?
.setConformanceType(ConformanceType.Implement)
- .setSubmodules(createSubmodulesForModule(module))
+ .setSubmodule(createSubmodulesForModule(module))
+ // FIXME: Add also deviations and features lists to module entries
.build();
}
- private static Submodules createSubmodulesForModule(final Module module) {
- final List<Submodule> submodulesList = Lists.newArrayList();
- for (final Module subModule : module.getSubmodules()) {
- final SubmoduleBuilder subModuleEntryBuilder = new SubmoduleBuilder()
- .setName(new YangIdentifier(subModule.getName()));
- subModule.getQNameModule().getRevision().ifPresent(
- rev -> subModuleEntryBuilder.setRevision(new OptionalRevision(rev.toString())));
- submodulesList.add(subModuleEntryBuilder.build());
- }
-
- return new SubmodulesBuilder().setSubmodule(submodulesList).build();
+ private static List<Submodule> createSubmodulesForModule(final Module module) {
+ return module.getSubmodules().stream().map(subModule -> new SubmoduleBuilder()
+ .setName(new YangIdentifier(subModule.getName()))
+ .setRevision(RevisionUtils.fromYangCommon(subModule.getQNameModule().getRevision()))
+ .build()).collect(Collectors.toList());
}
}
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import com.google.common.collect.Lists;
+import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.Futures;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.sal.core.api.model.SchemaService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesStateBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.OptionalRevision;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.SubmodulesBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.Submodule;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.SubmoduleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionIdentifier;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.CommonLeafs.Revision;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.Submodule;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
private static ModulesState createTestModuleState() {
Submodule sub = new SubmoduleBuilder().setName(new YangIdentifier("test-submodule"))
+ .setRevision(RevisionUtils.emptyRevision())
.build();
Module module = new ModuleBuilder().setName(new YangIdentifier("test-module"))
.setNamespace(new Uri("test:namespace"))
- .setRevision(new OptionalRevision("2013-07-22"))
- .setSubmodules(new SubmodulesBuilder().setSubmodule(Lists.newArrayList(sub)).build())
+ .setRevision(new Revision(new RevisionIdentifier("2013-07-22")))
+ .setSubmodule(ImmutableList.of(sub))
.setConformanceType(Module.ConformanceType.Implement)
.build();
return new ModulesStateBuilder().setModuleSetId("0")
- .setModule(Lists.newArrayList(module)).build();
+ .setModule(ImmutableList.of(module)).build();
}
}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright (c) 2016 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">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>netconf-parent</artifactId>
- <version>1.5.0-SNAPSHOT</version>
- <relativePath>../../netconf-parent</relativePath>
- </parent>
-
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
- <version>1.5.0-SNAPSHOT</version>
- <name>${project.artifactId}</name>
- <packaging>bundle</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-yang-types-20130715</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-inet-types-2013-07-15</artifactId>
- </dependency>
- </dependencies>
-</project>
+++ /dev/null
-package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409;
-
-
-/**
- * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation.
- * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32).
- *
- * The reason behind putting it under src/main/java is:
- * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent
- * loss of user code.
- *
- */
-public class OptionalRevisionBuilder {
-
- public static OptionalRevision getDefaultInstance(java.lang.String defaultValue) {
- throw new java.lang.UnsupportedOperationException("Not yet implemented");
- }
-
-}
+++ /dev/null
-module ietf-yang-library {
- namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
- prefix "yanglib";
-
- import ietf-yang-types {
- prefix yang;
- }
- import ietf-inet-types {
- prefix inet;
- }
-
- organization
- "IETF NETCONF (Network Configuration) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netconf/>
- WG List: <mailto:netconf@ietf.org>
-
- WG Chair: Mehmet Ersue
- <mailto:mehmet.ersue@nsn.com>
-
- WG Chair: Mahesh Jethanandani
- <mailto:mjethanandani@gmail.com>
-
- Editor: Andy Bierman
- <mailto:andy@yumaworks.com>
-
- Editor: Martin Bjorklund
- <mailto:mbj@tail-f.com>
-
- Editor: Kent Watsen
- <mailto:kwatsen@juniper.net>";
-
- description
- "This module contains monitoring information about the YANG
- modules and submodules that are used within a YANG-based
- server.
-
- Copyright (c) 2016 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
-
- // RFC Ed.: replace XXXX with actual RFC number and remove this
- // note.
-
- // RFC Ed.: remove this note
- // Note: extracted from draft-ietf-netconf-yang-library-06.txt
-
- // RFC Ed.: update the date below with the date of RFC publication
- // and remove this note.
- revision 2016-04-09 {
- description
- "Initial revision.";
- reference
- "RFC XXXX: YANG Module Library.";
- }
-
- /*
- * Typedefs
- */
-
- // FIXME inline this union after https://bugs.opendaylight.org/show_bug.cgi?id=5826 is fixed
- typedef optional-revision {
- type union {
- type revision-identifier;
- type string { length 0; }
- }
- description
- "The YANG module or submodule revision date.
- A zero-length string is used if no revision statement
- is present in the YANG module or submodule.";
- }
-
- typedef revision-identifier {
- type string {
- pattern '\d{4}-\d{2}-\d{2}';
- }
- description
- "Represents a specific date in YYYY-MM-DD format.";
- }
-
- /*
- * Groupings
- */
-
- grouping module-list {
- description
- "The module data structure is represented as a grouping
- so it can be reused in configuration or another monitoring
- data structure.";
-
- grouping common-leafs {
- description
- "Common parameters for YANG modules and submodules.";
-
- leaf name {
- type yang:yang-identifier;
- description
- "The YANG module or submodule name.";
- }
- leaf revision {
- type optional-revision;
- }
- }
-
- grouping schema-leaf {
- description
- "Common schema leaf parameter for modules and submodules.";
-
- leaf schema {
- type inet:uri;
- description
- "Contains a URL that represents the YANG schema
- resource for this module or submodule.
-
- This leaf will only be present if there is a URL
- available for retrieval of the schema for this entry.";
- }
- }
-
- list module {
- key "name revision";
- description
- "Each entry represents one revision of one module
- currently supported by the server.";
-
- uses common-leafs;
- uses schema-leaf;
-
- leaf namespace {
- type inet:uri;
- mandatory true;
- description
- "The XML namespace identifier for this module.";
- }
- leaf-list feature {
- type yang:yang-identifier;
- description
- "List of YANG feature names from this module that are
- supported by the server, regardless whether they are
- defined in the module or any included submodule.";
- }
- list deviation {
- key "name revision";
- description
- "List of YANG deviation module names and revisions
- used by this server to modify the conformance of
- the module associated with this entry. Note that
- the same module can be used for deviations for
- multiple modules, so the same entry MAY appear
- within multiple 'module' entries.
-
- The deviation module MUST be present in the 'module'
- list, with the same name and revision values.
- The 'conformance-type' value will be 'implement' for
- the deviation module.";
- uses common-leafs;
- }
- leaf conformance-type {
- type enumeration {
- enum implement {
- description
- "Indicates that the server implements one or more
- protocol-accessible objects defined in the YANG module
- identified in this entry. This includes deviation
- statements defined in the module.
-
- For YANG version 1.1 modules, there is at most one
- module entry with conformance type 'implement' for a
- particular module name, since YANG 1.1 requires that
- at most one revision of a module is implemented.
-
- For YANG version 1 modules, there SHOULD NOT be more
- than one module entry for a particular module name.";
- }
- enum import {
- description
- "Indicates that the server imports reusable definitions
- from the specified revision of the module, but does
- not implement any protocol accessible objects from
- this revision.
-
- Multiple module entries for the same module name MAY
- exist. This can occur if multiple modules import the
- same module, but specify different revision-dates in
- the import statements.";
- }
- }
- mandatory true;
- description
- "Indicates the type of conformance the server is claiming
- for the YANG module identified by this entry.";
- }
- container submodules {
- description
- "Contains information about all the submodules used
- by the parent module entry";
-
- list submodule {
- key "name revision";
- description
- "Each entry represents one submodule within the
- parent module.";
- uses common-leafs;
- uses schema-leaf;
- }
- }
- }
- }
-
- /*
- * Operational state data nodes
- */
-
- container modules-state {
- config false;
- description
- "Contains YANG module monitoring information.";
-
- leaf module-set-id {
- type string;
- mandatory true;
- description
- "Contains a server-specific identifier representing
- the current set of modules and submodules. The
- server MUST change the value of this leaf if the
- information represented by the 'module' list instances
- has changed.";
- }
-
- uses module-list;
- }
-
- /*
- * Notifications
- */
-
- notification yang-library-change {
- description
- "Generated when the set of modules and submodules supported
- by the server has changed.";
- leaf module-set-id {
- type leafref {
- path "/yanglib:modules-state/yanglib:module-set-id";
- }
- mandatory true;
- description
- "Contains the module-set-id value representing the
- set of modules and submodules supported at the server at
- the time the notification is generated.";
- }
- }
-
-}
-
<module>ietf-netconf-monitoring</module>
<module>ietf-netconf-notifications</module>
<module>ietf-netconf-monitoring-extension</module>
- <module>ietf-netconf-yang-library</module>
</modules>
</project>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
- <version>${project.version}</version>
- </dependency>
-
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>yanglib</artifactId>
<artifactId>ietf-netconf-notifications</artifactId>
</dependency>
<dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module;
import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Revision;
static {
final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
moduleInfoBackedContext.registerModuleInfo(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang
- .library.rev160409.$YangModuleInfoImpl.getInstance());
+ .library.rev160621.$YangModuleInfoImpl.getInstance());
LIBRARY_CONTEXT = moduleInfoBackedContext.tryToCreateSchemaContext().get();
}
import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
import org.opendaylight.yangtools.yang.common.QName;
/**
<artifactId>guava</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-netconf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesStateBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.OptionalRevision;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.RevisionIdentifier;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfig;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
private static final Logger LOG = LoggerFactory.getLogger(YangLibProvider.class);
- private static final OptionalRevision NO_REVISION = new OptionalRevision("");
private static final Predicate<PotentialSchemaSource<?>> YANG_SCHEMA_SOURCE =
input -> YangTextSchemaSource.class.isAssignableFrom(input.getRepresentation());
for (PotentialSchemaSource<?> potentialYangSource : Iterables.filter(sources, YANG_SCHEMA_SOURCE)) {
final YangIdentifier moduleName = new YangIdentifier(potentialYangSource.getSourceIdentifier().getName());
- final OptionalRevision moduleRevision = getRevisionForModule(potentialYangSource.getSourceIdentifier());
-
final Module newModule = new ModuleBuilder()
.setName(moduleName)
- .setRevision(moduleRevision)
+ .setRevision(RevisionUtils.fromYangCommon(potentialYangSource.getSourceIdentifier().getRevision()))
.setSchema(getUrlForModule(potentialYangSource.getSourceIdentifier()))
.build();
.child(Module.class,
new ModuleKey(
new YangIdentifier(source.getSourceIdentifier().getName()),
- getRevisionForModule(source.getSourceIdentifier()))));
+ RevisionUtils.fromYangCommon(source.getSourceIdentifier().getRevision()))));
Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
@Override
private static String revString(final SourceIdentifier id) {
return id.getRevision().map(Revision::toString).orElse("");
}
-
- private static OptionalRevision getRevisionForModule(final SourceIdentifier sourceIdentifier) {
- return sourceIdentifier.getRevision().map(rev -> new OptionalRevision(new RevisionIdentifier(rev.toString())))
- .orElse(NO_REVISION);
- }
}
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesStateBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.OptionalRevision;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.RevisionIdentifier;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionIdentifier;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.CommonLeafs.Revision;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfigBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
import org.opendaylight.yangtools.yang.model.repo.api.YinSchemaSourceRepresentation;
list.add(
PotentialSchemaSource.create(
- RevisionSourceIdentifier.create("with-revision", Revision.of("2016-04-28")),
+ RevisionSourceIdentifier.create("with-revision",
+ org.opendaylight.yangtools.yang.common.Revision.of("2016-04-28")),
YangTextSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue()));
when(writeTransaction.submit()).thenReturn(Futures.immediateCheckedFuture(null));
Module newModule = new ModuleBuilder()
.setName(new YangIdentifier("no-revision"))
- .setRevision(new OptionalRevision(""))
+ .setRevision(RevisionUtils.emptyRevision())
.setSchema(new Uri("http://www.fake.com:300/yanglib/schemas/no-revision/"))
.build();
newModule = new ModuleBuilder()
.setName(new YangIdentifier("with-revision"))
- .setRevision(new OptionalRevision(new RevisionIdentifier("2016-04-28")))
+ .setRevision(new Revision(new RevisionIdentifier("2016-04-28")))
.setSchema(new Uri("http://www.fake.com:300/yanglib/schemas/with-revision/2016-04-28"))
.build();
eq(InstanceIdentifier.create(ModulesState.class)
.child(Module.class,
new ModuleKey(new YangIdentifier("unregistered-yang-schema-without-revision"),
- new OptionalRevision("")))));
+ RevisionUtils.emptyRevision()))));
verify(writeTransaction).submit();
yangUnregistererSource =
PotentialSchemaSource.create(
- RevisionSourceIdentifier.create("unregistered-yang-with-revision", Revision.of("2016-04-28")),
+ RevisionSourceIdentifier.create("unregistered-yang-with-revision",
+ org.opendaylight.yangtools.yang.common.Revision.of("2016-04-28")),
YangTextSchemaSource.class, PotentialSchemaSource.Costs.LOCAL_IO.getValue());
yangLibProvider.schemaSourceUnregistered(yangUnregistererSource);
eq(InstanceIdentifier.create(ModulesState.class)
.child(Module.class,
new ModuleKey(new YangIdentifier("unregistered-yang-with-revision"),
- new OptionalRevision(new RevisionIdentifier("2016-04-28"))))));
+ new Revision(new RevisionIdentifier("2016-04-28"))))));
verify(writeTransaction, times(2)).submit();
}
<artifactId>ietf-restconf</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>ietf-yang-library</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ietf-restconf-monitoring</artifactId>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright (c) 2016 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">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>restconf-parent</artifactId>
- <version>1.8.0-SNAPSHOT</version>
- <relativePath>../../restconf-parent</relativePath>
- </parent>
-
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-yang-library</artifactId>
- <version>1.8.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
- <name>${project.artifactId}</name>
-
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-inet-types-2013-07-15</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-yang-types-20130715</artifactId>
- </dependency>
- </dependencies>
-</project>
+++ /dev/null
-package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list;
-
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.CommonLeafs.Revision;
-
-
-/**
- * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation.
- * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32).
- *
- * The reason behind putting it under src/main/java is:
- * This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent
- * loss of user code.
- *
- */
-public class CommonLeafsRevisionBuilder {
-
- public static Revision getDefaultInstance(final java.lang.String defaultValue) {
- return new Revision(defaultValue);
- }
-
-}
+++ /dev/null
-module ietf-yang-library {
- namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
- prefix "yanglib";
- import ietf-yang-types {
- prefix yang;
- }
- import ietf-inet-types {
- prefix inet;
- }
- organization
- "IETF NETCONF (Network Configuration) Working Group";
- contact
- "WG Web: <https://datatracker.ietf.org/wg/netconf/>
- WG List: <mailto:netconf@ietf.org>
- WG Chair: Mehmet Ersue
- <mailto:mehmet.ersue@nsn.com>
- WG Chair: Mahesh Jethanandani
- <mailto:mjethanandani@gmail.com>
- Editor: Andy Bierman
- <mailto:andy@yumaworks.com>
- Editor: Martin Bjorklund
- <mailto:mbj@tail-f.com>
- Editor: Kent Watsen
- <mailto:kwatsen@juniper.net>";
- description
- "This module contains monitoring information about the YANG
- modules and submodules that are used within a YANG-based
- server.
- Copyright (c) 2016 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC 7895; see
- the RFC itself for full legal notices.";
- revision 2016-06-21 {
- description
- "Initial revision.";
- reference
- "RFC 7895: YANG Module Library.";
- }
- /*
- * Typedefs
- */
- typedef revision-identifier {
- type string {
- pattern '\d{4}-\d{2}-\d{2}';
- }
- description
- "Represents a specific date in YYYY-MM-DD format.";
- }
- /*
- * Groupings
- */
- grouping module-list {
- description
- "The module data structure is represented as a grouping
- so it can be reused in configuration or another monitoring
- data structure.";
- grouping common-leafs {
- description
- "Common parameters for YANG modules and submodules.";
- leaf name {
- type yang:yang-identifier;
- description
- "The YANG module or submodule name.";
- }
- leaf revision {
- type union {
- type revision-identifier;
- type string { length 0; }
- }
- description
- "The YANG module or submodule revision date.
- A zero-length string is used if no revision statement
- is present in the YANG module or submodule.";
- }
- }
- grouping schema-leaf {
- description
- "Common schema leaf parameter for modules and submodules.";
- leaf schema {
- type inet:uri;
- description
- "Contains a URL that represents the YANG schema
- resource for this module or submodule.
- This leaf will only be present if there is a URL
- available for retrieval of the schema for this entry.";
- }
- }
- list module {
- key "name revision";
- description
- "Each entry represents one revision of one module
- currently supported by the server.";
- uses common-leafs;
- uses schema-leaf;
- leaf namespace {
- type inet:uri;
- mandatory true;
- description
- "The XML namespace identifier for this module.";
- }
- leaf-list feature {
- type yang:yang-identifier;
- description
- "List of YANG feature names from this module that are
- supported by the server, regardless of whether they are
- defined in the module or any included submodule.";
- }
- list deviation {
- key "name revision";
- description
- "List of YANG deviation module names and revisions
- used by this server to modify the conformance of
- the module associated with this entry. Note that
- the same module can be used for deviations for
- multiple modules, so the same entry MAY appear
- within multiple 'module' entries.
- The deviation module MUST be present in the 'module'
- list, with the same name and revision values.
- The 'conformance-type' value will be 'implement' for
- the deviation module.";
- uses common-leafs;
- }
- leaf conformance-type {
- type enumeration {
- enum implement {
- description
- "Indicates that the server implements one or more
- protocol-accessible objects defined in the YANG module
- identified in this entry. This includes deviation
- statements defined in the module.
- For YANG version 1.1 modules, there is at most one
- module entry with conformance type 'implement' for a
- particular module name, since YANG 1.1 requires that,
- at most, one revision of a module is implemented.
- For YANG version 1 modules, there SHOULD NOT be more
- than one module entry for a particular module name.";
- }
- enum import {
- description
- "Indicates that the server imports reusable definitions
- from the specified revision of the module but does
- not implement any protocol-accessible objects from
- this revision.
- Multiple module entries for the same module name MAY
- exist. This can occur if multiple modules import the
- same module but specify different revision dates in
- the import statements.";
- }
- }
- mandatory true;
- description
- "Indicates the type of conformance the server is claiming
- for the YANG module identified by this entry.";
- }
- list submodule {
- key "name revision";
- description
- "Each entry represents one submodule within the
- parent module.";
- uses common-leafs;
- uses schema-leaf;
- }
- }
- }
- /*
- * Operational state data nodes
- */
- container modules-state {
- config false;
- description
- "Contains YANG module monitoring information.";
- leaf module-set-id {
- type string;
- mandatory true;
- description
- "Contains a server-specific identifier representing
- the current set of modules and submodules. The
- server MUST change the value of this leaf if the
- information represented by the 'module' list instances
- has changed.";
- }
- uses module-list;
- }
- /*
- * Notifications
- */
- notification yang-library-change {
- description
- "Generated when the set of modules and submodules supported
- by the server has changed.";
- leaf module-set-id {
- type leafref {
- path "/yanglib:modules-state/yanglib:module-set-id";
- }
- mandatory true;
- description
- "Contains the module-set-id value representing the
- set of modules and submodules supported at the server at
- the time the notification is generated.";
- }
- }
-}
<name>${project.artifactId}</name>
<modules>
- <module>ietf-yang-library</module>
<module>ietf-restconf-monitoring</module>
<module>ietf-restconf</module>
</modules>
<artifactId>yang-model-export</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>restconf-common</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.netconf</groupId>
- <artifactId>ietf-yang-library</artifactId>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>rfc7895</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>