Converting builtin applications to be delivered in a self-contained manner via OAR files.

Change-Id: I5b7c6939aacc263248868fac2e0f69124c5f3609
diff --git a/providers/null/app.xml b/providers/null/app.xml
index a6343d2..0965043 100644
--- a/providers/null/app.xml
+++ b/providers/null/app.xml
@@ -14,7 +14,9 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<app name="org.onosproject.null" origin="ON.Lab" version="1.2.0"
-        features="onos-null">
-    <description>Null southbound providers for testing</description>
+<app name="org.onosproject.null" origin="ON.Lab" version="${feature.version}"
+     featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
+     features="${project.artifactId}">
+    <description>${project.description}</description>
+    <artifact>mvn:${project.groupId}/${project.artifactId}/${project.version}</artifact>
 </app>
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
index a1baec9..674b33f 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
@@ -136,8 +136,8 @@
 
         @Override
         public void run(Timeout to) {
-            if (!devices.isEmpty()) {
-                sendEvent(devices.get(currentDevice));
+            if (!devices.isEmpty() && !to.isCancelled()) {
+                sendEvent(devices.get(Math.max(currentDevice, devices.size())));
                 currentDevice = (currentDevice + 1) % devices.size();
                 timeout = timer.newTimeout(to.getTask(), delay, TimeUnit.MILLISECONDS);
             }
diff --git a/providers/openflow/app.xml b/providers/openflow/app.xml
deleted file mode 100644
index 5159d74..0000000
--- a/providers/openflow/app.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2015 Open Networking Laboratory
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<app name="org.onosproject.openflow" origin="ON.Lab" version="1.2.0"
-        features="onos-openflow">
-    <description>OpenFlow protocol southbound providers</description>
-</app>
diff --git a/providers/openflow/app/app.xml b/providers/openflow/app/app.xml
new file mode 100644
index 0000000..afa63fa
--- /dev/null
+++ b/providers/openflow/app/app.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2015 Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<app name="org.onosproject.openflow" origin="ON.Lab" version="${feature.version}"
+     features="onos-openflow">
+    <description>OpenFlow protocol southbound providers</description>
+
+    <artifact>mvn:${project.groupId}/onos-of-api/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-of-drivers/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-of-ctl/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-drivers/${project.version}</artifact>
+
+    <artifact>mvn:${project.groupId}/onos-lldp-provider/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-host-provider/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-of-provider-device/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-of-provider-packet/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-of-provider-flow/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-of-provider-group/${project.version}</artifact>
+</app>
diff --git a/providers/openflow/app/pom.xml b/providers/openflow/app/pom.xml
new file mode 100644
index 0000000..bcbb632
--- /dev/null
+++ b/providers/openflow/app/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2015 Open Networking Laboratory
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<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/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-of-providers</artifactId>
+        <version>1.2.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-of-providers-app</artifactId>
+    <packaging>pom</packaging>
+
+    <description>ONOS OpenFlow providers app</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-drivers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-ctl</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-drivers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-provider-device</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-provider-packet</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-provider-flow</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-of-provider-group</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-lldp-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-host-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/providers/openflow/pom.xml b/providers/openflow/pom.xml
index c82516f..6a69b94 100644
--- a/providers/openflow/pom.xml
+++ b/providers/openflow/pom.xml
@@ -36,6 +36,7 @@
         <module>packet</module>
         <module>flow</module>
         <module>group</module>
+        <module>app</module>
     </modules>
 
     <dependencies>