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