Propagate item selection to the map location

Update accepted types

handle connected gateway version
diff --git a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorContentProvider.java b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorContentProvider.java
index 51ad930..c422976 100644
--- a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorContentProvider.java
+++ b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorContentProvider.java
@@ -70,15 +70,14 @@
 		} else if (parentElement instanceof Gateway) {
 			return ((Gateway) parentElement).getDevice().toArray();	
 		} else if (parentElement instanceof Device) {
-			try {
-				DeviceImpl device=(DeviceImpl)parentElement;
-				GatewayImpl gateway=(GatewayImpl)device.eContainer();
-				if(ModelEditor.getInstance().getServicesId(gateway.getName(),device.getName()).size()==0){
-					ModelUpdater.getInstance().updateServices(gateway.getName(),device.getName(), true);
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
+//			try {
+//				DeviceImpl device=(DeviceImpl)parentElement;
+//				GatewayImpl gateway=(GatewayImpl)device.eContainer();
+//				if(ModelEditor.getInstance().getServicesId(gateway.getName(),device.getName()).size()==0)
+//					ModelUpdater.getInstance().updateServices(gateway.getName(),device.getName());				
+//			} catch (Exception e) {
+//				e.printStackTrace();
+//			}
 			return ((Device) parentElement).getService().toArray();
 		} else if (parentElement instanceof Service) {
 			return ((Service) parentElement).getResource().toArray();
diff --git a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorFilterView.java b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorFilterView.java
index be2440f..c41a227 100644
--- a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorFilterView.java
+++ b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/DeviceNavigatorFilterView.java
@@ -16,17 +16,22 @@
 package org.eclipse.sensinact.studio.navigator.device;
 
 import org.apache.log4j.Logger;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.transaction.ResourceSetChangeEvent;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.window.Window;
+import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceUpdateManager;
 import org.eclipse.sensinact.studio.model.manager.listener.modelset.ResourceModelSetListener;
 import org.eclipse.sensinact.studio.model.manager.listener.modelset.ResourceModelSetManager;
 import org.eclipse.sensinact.studio.model.manager.modelupdater.ModelEditor;
+import org.eclipse.sensinact.studio.model.resource.utils.GPScoordinates;
 import org.eclipse.sensinact.studio.navigator.device.commands.OpenResourceInvokerHandler;
 import org.eclipse.sensinact.studio.navigator.device.doubleclick.BasicQueryResourceHelper;
 import org.eclipse.sensinact.studio.navigator.device.filter.SensinactFilteredTree;
@@ -34,6 +39,7 @@
 import org.eclipse.sensinact.studio.navigator.device.toolbar.dialog.GatewayConfigDialog;
 import org.eclipse.sensinact.studio.preferences.ConfigurationManager;
 import org.eclipse.sensinact.studio.preferences.GatewayHttpConfig;
+import org.eclipse.sensinact.studio.resource.Device;
 import org.eclipse.sensinact.studio.resource.Gateway;
 import org.eclipse.sensinact.studio.resource.Resource;
 import org.eclipse.swt.SWT;
@@ -55,7 +61,7 @@
 /**
  * @author Etienne Gandrille
  */
-public class DeviceNavigatorFilterView extends ViewPart implements ResourceModelSetListener,IDoubleClickListener {
+public class DeviceNavigatorFilterView extends ViewPart implements ResourceModelSetListener,IDoubleClickListener, ISelectionChangedListener {
 
 	private static final Logger logger = Logger.getLogger(DeviceNavigatorFilterView.class);
 
@@ -90,6 +96,7 @@
 		Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() };
 		viewer.addDragSupport(ops, transfers, cd);
 		viewer.addDoubleClickListener(this);
+		viewer.addSelectionChangedListener(this);
 		
 		try {
 			tree.getViewer().setInput(ModelEditor.getInstance().getViewerInput());
@@ -135,7 +142,7 @@
 				MessageDialog.openError(parent, "Error", "Can't find gateway " + gateway.getName());
 				logger.error("Can't find gateway " + gateway.getName());
 			} else {
-				GatewayConfigDialog dialog = new GatewayConfigDialog(parent, config.getName(), config.getURL().getHost(), config.getURL().getPort(), config.getTimeout(), config.getUsername(), config.getPassword());
+				GatewayConfigDialog dialog = new GatewayConfigDialog(parent, config.getName(), config.getURL().getHost(), config.getURL().getPort(), config.getTimeout(), config.getUsername(), config.getPassword(), config.getVersion());
 				
 				if (dialog.open() == Window.OK) {
 					GatewayHttpConfig gatewayConfig = dialog.getGateway();
@@ -166,4 +173,39 @@
 	public void setFocus() {
 		viewer.getTree().setFocus();		
 	}
+
+	@Override
+	public void selectionChanged(SelectionChangedEvent event) {
+		IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+		Object element = selection.getFirstElement();
+		if(element != null && element instanceof EObject) {			
+			while(true) {
+				if(element instanceof Device) {
+					break;
+				}
+				if(((EObject)element).eContainer()==null) {
+					element = null;
+					break;
+				}
+				element = ((EObject)element).eContainer();
+			}
+		}
+		if(element == null)
+			return;		
+		Device device = (Device) element;
+		String location = device.getLocation();
+		if(location == null)
+			return;
+		String[] coordinates = location.split(":");
+		if(coordinates.length != 2)
+			return;
+		try {			
+			DeviceUpdateManager manager =DeviceUpdateManager.getInstance();
+			double lat = Double.valueOf(coordinates[0]);
+			double lon = Double.valueOf(coordinates[1]);
+			manager.updateDeviceSelection(new GPScoordinates(lat, lon));
+		}catch(Exception e) {
+			e.printStackTrace();
+		}		
+	}
 }
diff --git a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/toolbar/dialog/GatewayConfigDialog.java b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/toolbar/dialog/GatewayConfigDialog.java
index d018051..77c016d 100644
--- a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/toolbar/dialog/GatewayConfigDialog.java
+++ b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/toolbar/dialog/GatewayConfigDialog.java
@@ -10,6 +10,8 @@
  */
 package org.eclipse.sensinact.studio.navigator.device.toolbar.dialog;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.TitleAreaDialog;
 import org.eclipse.sensinact.studio.preferences.GatewayHttpConfig;
@@ -18,8 +20,11 @@
 import org.eclipse.swt.events.FocusListener;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
@@ -36,6 +41,7 @@
 	// also used for storing values while closing window
 	private String name = "NewConfiguration";
 	private String address = "";
+	private int version = -1;
 	private int port = 8080;
 	private int timeout = 10000;
 	private String username;
@@ -45,6 +51,7 @@
 	// Widgets
 	private Text nameText;
 	private Text addressText;
+	private Combo versionList;
 	private Spinner portSpinner;
 	private Spinner timeoutSpinner;
 	private Text usernameText;
@@ -60,10 +67,11 @@
 		this.password = "";
 	}
 	
-	public GatewayConfigDialog(Shell parent, String name, String address, int port, int timeout, String username, String password) {
+	public GatewayConfigDialog(Shell parent, String name, String address, int port, int timeout, String username, String password,int version) {
 		super(parent);
 		this.name = name;
 		this.address = address;
+		this.version = version;
 		this.port = port;
 		this.timeout = timeout;
 		this.isEditable = false;
@@ -73,7 +81,7 @@
 	}
 
 	public GatewayHttpConfig getGateway() {
-		return new GatewayHttpConfig(name, address, port, timeout, username, password);
+		return new GatewayHttpConfig(name, address, port, timeout, username, password, version);
 	}
 	
 	@Override
@@ -97,6 +105,8 @@
 		addressText = createTextField(container, "Address", gatewayNames, address, true, false); 
 		addressText.setToolTipText("The address of the gateway.\navailable addresses:\nhttp://localhost\nhttp://192.168.1.69\nlocalhost\n192.168.1.69");				
 		
+		versionList = createList(container, "Version", new String[] {"1","2"}, version);
+		
 		// Spinner fields
 		portSpinner = createSpinnerField(container, "Port", 10000, port);
 		timeoutSpinner = createSpinnerField(container, "Timeout (ms)", 60000, timeout);		
@@ -157,6 +167,37 @@
 		return portSpinner;
 	}
 	
+	
+	private Combo createList(Composite container, String label, String[] versions, int initValue) {
+		// label
+		new Label(container, SWT.NONE).setText(label);
+		// label
+		Combo list = new Combo(container, SWT.DROP_DOWN);
+		list.setLayoutData(new GridData(GridData.FILL, SWT.TOP, true, false));
+		
+		// field
+		int i=0; 
+		for(;i<versions.length;i++) {
+			if(Integer.parseInt(versions[i]) == initValue)
+				break;
+		}
+		final AtomicInteger index = new AtomicInteger(i);
+		list.setItems(versions);
+		list.select(i);
+		list.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {	
+				Combo c = ((Combo)e.getSource());
+				GatewayConfigDialog.this.version = Integer.parseInt(c.getItem(c.getSelectionIndex()));
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}			
+		});
+		return list;
+	}
+	
 	protected void createButtonsForButtonBar(Composite parent) {
 		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
 		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
@@ -170,6 +211,7 @@
 		this.timeout = timeoutSpinner.getSelection();
 		this.username = usernameText.getText();
 		this.password = passwordText.getText();
+		this.version = Integer.parseInt(versionList.getItem(versionList.getSelectionIndex()));
 		super.okPressed();
 	}
 	
diff --git a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/ui/dialogs/resourceInvoker/parameterfield/TextField.java b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/ui/dialogs/resourceInvoker/parameterfield/TextField.java
index 7c01e36..f7b5197 100644
--- a/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/ui/dialogs/resourceInvoker/parameterfield/TextField.java
+++ b/ui/org.eclipse.sensinact.studio.navigator.device/src/org/eclipse/sensinact/studio/navigator/device/ui/dialogs/resourceInvoker/parameterfield/TextField.java
@@ -20,6 +20,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Text;
+import org.json.JSONArray;
 import org.json.JSONObject;
 
 /**
@@ -32,7 +33,7 @@
 	}
 
 	public static List<String> getAcceptedTypes() {
-		return Arrays.asList("string", JSONObject.class.getName());
+		return Arrays.asList("string", "object", "array", JSONArray.class.getName(), JSONObject.class.getName());
 	}
 
 	protected Control createWidget(Composite parameterListComposite, final String name) {