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