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);
             }