Gateway selection wehen installing applications
diff --git a/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditor.java b/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditor.java
index 0fa6c8c..028d6d5 100644
--- a/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditor.java
+++ b/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditor.java
@@ -237,7 +237,6 @@
@SuppressWarnings("unchecked")
public List<String> getGatewaysId() throws InterruptedException {
-
setupStudio();
return (List<String>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<List<String>>() {
@@ -255,6 +254,25 @@
}
@SuppressWarnings("unchecked")
+ public List<String> getConnectedGatewaysId() throws InterruptedException {
+ setupStudio();
+
+ return (List<String>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<List<String>>() {
+ @Override
+ public void run() {
+ List<String> retval = new ArrayList<String>();
+ EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
+ for (Gateway gateway : gateways) {
+ if (gateway.getDevice().size() != 0)
+ retval.add(gateway.getName());
+ }
+ setResult(retval);
+ return;
+ }
+ });
+ }
+
+ @SuppressWarnings("unchecked")
public List<String> getDevicesId(final String gatewayName) throws InterruptedException {
//setupStudio();
diff --git a/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaDeployHandler.java b/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaDeployHandler.java
index 96ccd9b..5d6c6b2 100644
--- a/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaDeployHandler.java
+++ b/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaDeployHandler.java
@@ -11,15 +11,17 @@
package org.eclipse.sensinact.studio.view.projectexplorer.handler;
import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
import org.eclipse.sensinact.studio.http.client.GatewayHttpClient;
import org.eclipse.sensinact.studio.http.client.snamessage.MsgSensinact;
+import org.eclipse.sensinact.studio.model.manager.modelupdater.ModelEditor;
import org.eclipse.sensinact.studio.model.resource.utils.Constants;
import org.eclipse.sensinact.studio.model.resource.utils.ResourceDescriptor;
import org.eclipse.sensinact.studio.model.resource.utils.Segments;
@@ -28,9 +30,9 @@
import org.json.JSONException;
import org.json.JSONObject;
-import org.eclipse.sensinact.studio.language.sensinact.DSL_Resource;
import org.eclipse.sensinact.studio.language.sensinact.DSL_SENSINACT;
import org.eclipse.sensinact.studio.resource.AccessMethodType;
+import org.eclipse.sensinact.studio.ui.common.dialog.BasicListDialog;
/**
* @author Etienne Gandrille
@@ -49,10 +51,19 @@
try {
DSL_SENSINACT sna = fileURI2eca(snaFileURI);
JSONObject app = generateJsonApplication(sna, fileName);
- String gatewayID = getGatewayID(sna);
- MsgSensinact response = install(Constants.createInstallAppRD(gatewayID), app);
- String title = response.isValid() ? "Application deployed" : "Application deploy failed";
- displayResult(shell, title, fileName, response);
+
+ List<String> gatewayIds = ModelEditor.getInstance().getConnectedGatewaysId();
+ if (gatewayIds.size() == 0) {
+ MessageDialog.openError(getShell(event), "Application installation failed", "No connected gateway available.");
+ } else {
+ BasicListDialog listDialog = new BasicListDialog(getShell(event), "Connected gateways", "Please choose a Gateway", gatewayIds.toArray(new String[0]));
+ if (listDialog.open() == Window.OK) {
+ String gatewayID = listDialog.getFirstResult();
+ MsgSensinact response = install(Constants.createInstallAppRD(gatewayID), app);
+ String title = response.isValid() ? "Application deployed" : "Application deploy failed";
+ displayResult(shell, title, fileName, response);
+ }
+ }
} catch (Exception e) {
displayResult(shell, "Application deploy failed", fileName, e);
logger.error("Application deploy failed", e);
@@ -74,23 +85,4 @@
logger.debug(app);
return app;
}
-
- private String getGatewayID(DSL_SENSINACT sna) {
- Set<String> gateways = new HashSet<>();
-
- if (sna == null)
- throw new IllegalArgumentException("");
-
- for (DSL_Resource resource : sna.getResources()) {
- gateways.add(resource.getGatewayID());
- }
-
- if (gateways.size() == 0) {
- throw new IllegalArgumentException("No gateway referenced in the sna file");
- }
- if (gateways.size() == 1) {
- return gateways.iterator().next();
- }
- throw new IllegalArgumentException(gateways.size() + " gateways are referenced in the sna file. Only one is allowed.");
- }
}
diff --git a/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaRemoveHandler.java b/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaRemoveHandler.java
index 70dc582..7b3ead5 100644
--- a/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaRemoveHandler.java
+++ b/ui/org.eclipse.sensinact.studio.view.projectexplorer/src/org/eclipse/sensinact/studio/view/projectexplorer/handler/SnaRemoveHandler.java
@@ -52,7 +52,7 @@
if (gatewayIds.size() == 0) {
MessageDialog.openError(getShell(event), "Application removal failed", "Application not found.\nIs the gateway connected?");
} else {
- BasicListDialog listDialog = new BasicListDialog(getShell(event), "Gateway selection", "Please choose a Gateway", gatewayIds.toArray(new String[0]));
+ BasicListDialog listDialog = new BasicListDialog(getShell(event), "Connected gateways", "Please choose a Gateway", gatewayIds.toArray(new String[0]));
if (listDialog.open() == Window.OK) {
String gatewayID = listDialog.getFirstResult();
MsgSensinact response = uninstall(Constants.createUninstallAppRD(gatewayID), fileName);