Additional Implementation of installApp to CLI interface
Change-Id: Iea7ed2f4be5ffd9acc7e682d6f1625a9af53f902
diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
index ff0cbf8..9b5e91f 100644
--- a/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationCommand.java
@@ -21,13 +21,19 @@
import org.apache.karaf.shell.api.action.Completion;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.onosproject.app.ApplicationAdminService;
+import org.onosproject.app.ApplicationService;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.core.Application;
import org.onosproject.core.ApplicationId;
+import org.onosproject.core.VersionService;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
import java.io.IOException;
import java.net.URL;
+import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -44,6 +50,9 @@
static final String DEACTIVATE = "deactivate";
static final String DOWNLOAD = "download";
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected VersionService versionService;
+
@Argument(index = 0, name = "command",
description = "Command name (install|activate|deactivate|uninstall|download)",
required = true)
@@ -64,7 +73,6 @@
return;
}
}
-
} else if (command.equals(DOWNLOAD)) {
for (String name : names) {
if (!downloadApp(service, name)) {
@@ -86,7 +94,20 @@
if ("-".equals(url)) {
service.install(System.in);
} else {
- service.install(new URL(url).openStream());
+ Set<Application> app = get(ApplicationService.class)
+ .getRegisteredApplications().stream()
+ .filter(ra -> ra.id().toString().equals(url))
+ .collect(Collectors.toSet());
+ if (app.isEmpty()) {
+ service.install(new URL(url).openStream());
+ }
+ Iterator<Application> iterator = app.iterator();
+ while (iterator.hasNext()) {
+ Application application = iterator.next();
+ if (application.version().toString().equals(versionService.version().toString())) {
+ service.install(application.imageUrl().openStream());
+ }
+ }
}
} catch (IOException e) {
error("Unable to get URL: %s", url);
diff --git a/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java b/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java
index 2d0a6f7..03409d0 100644
--- a/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java
+++ b/cli/src/main/java/org/onosproject/cli/app/ApplicationNameCompleter.java
@@ -54,30 +54,24 @@
// Command name is the second argument.
String cmd = commandLine.getArguments()[1];
- // Grab apps already on the command (to prevent tab-completed duplicates)
- // FIXME: This does not work.
-// final Set previousApps;
-// if (list.getArguments().length > 2) {
-// previousApps = Sets.newHashSet(
-// Arrays.copyOfRange(list.getArguments(), 2, list.getArguments().length));
-// } else {
-// previousApps = Collections.emptySet();
-// }
-
// Fetch our service and feed it's offerings to the string completer
ApplicationService service = get(ApplicationService.class);
Iterator<Application> it = service.getApplications().iterator();
SortedSet<String> strings = delegate.getStrings();
- while (it.hasNext()) {
- Application app = it.next();
- ApplicationState state = service.getState(app.id());
-// if (previousApps.contains(app.id().name())) {
-// continue;
-// }
- if ("uninstall".equals(cmd) || "download".equals(cmd) ||
- ("activate".equals(cmd) && state == INSTALLED) ||
- ("deactivate".equals(cmd) && state == ACTIVE)) {
- strings.add(app.id().name());
+ if ("install".equals(cmd)) {
+ it = service.getRegisteredApplications().iterator();
+ while (it.hasNext()) {
+ strings.add(it.next().id().name());
+ }
+ } else {
+ while (it.hasNext()) {
+ Application app = it.next();
+ ApplicationState state = service.getState(app.id());
+ if ("uninstall".equals(cmd) || "download".equals(cmd) ||
+ ("activate".equals(cmd) && state == INSTALLED) ||
+ ("deactivate".equals(cmd) && state == ACTIVE)) {
+ strings.add(app.id().name());
+ }
}
}