ONOS-6980 Adding support for download of application bits.
Change-Id: I742950690b50038cac0bb2ad2da4eaac5781da85
diff --git a/core/api/src/main/java/org/onosproject/app/ApplicationService.java b/core/api/src/main/java/org/onosproject/app/ApplicationService.java
index 683f90a..51d3eb4 100644
--- a/core/api/src/main/java/org/onosproject/app/ApplicationService.java
+++ b/core/api/src/main/java/org/onosproject/app/ApplicationService.java
@@ -20,6 +20,7 @@
import org.onosproject.event.ListenerService;
import org.onosproject.security.Permission;
+import java.io.InputStream;
import java.util.Set;
/**
@@ -74,4 +75,14 @@
* @param hook pre-deactivation hook
*/
void registerDeactivateHook(ApplicationId appId, Runnable hook);
+
+ /**
+ * Returns stream that contains the application OAR/JAR file contents.
+ *
+ * @param appId application identifier
+ * @return input stream containing the app OAR/JAR file
+ */
+ default InputStream getApplicationArchive(ApplicationId appId) {
+ return null;
+ }
}
diff --git a/core/api/src/main/java/org/onosproject/app/ApplicationStore.java b/core/api/src/main/java/org/onosproject/app/ApplicationStore.java
index 3544956..bd5a66d 100644
--- a/core/api/src/main/java/org/onosproject/app/ApplicationStore.java
+++ b/core/api/src/main/java/org/onosproject/app/ApplicationStore.java
@@ -105,4 +105,14 @@
*/
void setPermissions(ApplicationId appId, Set<Permission> permissions);
+ /**
+ * Returns stream that contains the application OAR/JAR file contents.
+ *
+ * @param appId application identifier
+ * @return input stream containing the app OAR/JAR file
+ */
+ default InputStream getApplicationArchive(ApplicationId appId) {
+ return null;
+ }
+
}
diff --git a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
index ec38607..92709cb 100644
--- a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
+++ b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
@@ -199,13 +199,11 @@
checkState(!appFile(desc.name(), APP_XML).exists(),
"Application %s already installed", desc.name());
- boolean isSelfContainedJar = false;
-
if (plainXml) {
expandPlainApplication(cache, desc);
} else {
bis.reset();
- isSelfContainedJar = expandZippedApplication(bis, desc);
+ boolean isSelfContainedJar = expandZippedApplication(bis, desc);
if (isSelfContainedJar) {
bis.reset();
@@ -254,7 +252,7 @@
/**
* Returns application archive stream for the specified application. This
- * will be either the application ZIP file or the application XML file.
+ * will be either the application OAR file, JAR file or the plain XML file.
*
* @param appName application name
* @return application archive stream
diff --git a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
index 3c3d60b..d8b09b0 100644
--- a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
+++ b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
@@ -179,6 +179,12 @@
store.setPermissions(appId, permissions);
}
+ @Override
+ public InputStream getApplicationArchive(ApplicationId appId) {
+ checkNotNull(appId, APP_ID_NULL);
+ return store.getApplicationArchive(appId);
+ }
+
private void updateStoreAndWaitForNotificationHandling(ApplicationId appId,
Consumer<ApplicationId> storeUpdateTask) {
CountDownLatch latch = new CountDownLatch(1);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java b/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java
index 21450c0..c64942f 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/app/DistributedApplicationStore.java
@@ -437,6 +437,11 @@
}
}
+ @Override
+ public InputStream getApplicationArchive(ApplicationId appId) {
+ return getApplicationInputStream(appId.name());
+ }
+
private class AppActivator implements Consumer<Application> {
@Override
public void accept(Application app) {