Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

NameOrganizationEmail
Adarsh MHuawei Technologiesadarsh.m@huawei.com
Bharat SaraswalHuawei Technologiesbharat.saraswal@huawei.com
Gaurav Agrawal Huawei Technologiesgaurav.agrawal@huawei.com
Janani BHuawei Technologiesjanani.b@huawei.com
Sathish Kumar MHuawei Technologiessathishkumar.m@huawei.com
Suchitra H NHuawei Technologiessuchitra.hn@huawei.com
Vidyashree RamaHuawei Technologiesvidyashree.rama@huawei.com
Vinod Kumar SHuawei Technologiesvinods.kumar@huawei.com
ShankaraHuawei Technologies

shankara@huawei.com

Mahesh Poojary SHuawei Technologies

mahesh.poojary@huawei.com

Rama Subba Reddy SHuawei Technologies

Rama.Subba.Reddy.S@huawei.com

...

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>

...

  1. 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>
  2. 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
titleCode generated is as per ONOS coding guidelines.

 

YANG utils constructs support/plan

Note:

  1. 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.
  2. If a yang file contains only typedef/grouping nodes , there will not be any generation of manager class.
Info
titleCode generated is as per ONOS coding guidelines.

 

YANG utils constructs support/plan

YANG ConstructSupported/Planned version
YANG ConstructSupported/Planned version
anyxmlNot planned
argumentNot plannedHummingbird
augmentGoldeneye
baseHummingbird
belongs-toGoldeneye
bitGoldeneyeHummingbird
caseGoldeneye
choiceGoldeneye
configFalcon
contact

Goldeneye

Enhancement in Hummingbird

containerFalcon
default

Goldeneye

Enhancement in Humminbird

description

Goldeneye

Enhancement in Hummingbird

deviateNot planned
deviationNot planned
enumGoldeneye
error-app-tagNot plannedHummingbird
error-messageNot plannedHummingbird
extensionNot plannedHummingbird
featureHummingbird
fraction-digitsGoldeneyeHummingbird
groupingGoldeneye
identityHummingbird
if-featureHummingbird
import

Goldeneye

Enhancement in Hummingbird

include

Goldeneye

Enhancement in Hummingbird

inputGoldeneye
keyGoldeneye
leafFalcon
leaf-listFalcon
lengthGoldeneye
listFalcon
mandatoryFalcon
max-elementsGoldeneye
min-elementsGoldeneye
moduleFalcon
mustHummingbird
namespaceGoldeneye
notificationGoldeneye
ordered-byNot planned
organization

Goldeneye

Enhancement in Hummingbird
outputGoldeneye
pathHummingbird
patternGoldeneye
positionGoldeneye
prefixGoldeneye
presenceGoldeneye
rangeGoldeneye
reference

Goldeneye

Enhancement in Hummingbird
refineNot planned
require-instanceNot plannedHummingbird
revision

Goldeneye

Enhancement in Hummingbird
revision-date

Goldeneye

rpcGoldeneye
status

Goldeneye

Enhancement in Hummingbird
submoduleGoldeneye
typeGoldeneye
typedefGoldeneye
uniqueNot Planned
units

Goldeneye

uses

Goldeneye

Enhancement in Hummingbird

valueGoldeneye
whenHummingbird
yang-versionGoldeneye
yin-elementNot Planned

...

Code Block
titleGenerated Java files
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
titleInput YANG file
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
titleGenerated Java files
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
titleInput YANG files
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
titleGenerated Java files
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.

...