ONOS-542 Added ability for app bundle to carry it's own artifacts, including feature repo. Fixed onos-package script. Added JSON output to CLI.
Change-Id: If4f2c774d3fc2d68c0a8e91b3084b99d7c75d927
diff --git a/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
index ec7958d..64f04a6 100644
--- a/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
@@ -19,6 +19,7 @@
import org.onosproject.core.Version;
import java.net.URI;
+import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -71,10 +72,10 @@
Optional<URI> featuresRepo();
/**
- * Returns the set of features comprising the application. At least one
+ * Returns the list of features comprising the application. At least one
* feature must be given.
*
* @return application features
*/
- Set<String> features();
+ List<String> features();
}
diff --git a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
index 9c53542..78b902b 100644
--- a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
@@ -19,6 +19,7 @@
import org.onosproject.core.Version;
import java.net.URI;
+import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -37,7 +38,7 @@
private final String origin;
private final Set<Permission> permissions;
private final Optional<URI> featuresRepo;
- private final Set<String> features;
+ private final List<String> features;
/**
* Creates a new application descriptor using the supplied data.
@@ -53,7 +54,7 @@
public DefaultApplicationDescription(String name, Version version,
String description, String origin,
Set<Permission> permissions,
- URI featuresRepo, Set<String> features) {
+ URI featuresRepo, List<String> features) {
this.name = checkNotNull(name, "Name cannot be null");
this.version = checkNotNull(version, "Version cannot be null");
this.description = checkNotNull(description, "Description cannot be null");
@@ -95,7 +96,7 @@
}
@Override
- public Set<String> features() {
+ public List<String> features() {
return features;
}
diff --git a/core/api/src/main/java/org/onosproject/core/Application.java b/core/api/src/main/java/org/onosproject/core/Application.java
index d876a67..da2be13 100644
--- a/core/api/src/main/java/org/onosproject/core/Application.java
+++ b/core/api/src/main/java/org/onosproject/core/Application.java
@@ -16,6 +16,7 @@
package org.onosproject.core;
import java.net.URI;
+import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -68,10 +69,10 @@
Optional<URI> featuresRepo();
/**
- * Returns the set of features comprising the application. At least one
+ * Returns the list of features comprising the application. At least one
* feature must be given.
*
* @return application features
*/
- Set<String> features();
+ List<String> features();
}
diff --git a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
index 4da85a5..b765e70 100644
--- a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
+++ b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
@@ -16,6 +16,7 @@
package org.onosproject.core;
import java.net.URI;
+import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -35,7 +36,7 @@
private final String origin;
private final Set<Permission> permissions;
private final Optional<URI> featuresRepo;
- private final Set<String> features;
+ private final List<String> features;
/**
* Creates a new application descriptor using the supplied data.
@@ -51,7 +52,7 @@
public DefaultApplication(ApplicationId appId, Version version,
String description, String origin,
Set<Permission> permissions,
- Optional<URI> featuresRepo, Set<String> features) {
+ Optional<URI> featuresRepo, List<String> features) {
this.appId = checkNotNull(appId, "ID cannot be null");
this.version = checkNotNull(version, "Version cannot be null");
this.description = checkNotNull(description, "Description cannot be null");
@@ -93,7 +94,7 @@
}
@Override
- public Set<String> features() {
+ public List<String> features() {
return features;
}
diff --git a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
index 7079427..3c33a7f 100644
--- a/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/app/DefaultApplicationDescriptionTest.java
@@ -15,12 +15,14 @@
*/
package org.onosproject.app;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.junit.Test;
import org.onosproject.core.Permission;
import org.onosproject.core.Version;
import java.net.URI;
+import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
@@ -37,7 +39,7 @@
public static final String ORIGIN = "Circus";
public static final Set<Permission> PERMS = ImmutableSet.of();
public static final URI FURL = URI.create("mvn:org.foo-features/1.2a/xml/features");
- public static final Set<String> FEATURES = ImmutableSet.of("foo");
+ public static final List<String> FEATURES = ImmutableList.of("foo", "bar");
@Test
public void basics() {
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 61cb2e3..0260863 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
@@ -15,6 +15,7 @@
*/
package org.onosproject.common.app;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
@@ -40,6 +41,7 @@
import java.io.InputStream;
import java.net.URI;
import java.nio.file.NoSuchFileException;
+import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
@@ -191,8 +193,7 @@
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
if (entry.getName().equals(APP_XML)) {
- byte[] data = new byte[(int) entry.getSize()];
- ByteStreams.readFully(zis, data);
+ byte[] data = ByteStreams.toByteArray(zis);
XMLConfiguration cfg = new XMLConfiguration();
try {
cfg.load(new ByteArrayInputStream(data));
@@ -209,6 +210,7 @@
private ApplicationDescription loadAppDescription(XMLConfiguration cfg) {
cfg.setAttributeSplittingDisabled(true);
+ cfg.setDelimiterParsingDisabled(true);
String name = cfg.getString(NAME);
Version version = Version.version(cfg.getString(VERSION));
String desc = cfg.getString(DESCRIPTION);
@@ -216,7 +218,7 @@
Set<Permission> perms = ImmutableSet.of();
String featRepo = cfg.getString(FEATURES_REPO);
URI featuresRepo = featRepo != null ? URI.create(featRepo) : null;
- Set<String> features = ImmutableSet.copyOf(cfg.getString(FEATURES).split(","));
+ List<String> features = ImmutableList.copyOf(cfg.getStringArray(FEATURES));
return new DefaultApplicationDescription(name, version, desc, origin,
perms, featuresRepo, features);
@@ -229,13 +231,14 @@
ZipEntry entry;
File appDir = new File(appsDir, desc.name());
while ((entry = zis.getNextEntry()) != null) {
- byte[] data = new byte[(int) entry.getSize()];
- ByteStreams.readFully(zis, data);
- zis.closeEntry();
+ if (!entry.isDirectory()) {
+ byte[] data = ByteStreams.toByteArray(zis);
+ zis.closeEntry();
- File file = new File(appDir, entry.getName());
- createParentDirs(file);
- write(data, file);
+ File file = new File(appDir, entry.getName());
+ createParentDirs(file);
+ write(data, file);
+ }
}
zis.close();
}