Handle device icon update
diff --git a/ui/org.eclipse.sensinact.studio.view.outdoor/.classpath b/ui/org.eclipse.sensinact.studio.view.outdoor/.classpath
index 098194c..01836c4 100644
--- a/ui/org.eclipse.sensinact.studio.view.outdoor/.classpath
+++ b/ui/org.eclipse.sensinact.studio.view.outdoor/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/ui/org.eclipse.sensinact.studio.view.outdoor/META-INF/MANIFEST.MF b/ui/org.eclipse.sensinact.studio.view.outdoor/META-INF/MANIFEST.MF
index 325c5e3..dd52d3b 100644
--- a/ui/org.eclipse.sensinact.studio.view.outdoor/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.sensinact.studio.view.outdoor/META-INF/MANIFEST.MF
@@ -8,6 +8,7 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.ui,
+ org.eclipse.emf.transaction,
  org.eclipse.core.runtime,
  org.eclipse.sensinact.studio.model.resource,
  org.eclipse.sensinact.studio.webapp.outdoor,
diff --git a/ui/org.eclipse.sensinact.studio.view.outdoor/src/org/eclipse/sensinact/studio/view/outdoor/OutdoorDeploymentView.java b/ui/org.eclipse.sensinact.studio.view.outdoor/src/org/eclipse/sensinact/studio/view/outdoor/OutdoorDeploymentView.java
index 625839a..ce0a345 100644
--- a/ui/org.eclipse.sensinact.studio.view.outdoor/src/org/eclipse/sensinact/studio/view/outdoor/OutdoorDeploymentView.java
+++ b/ui/org.eclipse.sensinact.studio.view.outdoor/src/org/eclipse/sensinact/studio/view/outdoor/OutdoorDeploymentView.java
@@ -24,8 +24,10 @@
 import org.eclipse.sensinact.studio.http.services.server.serverstarted.ServerUpdatedListener;
 import org.eclipse.sensinact.studio.http.services.server.serverstarted.ServerUpdatedManager;
 import org.eclipse.sensinact.studio.http.services.server.serverstarted.UpdateDescriptor;
+import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceIconListener;
 import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceLocationListener;
-import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceLocationManager;
+import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceUpdateManager;
+import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceSelectionListener;
 import org.eclipse.sensinact.studio.model.resource.utils.DeviceDescriptor;
 import org.eclipse.sensinact.studio.model.resource.utils.GPScoordinates;
 import org.eclipse.sensinact.studio.preferences.ConfigurationManager;
@@ -53,7 +55,7 @@
 /**
  * @author Nicolas Hili, Etienne Gandrille
  */
-public class OutdoorDeploymentView implements ServerUpdatedListener, DeviceLocationListener {
+public class OutdoorDeploymentView implements ServerUpdatedListener, DeviceLocationListener,  DeviceIconListener, DeviceSelectionListener {
 
 	private static final Logger logger = Logger.getLogger(OutdoorDeploymentView.class);
 	
@@ -84,10 +86,12 @@
 		dndShell.setVisible(false);
 		dndComposite = new Composite(dndShell, SWT.NO_BACKGROUND);
 		dndComposite.setVisible(false);
-
+		DeviceUpdateManager manager = DeviceUpdateManager.getInstance();
 		// updates device position on the map
-		DeviceLocationManager.getInstance().addDeviceLocationListener(this);
-
+		manager.addDeviceLocationListener(this);
+		manager.addDeviceSelectionListener(this);
+		manager.addDeviceIconListener(this);
+		
 		// swap browserStarted flag to true when browser is ready
 		browser.addProgressListener(new BrowserProgressListener());
 
@@ -137,13 +141,15 @@
 	/* DeviceLocation */
 	/* ============== */
 
+	
 	@Override
 	public void deviceLocationUpdated(final GPScoordinates coordinate, final DeviceDescriptor descriptor) {	
 		Display.getDefault().asyncExec(new Runnable() {
 			@Override
 			public void run() {
 				String dev = "'" + descriptor.toString() + "'";
-				String cmd = "updateDeviceLocation(" + coordinate.getLat() + "," + coordinate.getLng() + "," + dev + ");";
+				String icon = "'" + descriptor.getIcon() + "'";
+				String cmd = "updateDeviceLocation(" + coordinate.getLat() + "," + coordinate.getLng() + "," + dev + "," + icon + ");";
 				browser.execute(cmd);
 			}
 		});	
@@ -289,11 +295,11 @@
 					String device = tab[1];
 					
 					// try to update on server
-					boolean locationUpdated = DeviceLocationManager.getInstance().updateLocationInServer(new DeviceDescriptor(gateway, device), new GPScoordinates(lat, lng));
+					boolean locationUpdated = DeviceUpdateManager.getInstance().updateLocationInServer(new DeviceDescriptor(gateway, device), new GPScoordinates(lat, lng));
 					
 					if (locationUpdated) {
 						String dev = "'" + gateway + "/" + device + "'";
-						String cmd = "return updateDeviceLocation(" + lat + "," + lng + "," + dev + ");";
+						String cmd = "return updateDeviceLocation(" + lat + "," + lng + "," + dev + ", 'default');";
 						browser.evaluate(cmd);
 					} else {
 						Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();						
@@ -307,4 +313,26 @@
 		public void dropAccept(DropTargetEvent event) {
 		}
 	}
+
+	@Override
+	public void deviceSelected(GPScoordinates coordinate) {
+		Display.getDefault().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				browser.execute("map.setView(["+coordinate.getLat()+","+coordinate.getLng()+"]);");
+			}
+		});
+		
+	}
+
+	@Override
+	public void deviceIconUpdated(DeviceDescriptor descriptor) {
+		Display.getDefault().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				String cmd = "updateDeviceIcon(\"" + descriptor.toString() + "\",\"" + descriptor.getIcon() + "\");";
+				browser.execute(cmd);
+			}
+		});
+	}
 }