Developing a ODLUX application

Prerequisites

  • Node: 8.10 or higher
  • Yarn: 1.12.3 or higher
  • Lerna: 3.10.7 or higher

You can install these globally or let it be installed by maven due "mvn clean install"

  • Maven: 3 or higher
  • Java: 8 or higher

Dev-Environment Installation

 odlux
 |-apps
 |-core
 |-framework

  • go to features/sdnr/wt/odlux/apps and create your app:
mvn archetype:generate -DarchetypeGroupId=org.onap.ccsdk.features.sdnr.wt \
 -DarchetypeArtifactId=odlux-app-archetype \
 -DgroupId=<groupId> \
 -DartifactId=<artifactId> \
 -Dversion=<version> \
 -DappName=<applicationName>
  • your start folder for your web application is src/
  • in src2/main/java are located the Java files and in src2/main/resources/ is the blueprint located
  • with yarn start you can run your application due runtime in your application folder
  • by default this will run on http://localhost:3100/index.html
  • if you have added new dependencies you have to run lerna bootstrap in odlux/
  • build your app for development version you can use yarn run build or yarn run build:dev
  • build for karaf with mvn clean install

Including app into karaf environment

  • copy maven repository files to karaf repository e.g.: cp ~/.m2/repository/path/of/groupId/artifactId $KARAF_HOME/system/path/of/groupId/
  • check if odlux-core is started in karaf console: feature:list | grep odlux
  • if not install: sdnr-wt-odlux-core-feature
  • start your app in karaf console: bundle:install -s mvn:<groupId>/<artifactId>/<version>

Including into ONAP sdnc docker container

  • add maven module to odlux/pom.xml
  • add dependency to odlux/apps/app-feature/pom.xml and odlux/apps/app-installer/pom.xml
  • build odlux/pom.xml
  • this will automatically package your app into the packaged zip file of the installer

Details

Default menu positions

  • from 0 for top to 999 for bottom.
0	Connect
10	Fault
20	Maintenance
30	Configuration
40	Protection
50	Performance
60	Security
70	Inventory
80	Topology
90	Mediator
100	Help

blueprint.xml

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    <reference id="loadersvc" availability="mandatory" activation="eager" interface="org.onap.ccsdk.features.sdnr.wt.odlux.model.bundles.OdluxBundleLoader"/>
    <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.onap.ccsdk.features.sdnr.wt.odlux.bundles.MyOdluxBundle">
        <property name="loader" ref="loadersvc"/>
        <property name="bundleName" value="demoApp"/>
        <property name="index" value="999"/>
    </bean>
</blueprint>
  • bundleName defines the applicationName => default javascript file: .js
  • index defines the menu position.

MyOdluxBundle.java

  • is just for getting access to the resources of its bundle (implemented because of OSGi access restrictions)

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.onap.ccsdk.parent</groupId>
        <artifactId>odlparent</artifactId>
        <version>1.2.1-SNAPSHOT</version>
        <relativePath />
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
    <artifactId>sdnr-wt-odlux-app-demoApp</artifactId>
    <version>0.4.1-SNAPSHOT</version>
    <packaging>bundle</packaging>
    <name>sdnr-wt-odlux-app-demoApp</name>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
        </license>
    </licenses>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>sdnr-wt-odlux-core-model</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>sdnr-wt-odlux-core-provider</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src2/main/java</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>dist</directory>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                        <fileset>
                            <directory>node</directory>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                        <fileset>
                            <directory>node_modules</directory>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                        <fileset>
                            <directory>../node_modules</directory>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-test-source</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>src2/test/java</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <version>1.8-SNAPSHOT</version>
                <executions>
                    <execution>
                        <id>install node and yarn</id>
                        <goals>
                            <goal>install-node-and-yarn</goal>
                        </goals>
                        <!-- optional: default phase is "generate-resources" -->
                        <phase>initialize</phase>
                        <configuration>
                            <nodeVersion>v8.10.0</nodeVersion>
                            <yarnVersion>v1.12.3</yarnVersion>
                        </configuration>
                    </execution>
                    <execution>
                        <id>yarn build</id>
                        <goals>
                            <goal>yarn</goal>
                        </goals>
                        <configuration>
                            <arguments>run build</arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Import-Package>org.onap.ccsdk.features.sdnr.wt.odlux.model.*,com.opensymphony.*</Import-Package>
                        <Private-Package></Private-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>dist</directory>
                <targetPath>odlux</targetPath>
            </resource>
            <resource>
                <directory>src2/main/resources</directory>
            </resource>
            <resource>
                <directory>src2/test/resources</directory>
            </resource>
        </resources>
    </build>
    <pluginRepositories>
        <pluginRepository>
            <id>highstreet repo</id>
            <url>https://cloud-highstreet-technologies.com/mvn/</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>
your
  • a modified frontend-maven-plugin installs node, yarn and (optionally lerna) to compile the typescript sources to javascript. These will be build into the dist folder.