...
Name | Organization | |
---|---|---|
Adarsh M | Huawei Technologies | adarsh.m@huawei.com |
Bharat Saraswal | Huawei Technologies | bharat.saraswal@huawei.com |
Gaurav Agrawal | Huawei Technologies | gaurav.agrawal@huawei.com |
Janani B | Huawei Technologies | janani.b@huawei.com |
Sathish Kumar M | Huawei Technologies | sathishkumar.m@huawei.com |
Suchitra H N | Huawei Technologies | suchitra.hn@huawei.com |
Vidyashree Rama | Huawei Technologies | vidyashree.rama@huawei.com |
Vinod Kumar S | Huawei Technologies | vinods.kumar@huawei.com |
Shankara | Huawei Technologies | |
Mahesh Poojary S | Huawei Technologies | |
Rama Subba Reddy S | Huawei Technologies |
...
Code Block |
---|
<dependencies> <dependency> <groupId>org.onosproject</groupId> <artifactId>yangutils-maven-plugin<datamodel</artifactId> <version>1.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.onosproject</groupId> <artifactId>yangutils-javamodel</artifactId> <version>1.07.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.onosproject</groupId> <artifactId>onos-api</artifactId> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.scr.annotations</artifactId> </dependency> </dependencies> |
...
Create a folder structure as “src/main/yang” in the test app folder and place your YANG files in it. In case user want to give desired path for source YANG files and generated java files, the following configuration can be appended to the above pom.xml file.
Code Block <configuration> <yangFilesDir>DesiredYangFilesPath</yangFilesDir> <genFilesDir>DesiredGeneratedJavaFilesPath</genFilesDir> </configuration>
Plugin provides user to give configuration if he wants to generate manager/service classes or not. for this if he do not wants to generate service and manager classes he can set flag to "sbi" , and plugin will not generate manager/service classes.
Code Block <configuration> <generateJavaFileForsbi>sbi</generateJavaFileForsbi> </configuration>
Step 4 : Execution of application
Build using mvn clean install/ mvn install. Generated java code will be placed in default directory or in desired destination folder configured by user.
Info | ||
---|---|---|
| ||
|
YANG utils constructs support/plan
Note:
- If user does not provide any configurations for code generation , code will be generated in 2 different packages. Manager class will be generate in default "src/main/java" package and other classes including service interface will be generated in "target/generated-sources" folder.
- If a yang file contains only typedef/grouping nodes , there will not be any generation of manager class.
Info | ||
---|---|---|
| ||
|
YANG utils constructs support/plan
YANG Construct | Supported/Planned version |
---|---|
YANG Construct | Supported/Planned version |
anyxml | Not planned |
argument | Not plannedHummingbird |
augment | Goldeneye |
base | Hummingbird |
belongs-to | Goldeneye |
bit | GoldeneyeHummingbird |
case | Goldeneye |
choice | Goldeneye |
config | Falcon |
contact | Goldeneye Enhancement in Hummingbird |
container | Falcon |
default | Goldeneye Enhancement in Humminbird |
description | Goldeneye Enhancement in Hummingbird |
deviate | Not planned |
deviation | Not planned |
enum | Goldeneye |
error-app-tag | Not plannedHummingbird |
error-message | Not plannedHummingbird |
extension | Not plannedHummingbird |
feature | Hummingbird |
fraction-digits | GoldeneyeHummingbird |
grouping | Goldeneye |
identity | Hummingbird |
if-feature | Hummingbird |
import | Goldeneye Enhancement in Hummingbird |
include | Goldeneye Enhancement in Hummingbird |
input | Goldeneye |
key | Goldeneye |
leaf | Falcon |
leaf-list | Falcon |
length | Goldeneye |
list | Falcon |
mandatory | Falcon |
max-elements | Goldeneye |
min-elements | Goldeneye |
module | Falcon |
must | Hummingbird |
namespace | Goldeneye |
notification | Goldeneye |
ordered-by | Not planned |
organization | Goldeneye Enhancement in Hummingbird |
output | Goldeneye |
path | Hummingbird |
pattern | Goldeneye |
position | Goldeneye |
prefix | Goldeneye |
presence | Goldeneye |
range | Goldeneye |
reference | Goldeneye Enhancement in Hummingbird |
refine | Not planned |
require-instance | Not plannedHummingbird |
revision | Goldeneye Enhancement in Hummingbird |
revision-date | Goldeneye |
rpc | Goldeneye |
status | Goldeneye Enhancement in Hummingbird |
submodule | Goldeneye |
type | Goldeneye |
typedef | Goldeneye |
unique | Not Planned |
units | Goldeneye |
uses | Goldeneye Enhancement in Hummingbird |
value | Goldeneye |
when | Hummingbird |
yang-version | Goldeneye |
yin-element | Not Planned |
...
Code Block | ||
---|---|---|
| ||
File : NetworkService.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import java.util.List; import org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309.network.Networklist; public interface NetworkService { List<Networklist>Network getNetworklistgetNetwork(); void setNetworklistsetNetwork(List<Networklist>Network networklistnetwork); } File : NetworkManager.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import java.util.List; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Service; import org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309.network.Networklist; import org.slf4j.Logger; import static org.slf4j.LoggerFactory.getLogger; @Component (immediate = true) @Service public class NetworkManager implements NetworkService { private final Logger log = getLogger(getClass()); @Activate public void activate() { //TODO: YANG utils generated code log.info("Started"); } @Deactivate public void deactivate() { //TODO: YANG utils generated code log.info("StartedStopped"); } @Override public Network getNetwork() { //TODO: @DeactivateYANG utils generated code return null; } @Override public void deactivate() { setNetwork(Network network) { //TODO: YANG utils generated code } } File : Network.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import java.util.List; import org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309.network.Networklist; public interface Network { List<Networklist> networklist(); interface NetworkBuilder { List<Networklist> networklist(); NetworkBuilder networklist(List<Networklist> networklist); Network build(); } } File:DefaultNetwork.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import com.google.common.base.MoreObjects; import java.util.List; import java.util.Objects; import org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309.network.Networklist; public class DefaultNetwork implements Network { protected List<Networklist> networklist; @Override public List<Networklist> networklist() { return networklist; } @Override public int hashCode() { return Objects.hash(networklist); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof DefaultNetwork) { DefaultNetwork other = (DefaultNetwork) obj; return Objects.equals(networklist, other.networklist); } return false; } @Override public String toString() { return MoreObjects.toStringHelper(getClass()) .add("networklist", networklist) .toString(); } public DefaultNetwork(NetworkBuilder builderObject) { this.networklist = builderObject.networklist(); } public class NetworkBuilder implements Network.NetworkBuilder { protected List<Networklist> networklist; @Override public List<Networklist> networklist() { return networklist; } @Override public NetworkBuilder networklist(List<Networklist> networklist) { this.networklist = networklist; return this; } @Override public Network build() { return new DefaultNetwork(this); } public NetworkBuilder() { } } } |
Code Block | ||
---|---|---|
| ||
File : network.yang with an augment node.
module network {
yang-version 1;
namespace "urn:TBD:params:xml:ns:yang:nodes";
prefix nd;
organization "TBD";
contact
"WILL-BE-DEFINED-LATER";
description
"This module defines a common base model for a collection
of nodes in a network. Node definitions s are further used
in network topologies and inventories.";
revision 2014-03-09 {
description
"Initial revision.";
reference "draft-clemm-i2rs-yang-network-topo-04";
}
list networklist {
key "network-id";
leaf network-id {
type string;
}
leaf server-provided {
type boolean;
config false;
}
}
augment /networklist {
leaf network-ip {
type int32;
}
}
....
}
|
Code Block | ||
---|---|---|
| ||
File : NetworkService.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; public interface NetworkService { Network getNetwork(); void setNetwork(Network network); Network getAugmentedNetworkNetworklist(); void setAugmentedNetworkNetworklist(Network augmentedNetworkNetworklist); } File : NetworkManager.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Service; import org.slf4j.Logger; import static org.slf4j.LoggerFactory.getLogger; @Component(immediate = true) @Service public class NetworkManager implements NetworkService { private final Logger log = getLogger(getClass()); @Activate public void activate() { //TODO: YANG utils generated code log.info("Started"); } @Deactivate public void deactivate() { //TODO: YANG utils generated code log.info("Stopped"); } @Override public Network getNetwork() { //TODO: YANG utils generated code return null; } @Override public void setNetwork(Network network) { //TODO: YANG utils generated code } @Override public Network getAugmentedNetworkNetworklist() { //TODO: YANG utils generated code return null; } @Override public void setAugmentedNetworkNetworklist(Network augmentedNetworkNetworklist) { //TODO: YANG utils generated code } } File : Network.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import java.util.List; import org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309.network.Networklist; public interface Network { List<Networklist> networklist(); interface NetworkBuilder { List<Networklist> networklist(); NetworkBuilder networklist(List<Networklist> networklist); Network build(); } } File:DefaultNetwork.java package org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309; import com.google.common.base.MoreObjects; import java.util.List; import java.util.Objects; import org.onosproject.yang.gen.v1.urn.tbd.params.xml.ns.yang.nodes.rev20140309.network.Networklist; public class DefaultNetwork implements Network { protected List<Networklist> networklist; @Override public List<Networklist> networklist() { return networklist; } @Override public int hashCode() { return Objects.hash(networklist); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof DefaultNetwork) { DefaultNetwork other = (DefaultNetwork) obj; return Objects.equals(networklist, other.networklist); } return false; } @Override public String toString() { return MoreObjects.toStringHelper(getClass()) .add("networklist", networklist) .toString(); } public DefaultNetwork(NetworkBuilder builderObject) { this.networklist = builderObject.networklist(); } public class NetworkBuilder implements Network.NetworkBuilder { protected List<Networklist> networklist; @Override public List<Networklist> networklist() { return networklist; } @Override public NetworkBuilder networklist(List<Networklist> networklist) { //TODO: YANG utilsthis.networklist generated= codenetworklist; log.info("Stopped")return this; } @Override} public List<Networklist> getNetworklist() {@Override public //TODO: YANG utils generated code Network build() { return null new DefaultNetwork(this); } @Override public void setNetworklist(List<Networklist> networklistNetworkBuilder() { //TODO: YANG utils generated code} } } |
Sub Module
Overview
The “submodule” groups all the statements that belongs to the submodule together. The "submodule" statement's argument is the name of the submodule, followed by a block of sub statements.
...
Code Block | ||
---|---|---|
| ||
File : acme-system.yang module acme-system { namespace "http://yang-central.org/ns/example/acme"; prefix acme; include "acme-types"; container access { leaf id { type string;uint32; } } } File : acme-types.yang submodule acme-types { yang-version 1; belongs-to "acme-system" { prefix "acme"; } container access { leaf access-timeout { type uint32; } leaf retries { type uint8; } } } |
Code Block | ||
---|---|---|
| ||
File : AcmeSystemManager.java package org.onosproject.yang.gen.v1.http.yang.central.org.ns.example.acme.rev20160526; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Service; import org.slf4j.Logger; import static org.slf4j.LoggerFactory.getLogger; @Component (immediate = true) @Service public class AcmeSystemManager implements AcmeSystemService { private final Logger log = getLogger(getClass()); @Activate public void activate() { //TODO: YANG utils generated code log.info("Started"); } @Deactivate public void deactivate() { //TODO: YANG utils generated code log.info("Stopped"); } @Override public String getId() { //TODO: YANG utils generated code return null; } @Override public void setId(String id) { //TODO: YANG utils generated code } } File : AcmeSystemService.java package org.onosproject.yang.gen.v1.http.yang.central.org.ns.example.acme.rev20160526rev20160720; public interface AcmeSystemServiceAcmeTypesService { StringAcmeTypes getIdgetAcmeTypes(); void setIdsetAcmeTypes(StringAcmeTypes idacmeTypes); } File : AcmeTypesManager.java package org.onosproject.yang.gen.v1.http.yang.central.org.ns.example.acme.rev20160526rev20160720; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Service; import org.slf4j.Logger; import static org.slf4j.LoggerFactory.getLogger; @Component (immediate = true) @Service public class AcmeTypesManager implements AcmeTypesService { private final Logger log = getLogger(getClass()); @Activate public void activate() { //TODO: YANG utils generated code log.info("Started"); } @Deactivate public void deactivate() { //TODO: YANG utils generated code log.info("Stopped"); } @Override public longAcmeTypes getAccessTimeoutgetAcmeTypes() { //TODO: YANG utils generated code return 0null; } @Override public short getRetries() { //TODO: YANG utils generated code return 0; } @Override public void setAccessTimeout(long accessTimeout) { //TODO: YANG utils generated code } @Override public void setRetries(short retriesvoid setAcmeTypes(AcmeTypes acmeTypes) { //TODO: YANG utils generated code } } File : AcmeTypesService.java package org.onosproject.yang.gen.v1.http.yang.central.org.ns.example.acme.rev20160526rev20160720; public interface AcmeTypesService { long getAccessTimeout(); short getRetriesAcmeTypes getAcmeTypes(); void setAccessTimeoutsetAcmeTypes(long accessTimeout); void setRetries(short retriesAcmeTypes acmeTypes); } |
Prefix
Overview
Prefix is used to define prefix associated with module. It is used as a hint to other module developers when they import our module.
...