Restlet and Jackson migrated to newer version
diff --git a/services/org.eclipse.sensinact.studio.http.messages/META-INF/MANIFEST.MF b/services/org.eclipse.sensinact.studio.http.messages/META-INF/MANIFEST.MF
index cd2490a..7a51051 100644
--- a/services/org.eclipse.sensinact.studio.http.messages/META-INF/MANIFEST.MF
+++ b/services/org.eclipse.sensinact.studio.http.messages/META-INF/MANIFEST.MF
@@ -10,10 +10,10 @@
org.eclipse.sensinact.studio.model.resource,
org.apache.log4j,
org.eclipse.sensinact.studio.preferences,
- com.fasterxml.jackson.core.jackson-databind;bundle-version="2.6.2",
- org.restlet.ext.jackson;bundle-version="2.2.3",
- com.fasterxml.jackson.core.jackson-core;bundle-version="2.6.2",
- org.eclipse.jetty.websocket.common;bundle-version="9.2.15"
+ com.fasterxml.jackson.core.jackson-databind,
+ org.restlet.ext.jackson,
+ com.fasterxml.jackson.core.jackson-core,
+ org.eclipse.jetty.websocket.common
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.sensinact.studio.http.messages.snamessage,
diff --git a/services/org.eclipse.sensinact.studio.http.services/META-INF/MANIFEST.MF b/services/org.eclipse.sensinact.studio.http.services/META-INF/MANIFEST.MF
index 5567aed..8ca2bf3 100644
--- a/services/org.eclipse.sensinact.studio.http.services/META-INF/MANIFEST.MF
+++ b/services/org.eclipse.sensinact.studio.http.services/META-INF/MANIFEST.MF
@@ -10,11 +10,11 @@
org.eclipse.sensinact.studio.model.resource,
org.apache.log4j,
org.eclipse.sensinact.studio.preferences,
- com.fasterxml.jackson.core.jackson-databind;bundle-version="2.6.2",
- org.restlet.ext.jackson;bundle-version="2.2.3",
- com.fasterxml.jackson.core.jackson-core;bundle-version="2.6.2",
- org.eclipse.jetty.websocket.common;bundle-version="9.2.15",
- org.eclipse.sensinact.studio.http.messages;bundle-version="1.0.0"
+ com.fasterxml.jackson.core.jackson-databind,
+ org.restlet.ext.jackson,
+ com.fasterxml.jackson.core.jackson-core,
+ org.eclipse.jetty.websocket.common,
+ org.eclipse.sensinact.studio.http.messages
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.eclipse.sensinact.studio.http.services.client,
diff --git a/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/GatewayHttpClient.java b/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/GatewayHttpClient.java
index ad84d1f..c725a1b 100644
--- a/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/GatewayHttpClient.java
+++ b/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/GatewayHttpClient.java
@@ -145,10 +145,6 @@
MsgSensinact retval;
try {
//httpURLConnection.setRequestProperty("Connection","close");
-
-
-
-
Representation cmd = clientResource.get();
json = cmd.getText();
@@ -181,6 +177,10 @@
}
Representation postResponse = clientResource.post(stringRep);
+ if (postResponse == null) {
+ logger.error("postResponse is null for " + stringRep);
+ }
+
Status status = clientResource.getResponse().getStatus();
diff --git a/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfigurator.java b/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfigurator.java
index 0bb34fe..b00373c 100644
--- a/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfigurator.java
+++ b/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfigurator.java
@@ -13,7 +13,7 @@
import java.util.Map;
import org.eclipse.sensinact.studio.preferences.GatewayHttpConfig;
-import org.restlet.engine.header.Header;
+import org.restlet.data.Header;
import org.restlet.resource.ClientResource;
import org.restlet.util.Series;
diff --git a/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfiguratorToken.java b/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfiguratorToken.java
index dd531ba..8ff7659 100644
--- a/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfiguratorToken.java
+++ b/services/org.eclipse.sensinact.studio.http.services/src/org/eclipse/sensinact/studio/http/services/client/RequestConfiguratorToken.java
@@ -11,7 +11,7 @@
package org.eclipse.sensinact.studio.http.services.client;
import org.eclipse.sensinact.studio.preferences.GatewayHttpConfig;
-import org.restlet.engine.header.Header;
+import org.restlet.data.Header;
import org.restlet.resource.ClientResource;
import org.restlet.util.Series;
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 811980d..161c22e 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
@@ -11,23 +11,15 @@
package org.eclipse.sensinact.studio.model.manager.modelupdater;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
+import java.util.function.Supplier;
-import org.apache.log4j.Logger;
-import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.WrappedException;
import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.RunnableWithResult;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.sensinact.studio.http.messages.snamessage.MsgSensinact;
import org.eclipse.sensinact.studio.http.messages.snamessage.describeresource.MsgDescribeRessource;
-import org.eclipse.sensinact.studio.http.messages.snamessage.describeresource.ObjectAccessMethods;
-import org.eclipse.sensinact.studio.http.messages.snamessage.describeresource.ObjectParameter;
import org.eclipse.sensinact.studio.http.services.client.GatewayHttpClient;
import org.eclipse.sensinact.studio.model.manager.listener.devicelocation.DeviceLocationManager;
import org.eclipse.sensinact.studio.model.resource.utils.DeviceDescriptor;
@@ -39,32 +31,17 @@
import org.eclipse.sensinact.studio.preferences.GatewayHttpConfig;
import org.eclipse.sensinact.studio.resource.AccessMethod;
import org.eclipse.sensinact.studio.resource.AccessMethodType;
-import org.eclipse.sensinact.studio.resource.Device;
-import org.eclipse.sensinact.studio.resource.Gateway;
-import org.eclipse.sensinact.studio.resource.Parameter;
-import org.eclipse.sensinact.studio.resource.Resource;
-import org.eclipse.sensinact.studio.resource.ResourceFactory;
-import org.eclipse.sensinact.studio.resource.ResourcePackage;
-import org.eclipse.sensinact.studio.resource.Service;
import org.eclipse.sensinact.studio.resource.Studio;
/**
* @author Nicolas Hili, Etienne Gandrille
*/
-public class ModelEditor implements ConfigurationListerner {
+public class ModelEditor extends ModelEditorHelpers implements ConfigurationListerner {
/* ===================== */
/* Model data structures */
/* ===================== */
- private static org.eclipse.emf.ecore.resource.Resource resource;
-
- private final static String EDITING_DOMAIN_ID = "org.eclipse.sensinact.studio.model.resource.editingDomain";
-
- private static TransactionalEditingDomain editingDomain;
-
- private static final Logger logger = Logger.getLogger(ModelEditor.class);
-
private static ModelEditor INSTANCE = null;
private ModelEditor() {
@@ -77,6 +54,10 @@
return INSTANCE;
}
+ /* ====================== */
+ /* ConfigurationListerner */
+ /* ====================== */
+
@Override
public void gatewayAddedOrUpdatedNotif(GatewayHttpConfig gateway) {
addGatewayIfNotExist_UNSAFE(gateway.getName());
@@ -91,23 +72,39 @@
public void studioPortUpdatedNotif(int port) {
// do nothing
}
-
- private synchronized static TransactionalEditingDomain getEditingDomain() {
- if (editingDomain == null) {
- editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EDITING_DOMAIN_ID);
- }
- return editingDomain;
+
+ /* ============= */
+ /* Run exclusive */
+ /* ============= */
+
+ private void runExclusive(Runnable runnable) {
+ RecordingCommand command = new RecordingCommand(getEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ USE_IN_RUNEXLUSIVE_setupStudio();
+ runnable.run();
+ }
+ };
+ getEditingDomain().getCommandStack().execute(command);
+ }
+
+ @SuppressWarnings("unchecked")
+ private <T> T runExclusive(Supplier<T> supplier) throws InterruptedException {
+ return (T) getEditingDomain().runExclusive(new RunnableWithResult.Impl<T>() {
+ @Override
+ public void run() {
+ USE_IN_RUNEXLUSIVE_setupStudio();
+ T value = supplier.get();
+ setResult(value);
+ return;
+ }
+ });
}
- private static org.eclipse.emf.ecore.resource.Resource getResource() {
- if (resource == null) {
- String path = "/org.eclipse.sensinact.studio.model.resource/cache/resource.cache";
- URI uri = URI.createPlatformPluginURI(path, true);
- resource = getEditingDomain().getResourceSet().createResource(uri);
- }
- return resource;
- }
-
+ /* ========== */
+ /* Root level */
+ /* ========== */
+
/**
* IMPORTANT. This method MUST NOT BE USED TO UPDATE THE MODEL !!!!
*
@@ -116,294 +113,69 @@
*/
public Studio getViewerInput() throws InterruptedException {
- setupStudio();
+ runExclusive(() -> USE_IN_RUNEXLUSIVE_setupStudio());
// Init available gateways names
for (GatewayHttpConfig gateway : ConfigurationManager.getGateways()) {
addGatewayIfNotExist_UNSAFE(gateway.getName());
}
- return (Studio) getEditingDomain().runExclusive(new RunnableWithResult.Impl<Studio>() {
- @Override
- public void run() {
- setResult(USE_IN_RUNEXLUSIVE_getStudio());
- return;
- }
- });
+ return runExclusive(() -> USE_IN_RUNEXLUSIVE_getStudio());
}
-
- private void setupStudio() {
-
- final String label=getResource() instanceof Resource?((Resource)getResource()).getName():"Unknown resource";
-
- RecordingCommand command = new RecordingCommand(getEditingDomain(),label) {
- @Override
- protected void doExecute() {
- EList<EObject> contents = getResource().getContents();
- if (contents.size() == 0)
- getResource().getContents().add(ResourceFactory.eINSTANCE.createStudio());
- }
- };
- getEditingDomain().getCommandStack().execute(command);
- }
-
- /* ====================== */
- /* Internal NON EXCLUSIVE */
- /* ====================== */
-
- private static Studio USE_IN_RUNEXLUSIVE_getStudio() {
- EList<EObject> contents = getResource().getContents();
- return (Studio) contents.get(0);
- }
-
- private static Gateway USE_IN_RUNEXLUSIVE_getGateway(String gatewayName) {
- EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
- for (Gateway gateway : gateways) {
- if (gateway.getName().equals(gatewayName)) {
- return gateway;
- }
- }
- return null;
- }
-
- private static Device USE_IN_RUNEXLUSIVE_getDevice(String gatewayName, String devicename) {
-
- Gateway gateway = USE_IN_RUNEXLUSIVE_getGateway(gatewayName);
- if (gateway == null)
- return null;
-
- EList<Device> devices = gateway.getDevice();
- for (Device device : devices) {
- if (device.getName().equals(devicename)) {
- return device;
- }
- }
- return null;
- }
-
- private static Service USE_IN_RUNEXLUSIVE_getService(String gatewayName, String devicename, String servicename) {
- Device device = USE_IN_RUNEXLUSIVE_getDevice(gatewayName, devicename);
- if (device == null)
- return null;
-
- for (Service service : device.getService()) {
- if (service.getName().equals(servicename)) {
- return service;
- }
- }
-
- return null;
- }
-
- private static Resource USE_IN_RUNEXLUSIVE_getResource(ResourceDescriptor descriptor) {
- Service service = USE_IN_RUNEXLUSIVE_getService(descriptor.getGateway(), descriptor.getDevice(), descriptor.getService());
- if (service == null)
- return null;
-
- for (Resource resource : service.getResource()) {
- if (resource.getName().equals(descriptor.getResource())) {
- return resource;
- }
- }
-
- return null;
- }
-
- private void USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(final String gatewayName, final String deviceId) {
- if (USE_IN_RUNEXLUSIVE_getDevice(gatewayName, deviceId) != null)
- return;
-
- final Device addedDevice = ResourceFactory.eINSTANCE.createDevice();
- addedDevice.setName(deviceId);
- USE_IN_RUNEXLUSIVE_getGateway(gatewayName).getDevice().add(addedDevice);
- }
-
- private void USE_IN_RUNEXLUSIVE_addServiceIfNotExist(final String gatewayName, final String deviceId, final String serviceId) {
- if (USE_IN_RUNEXLUSIVE_getService(gatewayName, deviceId, serviceId) != null)
- return;
-
- final Service addedService = ResourceFactory.eINSTANCE.createService();
- addedService.setName(serviceId);
- try {
- USE_IN_RUNEXLUSIVE_getDevice(gatewayName, deviceId).getService().add(addedService);
- } catch (NullPointerException e) {
- e.printStackTrace();
- }
- }
-
+
/* ======= */
/* Get IDs */
/* ======= */
- @SuppressWarnings("unchecked")
public List<String> getGatewaysId() 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) {
- retval.add(gateway.getName());
- }
- setResult(retval);
- return;
- }
- });
- }
-
- @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;
- }
- });
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getGatewaysId());
}
- @SuppressWarnings("unchecked")
- public List<String> getDevicesId(final String gatewayName) throws InterruptedException {
-
- //setupStudio();
-
- return (List<String>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<List<String>>() {
- @Override
- public void run() {
- List<String> retval = new ArrayList<String>();
- EList<Device> devices = USE_IN_RUNEXLUSIVE_getGateway(gatewayName).getDevice();
- for (Device device : devices) {
- retval.add(device.getName());
- }
- setResult(retval);
- return;
- }
- });
+ public List<String> getConnectedGatewaysId() throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getConnectedGatewaysId());
+ }
+
+ public List<String> getDevicesId(String gatewayName) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getDevicesId(gatewayName));
}
- @SuppressWarnings("unchecked")
- public List<String> getServicesId(final String gatewayName, final String devicename) throws InterruptedException {
-
- //setupStudio();
-
- return (List<String>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<List<String>>() {
- @Override
- public void run() {
- List<String> retval = new ArrayList<String>();
- Device device = USE_IN_RUNEXLUSIVE_getDevice(gatewayName, devicename);
-
- if (device != null) {
- for (Service service : device.getService()) {
- retval.add(service.getName());
- }
- }
-
- setResult(retval);
- return;
- }
- });
+ public List<String> getServicesId(String gatewayName, String devicename) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getServicesId(gatewayName, devicename));
}
- @SuppressWarnings("unchecked")
- public List<String> getResourcesId(final String gatewayName, final String devicename, final String servicename) throws InterruptedException {
-
- setupStudio();
-
- return (List<String>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<List<String>>() {
- @Override
- public void run() {
- List<String> retval = new ArrayList<String>();
-
- Service service = USE_IN_RUNEXLUSIVE_getService(gatewayName, devicename, servicename);
-
- if (service != null) {
- for (Resource resource : service.getResource()) {
- retval.add(resource.getName());
- }
- }
-
- setResult(retval);
- return;
- }
- });
+ public List<String> getResourcesId(String gatewayName, String devicename, String servicename) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getResourcesId(gatewayName, devicename, servicename));
}
+ public EClass getResourceClass(final ResourceDescriptor descriptor) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXLUSIVE_getResource(descriptor).eClass());
+ }
+
/* ================= */
/* Find Applications */
/* ================= */
- @SuppressWarnings("unchecked")
public List<ServiceDescriptor> findApplications() throws InterruptedException {
-
- setupStudio();
-
- return (List<ServiceDescriptor>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<List<ServiceDescriptor>>() {
- @Override
- public void run() {
- List<ServiceDescriptor> retval = new ArrayList<>();
- EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
- for (Gateway gateway : gateways) {
- Device appManager = findAppManager(gateway.getDevice());
- if (appManager != null) {
- retval.addAll(findApplications(appManager));
- }
- }
- setResult(retval);
- return;
- }
-
- private Device findAppManager(EList<Device> devices) {
- for (Device device : devices) {
- if (device.getName().equals("AppManager"))
- return device;
- }
- return null;
- }
-
- private List<ServiceDescriptor> findApplications(Device appManager) {
- List<ServiceDescriptor> retval = new ArrayList<>();
-
- String gateway = ((Gateway) appManager.eContainer()).getName();
- String device = appManager.getName();
-
- for (Service service : appManager.getService()) {
- String srvName = service.getName();
- if (srvName != null && (! srvName.equalsIgnoreCase("admin"))) {
- retval.add(new ServiceDescriptor(gateway, device, srvName));
- }
- }
- return retval;
- }
- });
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_findApplications());
}
/* ============= */
/* Checks exists */
/* ============= */
- public boolean existsGateway(final String gatewayId) throws InterruptedException {
+ public boolean existsGateway(String gatewayId) throws InterruptedException {
return getGatewaysId().contains(gatewayId);
}
- public boolean existsDevice(final String gatewayId, String deviceId) throws InterruptedException {
+ public boolean existsDevice(String gatewayId, String deviceId) throws InterruptedException {
return getDevicesId(gatewayId).contains(deviceId);
}
- public boolean existsService(final String gatewayId, String deviceId, String serviceId) throws InterruptedException {
+ public boolean existsService(String gatewayId, String deviceId, String serviceId) throws InterruptedException {
return getServicesId(gatewayId, deviceId).contains(serviceId);
}
- public boolean existsResource(final String gatewayId, String deviceId, String serviceId, String resourceId) throws InterruptedException {
+ public boolean existsResource(String gatewayId, String deviceId, String serviceId, String resourceId) throws InterruptedException {
return existsResource(new ResourceDescriptor(gatewayId, deviceId, serviceId, resourceId));
}
@@ -414,72 +186,21 @@
/* ============== */
/* Access Methods */
/* ============== */
-
- @SuppressWarnings("unchecked")
- public EList<AccessMethod> getAccessMethods(final ResourceDescriptor descriptor) throws InterruptedException {
-
- setupStudio();
-
- EList<AccessMethod> accessMethods = null;
- accessMethods = (EList<AccessMethod>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<EList<AccessMethod>>() {
- @Override
- public void run() {
- EList<AccessMethod> accessMethods = new BasicEList<AccessMethod>();
- Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
- for (AccessMethod accessMethod : resource.getAccessMethod()) {
- accessMethods.add(accessMethod);
- }
- setResult(accessMethods);
- return;
- }
- });
- return accessMethods;
+
+ public EList<AccessMethod> getAccessMethods(ResourceDescriptor descriptor) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getAccessMethods(descriptor));
}
- @SuppressWarnings("unchecked")
- public EList<AccessMethod> getAccessMethodsWithType(final ResourceDescriptor descriptor, final AccessMethodType type) throws InterruptedException {
-
- setupStudio();
-
- EList<AccessMethod> accessMethods = null;
- accessMethods = (EList<AccessMethod>) getEditingDomain().runExclusive(new RunnableWithResult.Impl<EList<AccessMethod>>() {
- @Override
- public void run() {
- EList<AccessMethod> accessMethods = new BasicEList<AccessMethod>();
- Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
- for (AccessMethod accessMethod : resource.getAccessMethod()) {
- if (accessMethod.getType().equals(type)) {
- accessMethods.add(accessMethod);
- }
- }
- setResult(accessMethods);
- return;
- }
- });
- return accessMethods;
+ public int getAccessMethodNb(final ResourceDescriptor descriptor) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getAccessMethods(descriptor).size());
+ }
+
+ public EList<AccessMethod> getAccessMethodsWithType(ResourceDescriptor descriptor, AccessMethodType type) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getAccessMethodsWithType(descriptor, type));
}
- public AccessMethod getAccessMethodWithTypeNbParams(final ResourceDescriptor descriptor, final AccessMethodType type, final int nbOfParameters)
- throws InterruptedException {
-
- setupStudio();
-
- return (AccessMethod) getEditingDomain().runExclusive(new RunnableWithResult.Impl<AccessMethod>() {
- @Override
- public void run() {
- Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
- for (AccessMethod accessMethod : resource.getAccessMethod()) {
- if (accessMethod.getType().equals(type)) {
- if (accessMethod.getParameter().size() == nbOfParameters) {
- setResult(accessMethod);
- return;
- }
- }
- }
- setResult(null);
- return;
- }
- });
+ public AccessMethod getAccessMethodWithTypeNbParams(ResourceDescriptor descriptor, AccessMethodType type, int nbOfParameters) throws InterruptedException {
+ return runExclusive(() -> USE_IN_RUNEXCLUSIVE_getAccessMethodWithTypeNbParams(descriptor, type, nbOfParameters));
}
/* ================= */
@@ -490,63 +211,25 @@
// usually, if you want to add a gateway, use
// ConfigurationManager.addGateway
private void addGatewayIfNotExist_UNSAFE(final String gatewayName) {
-
- //setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
-
- @Override
- protected void doExecute() {
- if (USE_IN_RUNEXLUSIVE_getGateway(gatewayName) != null)
- return;
-
- final Gateway addedGateway = ResourceFactory.eINSTANCE.createGateway();
- addedGateway.setName(gatewayName);
- USE_IN_RUNEXLUSIVE_getStudio().getGateways().add(addedGateway);
- return;
- }
- };
- getEditingDomain().getCommandStack().execute(command);
+ runExclusive(() -> USE_IN_RUNEXLUSIVE_addGatewayIfNotExist(gatewayName));
}
public void addDeviceIfNotExist(final String gatewayName, final String deviceId) {
-
- //setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(gatewayName, deviceId);
- }
- };
- getEditingDomain().getCommandStack().execute(command);
+ runExclusive(() -> USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(gatewayName, deviceId));
}
public void addServiceIfNotExist(final String gatewayName, final String deviceId, final String serviceId) {
-
- //setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(gatewayName, deviceId);
- USE_IN_RUNEXLUSIVE_addServiceIfNotExist(gatewayName, deviceId, serviceId);
- }
- };
- getEditingDomain().getCommandStack().execute(command);
+ runExclusive(() -> {
+ USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(gatewayName, deviceId);
+ USE_IN_RUNEXLUSIVE_addServiceIfNotExist(gatewayName, deviceId, serviceId);
+ });
}
public void addResourceIfNotExist(final ResourceDescriptor descriptor) {
-
- //setupStudio();
-
- addServiceIfNotExist(descriptor.getGateway(), descriptor.getDevice(), descriptor.getService());
-
try {
if (!existsResource(descriptor)) {
Segments segment = new Segments.Builder().resource(descriptor).build();
-
MsgSensinact response = null;
try {
response = GatewayHttpClient.sendGetRequest(segment);
@@ -558,54 +241,8 @@
throw new RuntimeException("Can't get remote resources info for " + descriptor);
final MsgDescribeRessource responseMessage = (MsgDescribeRessource) response;
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
-
- if (USE_IN_RUNEXLUSIVE_getResource(descriptor) != null)
- return;
-
- // create resource
- String resourceType = responseMessage.getResponse().getType();
- EClass type = literalToType(resourceType);
- Resource createdResource = (Resource) ResourceFactory.eINSTANCE.create(type);
- createdResource.setName(descriptor.getResource());
-
- // create access methods
- for (ObjectAccessMethods am : responseMessage.getResponse().getAccessMethods()) {
- if (am != null) { // test to be removed after gateway bug fix
- AccessMethod accessMethod = ResourceFactory.eINSTANCE.createAccessMethod();
- accessMethod.setType(AccessMethodType.get(am.getName()));
-
- Parameter[] parameters = new Parameter[am.getParameters().size()];
- for (int i = 0; i < am.getParameters().size(); i++) {
- ObjectParameter param = am.getParameters().get(i);
- Parameter parameter = ResourceFactory.eINSTANCE.createParameter();
- parameter.setName(param.getName());
- parameter.setType(param.getType());
- parameters[i] = parameter;
- }
-
- for (Parameter parameter : parameters) {
- accessMethod.getParameter().add(parameter);
- }
- createdResource.getAccessMethod().add(accessMethod);
- }
- }
-
- USE_IN_RUNEXLUSIVE_getService(descriptor.getGateway(), descriptor.getDevice(), descriptor.getService()).getResource().add(
- createdResource);
-
- return;
- }
- };
- try {
- getEditingDomain().getCommandStack().execute(command);
- }catch (WrappedException we){
- getEditingDomain().getCommandStack().flush();
- //Caused by multiple events received.
- }
+
+ runExclusive(() -> USE_IN_RUNEXLUSIVE_addResourceIfNotExist(descriptor, responseMessage));
}
} catch (NullPointerException | InterruptedException e) {
getEditingDomain().getCommandStack().flush();
@@ -613,30 +250,6 @@
}
}
- static EClass literalToType(final String type) {
-
- final EClass resourceType;
- // Literals
- EClass stateVariableLiteral = ResourcePackage.Literals.STATE_VARIABLE;
- EClass actionLiteral = ResourcePackage.Literals.ACTION;
- EClass propertyLiteral = ResourcePackage.Literals.PROPERTY;
- EClass sensorDataLiteral = ResourcePackage.Literals.SENSOR_DATA;
-
- if ("STATE_VARIABLE".equals(type)) {
- resourceType = stateVariableLiteral;
- } else if ("ACTION".equals(type)) {
- resourceType = actionLiteral;
- } else if ("PROPERTY".equals(type)) {
- resourceType = propertyLiteral;
- } else if ("SENSOR".equals(type)) {
- resourceType = sensorDataLiteral;
- } else {
- logger.error(ModelEditor.class.getCanonicalName() + "::updateResource with type=" + type + " - Is it a bug or a feature ?");
- resourceType = actionLiteral;
- }
- return resourceType;
- }
-
/* ==================== */
/* REMOVE Objects by ID */
/* ==================== */
@@ -644,139 +257,25 @@
// USE CAREFULLY
// usually, if you want to remove a gateway, use
// ConfigurationManager.removeGateway
- private void removeGateway_UNSAFE(final String gatewayName) {
-
- setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
-
- for (int i = 0; i < gateways.size(); i++) {
- Gateway gateway = gateways.get(i);
- if (gateway.getName().equals(gatewayName)) {
- gateways.remove(i);
- return;
- }
- }
- }
- };
- getEditingDomain().getCommandStack().execute(command);
-
+ private void removeGateway_UNSAFE(String gatewayName) {
+ runExclusive(() -> USE_IN_RUNEXLUSIVE_removeGateway(gatewayName));
DeviceLocationManager.getInstance().deleteGatewayInStudio(gatewayName);
}
-
- public void clearGatewayContent(String name) {
- try {
- for (String device : getDevicesId(name)) {
- removeDevice(name, device);
- }
- } catch (InterruptedException e) {
- logger.error("Clear gateway content failed", e);
- }
+
+ public void clearGatewayContent(String gatewayName) {
+ runExclusive(() -> USE_IN_RUNEXCLUSIVE_removeAllDevices(gatewayName));
}
- public void removeDevice(final String gatewayName, final String deviceId) {
-
- setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- Gateway gateway = USE_IN_RUNEXLUSIVE_getGateway(gatewayName);
- if (gateway != null) {
- EList<Device> devices = gateway.getDevice();
- for (int i = 0; i < devices.size(); i++) {
- Device device = devices.get(i);
- if (deviceId.equals(device.getName())) {
- devices.remove(i);
- return;
- }
- }
- }
- }
- };
- getEditingDomain().getCommandStack().execute(command);
-
+ public void removeDevice(String gatewayName, String deviceId) {
+ runExclusive(() -> USE_IN_RUNEXCLUSIVE_removeDevice(gatewayName, deviceId));
DeviceLocationManager.getInstance().deleteDeviceInStudio(new DeviceDescriptor(gatewayName, deviceId));
}
-
- public void removeService(final String gatewayName, final String deviceId, final String serviceId) {
-
- //setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- Device device = USE_IN_RUNEXLUSIVE_getDevice(gatewayName, deviceId);
- if (device != null) {
- EList<Service> services = device.getService();
- for (int i = 0; i < services.size(); i++) {
- Service service = services.get(i);
- if (serviceId.equals(service.getName())) {
- services.remove(i);
- return;
- }
- }
- }
- }
- };
- getEditingDomain().getCommandStack().execute(command);
+
+ public void removeService(String gatewayName, String deviceId, String serviceId) {
+ runExclusive(() -> USE_IN_RUNEXCLUSIVE_removeService(gatewayName, deviceId, serviceId));
}
-
+
public void removeResource(final ResourceDescriptor descriptor) {
-
- setupStudio();
-
- RecordingCommand command = new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- Service service = USE_IN_RUNEXLUSIVE_getService(descriptor.getGateway(), descriptor.getDevice(), descriptor.getService());
- if (service != null) {
- EList<Resource> resources = service.getResource();
- for (int i = 0; i < resources.size(); i++) {
- Resource resource = resources.get(i);
- if (descriptor.getResource().equals(resource.getName())) {
- resources.remove(i);
- return;
- }
- }
- }
- }
- };
- getEditingDomain().getCommandStack().execute(command);
- }
-
- /* ==== */
- /* MISC */
- /* ==== */
-
- public EClass getResourceClass(final ResourceDescriptor descriptor) throws InterruptedException {
-
- //setupStudio();
-
- return (EClass) getEditingDomain().runExclusive(new RunnableWithResult.Impl<EClass>() {
- @Override
- public void run() {
- Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
- setResult(resource.eClass());
- return;
- }
- });
- }
-
- public int getAccessMethodNb(final ResourceDescriptor descriptor) throws InterruptedException {
-
- //setupStudio();
-
- return (Integer) getEditingDomain().runExclusive(new RunnableWithResult.Impl<Integer>() {
- @Override
- public void run() {
- Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
- setResult(new Integer(resource.getAccessMethod().size()));
- return;
- }
- });
+ runExclusive(() -> USE_IN_RUNEXCLUSIVE_removeResource(descriptor));
}
}
diff --git a/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditorHelpers.java b/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditorHelpers.java
new file mode 100644
index 0000000..2a474e6
--- /dev/null
+++ b/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelEditorHelpers.java
@@ -0,0 +1,410 @@
+package org.eclipse.sensinact.studio.model.manager.modelupdater;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.sensinact.studio.http.messages.snamessage.describeresource.MsgDescribeRessource;
+import org.eclipse.sensinact.studio.http.messages.snamessage.describeresource.ObjectAccessMethods;
+import org.eclipse.sensinact.studio.http.messages.snamessage.describeresource.ObjectParameter;
+import org.eclipse.sensinact.studio.model.resource.utils.ResourceDescriptor;
+import org.eclipse.sensinact.studio.model.resource.utils.ServiceDescriptor;
+import org.eclipse.sensinact.studio.resource.AccessMethod;
+import org.eclipse.sensinact.studio.resource.AccessMethodType;
+import org.eclipse.sensinact.studio.resource.Device;
+import org.eclipse.sensinact.studio.resource.Gateway;
+import org.eclipse.sensinact.studio.resource.Parameter;
+import org.eclipse.sensinact.studio.resource.Resource;
+import org.eclipse.sensinact.studio.resource.ResourceFactory;
+import org.eclipse.sensinact.studio.resource.ResourcePackage;
+import org.eclipse.sensinact.studio.resource.Service;
+import org.eclipse.sensinact.studio.resource.Studio;
+
+public abstract class ModelEditorHelpers {
+
+ private static final Logger logger = Logger.getLogger(ModelEditorHelpers.class);
+
+ private static org.eclipse.emf.ecore.resource.Resource resource;
+
+ private static TransactionalEditingDomain editingDomain;
+
+ private final static String EDITING_DOMAIN_ID = "org.eclipse.sensinact.studio.model.resource.editingDomain";
+
+ protected synchronized static org.eclipse.emf.ecore.resource.Resource getResource() {
+ if (resource == null) {
+ String path = "/org.eclipse.sensinact.studio.model.resource/cache/resource.cache";
+ URI uri = URI.createPlatformPluginURI(path, true);
+ resource = getEditingDomain().getResourceSet().createResource(uri);
+ }
+ return resource;
+ }
+
+ protected synchronized static TransactionalEditingDomain getEditingDomain() {
+ if (editingDomain == null) {
+ editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EDITING_DOMAIN_ID);
+ }
+ return editingDomain;
+ }
+
+ protected static void USE_IN_RUNEXLUSIVE_setupStudio() {
+ EList<EObject> contents = getResource().getContents();
+ if (contents.size() == 0)
+ getResource().getContents().add(ResourceFactory.eINSTANCE.createStudio());
+ }
+
+ protected static Studio USE_IN_RUNEXLUSIVE_getStudio() {
+ EList<EObject> contents = getResource().getContents();
+ return (Studio) contents.get(0);
+ }
+
+ protected static Gateway USE_IN_RUNEXLUSIVE_getGateway(String gatewayName) {
+ EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
+ for (Gateway gateway : gateways) {
+ if (gateway.getName().equals(gatewayName)) {
+ return gateway;
+ }
+ }
+ return null;
+ }
+
+ protected static Device USE_IN_RUNEXLUSIVE_getDevice(String gatewayName, String devicename) {
+
+ Gateway gateway = USE_IN_RUNEXLUSIVE_getGateway(gatewayName);
+ if (gateway == null)
+ return null;
+
+ EList<Device> devices = gateway.getDevice();
+ for (Device device : devices) {
+ if (device.getName().equals(devicename)) {
+ return device;
+ }
+ }
+ return null;
+ }
+
+ protected static Service USE_IN_RUNEXLUSIVE_getService(String gatewayName, String devicename, String servicename) {
+ Device device = USE_IN_RUNEXLUSIVE_getDevice(gatewayName, devicename);
+ if (device == null)
+ return null;
+
+ for (Service service : device.getService()) {
+ if (service.getName().equals(servicename)) {
+ return service;
+ }
+ }
+
+ return null;
+ }
+
+ protected static Resource USE_IN_RUNEXLUSIVE_getResource(ResourceDescriptor descriptor) {
+ Service service = USE_IN_RUNEXLUSIVE_getService(descriptor.getGateway(), descriptor.getDevice(),
+ descriptor.getService());
+ if (service == null)
+ return null;
+
+ for (Resource resource : service.getResource()) {
+ if (resource.getName().equals(descriptor.getResource())) {
+ return resource;
+ }
+ }
+
+ return null;
+ }
+
+ protected void USE_IN_RUNEXLUSIVE_addGatewayIfNotExist(final String gatewayName) {
+ if (USE_IN_RUNEXLUSIVE_getGateway(gatewayName) != null)
+ return;
+
+ final Gateway addedGateway = ResourceFactory.eINSTANCE.createGateway();
+ addedGateway.setName(gatewayName);
+ USE_IN_RUNEXLUSIVE_getStudio().getGateways().add(addedGateway);
+ return;
+ }
+
+ protected void USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(String gatewayName, String deviceId) {
+ if (USE_IN_RUNEXLUSIVE_getDevice(gatewayName, deviceId) != null)
+ return;
+
+ final Device addedDevice = ResourceFactory.eINSTANCE.createDevice();
+ addedDevice.setName(deviceId);
+ USE_IN_RUNEXLUSIVE_getGateway(gatewayName).getDevice().add(addedDevice);
+ }
+
+ protected void USE_IN_RUNEXLUSIVE_addServiceIfNotExist(String gatewayName, String deviceId, String serviceId) {
+ if (USE_IN_RUNEXLUSIVE_getService(gatewayName, deviceId, serviceId) != null)
+ return;
+
+ final Service addedService = ResourceFactory.eINSTANCE.createService();
+ addedService.setName(serviceId);
+ try {
+ USE_IN_RUNEXLUSIVE_getDevice(gatewayName, deviceId).getService().add(addedService);
+ } catch (NullPointerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void USE_IN_RUNEXLUSIVE_addResourceIfNotExist(ResourceDescriptor descriptor,
+ MsgDescribeRessource responseMessage) {
+ if (USE_IN_RUNEXLUSIVE_getResource(descriptor) != null)
+ return;
+
+ // preparation
+ USE_IN_RUNEXLUSIVE_addDeviceIfNotExist(descriptor.getGateway(), descriptor.getDevice());
+ USE_IN_RUNEXLUSIVE_addServiceIfNotExist(descriptor.getGateway(), descriptor.getDevice(),
+ descriptor.getService());
+
+ // create resource
+ String resourceType = responseMessage.getResponse().getType();
+ EClass type = literalToType(resourceType);
+ Resource createdResource = (Resource) ResourceFactory.eINSTANCE.create(type);
+ createdResource.setName(descriptor.getResource());
+
+ // create access methods
+ for (ObjectAccessMethods am : responseMessage.getResponse().getAccessMethods()) {
+ if (am != null) { // test to be removed after gateway bug fix
+ AccessMethod accessMethod = ResourceFactory.eINSTANCE.createAccessMethod();
+ accessMethod.setType(AccessMethodType.get(am.getName()));
+
+ Parameter[] parameters = new Parameter[am.getParameters().size()];
+ for (int i = 0; i < am.getParameters().size(); i++) {
+ ObjectParameter param = am.getParameters().get(i);
+ Parameter parameter = ResourceFactory.eINSTANCE.createParameter();
+ parameter.setName(param.getName());
+ parameter.setType(param.getType());
+ parameters[i] = parameter;
+ }
+
+ for (Parameter parameter : parameters) {
+ accessMethod.getParameter().add(parameter);
+ }
+ createdResource.getAccessMethod().add(accessMethod);
+ }
+ }
+
+ USE_IN_RUNEXLUSIVE_getService(descriptor.getGateway(), descriptor.getDevice(), descriptor.getService())
+ .getResource().add(createdResource);
+ }
+
+ protected void USE_IN_RUNEXLUSIVE_removeGateway(String gatewayName) {
+ EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
+
+ for (int i = 0; i < gateways.size(); i++) {
+ Gateway gateway = gateways.get(i);
+ if (gateway.getName().equals(gatewayName)) {
+ gateways.remove(i);
+ return;
+ }
+ }
+ }
+
+ protected void USE_IN_RUNEXCLUSIVE_removeDevice(String gatewayName, String deviceId) {
+ Gateway gateway = USE_IN_RUNEXLUSIVE_getGateway(gatewayName);
+ if (gateway != null) {
+ EList<Device> devices = gateway.getDevice();
+ for (int i = 0; i < devices.size(); i++) {
+ Device device = devices.get(i);
+ if (deviceId.equals(device.getName())) {
+ devices.remove(i);
+ return;
+ }
+ }
+ }
+ }
+
+ protected void USE_IN_RUNEXCLUSIVE_removeAllDevices(String gatewayName) {
+ Gateway gateway = USE_IN_RUNEXLUSIVE_getGateway(gatewayName);
+ if (gateway != null) {
+ gateway.getDevice().clear();
+ }
+ }
+
+ protected List<String> USE_IN_RUNEXCLUSIVE_getGatewaysId() {
+ List<String> retval = new ArrayList<String>();
+ EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
+ for (Gateway gateway : gateways) {
+ retval.add(gateway.getName());
+ }
+ return retval;
+ }
+
+ protected List<String> USE_IN_RUNEXCLUSIVE_getConnectedGatewaysId() {
+ 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());
+ }
+ return retval;
+ }
+
+ protected List<String> USE_IN_RUNEXCLUSIVE_getDevicesId(String gatewayName) {
+ List<String> retval = new ArrayList<String>();
+ EList<Device> devices = USE_IN_RUNEXLUSIVE_getGateway(gatewayName).getDevice();
+ for (Device device : devices) {
+ retval.add(device.getName());
+ }
+ return retval;
+ }
+
+ protected List<String> USE_IN_RUNEXCLUSIVE_getServicesId(String gatewayName, String devicename) {
+ List<String> retval = new ArrayList<String>();
+ Device device = USE_IN_RUNEXLUSIVE_getDevice(gatewayName, devicename);
+
+ if (device != null) {
+ for (Service service : device.getService()) {
+ retval.add(service.getName());
+ }
+ }
+ return retval;
+ }
+
+ protected List<String> USE_IN_RUNEXCLUSIVE_getResourcesId(String gatewayName, String devicename,
+ String servicename) {
+ List<String> retval = new ArrayList<String>();
+ Service service = USE_IN_RUNEXLUSIVE_getService(gatewayName, devicename, servicename);
+ if (service != null) {
+ for (Resource resource : service.getResource()) {
+ retval.add(resource.getName());
+ }
+ }
+ return retval;
+ }
+
+ protected List<ServiceDescriptor> USE_IN_RUNEXCLUSIVE_findApplications() {
+ List<ServiceDescriptor> retval = new ArrayList<>();
+ EList<Gateway> gateways = USE_IN_RUNEXLUSIVE_getStudio().getGateways();
+ for (Gateway gateway : gateways) {
+ Device appManager = findAppManager(gateway.getDevice());
+ if (appManager != null) {
+ retval.addAll(findApplications(appManager));
+ }
+ }
+ return retval;
+ }
+
+ protected EList<AccessMethod> USE_IN_RUNEXCLUSIVE_getAccessMethods(ResourceDescriptor descriptor) {
+ EList<AccessMethod> accessMethods = new BasicEList<AccessMethod>();
+ Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
+ for (AccessMethod accessMethod : resource.getAccessMethod()) {
+ accessMethods.add(accessMethod);
+ }
+ return accessMethods;
+ }
+
+ protected EList<AccessMethod> USE_IN_RUNEXCLUSIVE_getAccessMethodsWithType(ResourceDescriptor descriptor,
+ AccessMethodType type) {
+ EList<AccessMethod> accessMethods = new BasicEList<AccessMethod>();
+ Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
+ for (AccessMethod accessMethod : resource.getAccessMethod()) {
+ if (accessMethod.getType().equals(type)) {
+ accessMethods.add(accessMethod);
+ }
+ }
+ return accessMethods;
+ }
+
+ protected AccessMethod USE_IN_RUNEXCLUSIVE_getAccessMethodWithTypeNbParams(ResourceDescriptor descriptor,
+ AccessMethodType type, int nbOfParameters) {
+ Resource resource = USE_IN_RUNEXLUSIVE_getResource(descriptor);
+ for (AccessMethod accessMethod : resource.getAccessMethod()) {
+ if (accessMethod.getType().equals(type)) {
+ if (accessMethod.getParameter().size() == nbOfParameters) {
+ return accessMethod;
+ }
+ }
+ }
+ return null;
+ }
+
+ protected void USE_IN_RUNEXCLUSIVE_removeResource(final ResourceDescriptor descriptor) {
+ Service service = USE_IN_RUNEXLUSIVE_getService(descriptor.getGateway(), descriptor.getDevice(),
+ descriptor.getService());
+ if (service != null) {
+ EList<Resource> resources = service.getResource();
+ for (int i = 0; i < resources.size(); i++) {
+ Resource resource = resources.get(i);
+ if (descriptor.getResource().equals(resource.getName())) {
+ resources.remove(i);
+ return;
+ }
+ }
+ }
+ }
+
+ protected void USE_IN_RUNEXCLUSIVE_removeService(final String gatewayName, final String deviceId,
+ final String serviceId) {
+ Device device = USE_IN_RUNEXLUSIVE_getDevice(gatewayName, deviceId);
+ if (device != null) {
+ EList<Service> services = device.getService();
+ for (int i = 0; i < services.size(); i++) {
+ Service service = services.get(i);
+ if (serviceId.equals(service.getName())) {
+ services.remove(i);
+ return;
+ }
+ }
+ }
+ }
+
+ /* ============ */
+ /* RunExclusive */
+ /* ============ */
+
+ protected static EClass literalToType(final String type) {
+
+ final EClass resourceType;
+ // Literals
+ EClass stateVariableLiteral = ResourcePackage.Literals.STATE_VARIABLE;
+ EClass actionLiteral = ResourcePackage.Literals.ACTION;
+ EClass propertyLiteral = ResourcePackage.Literals.PROPERTY;
+ EClass sensorDataLiteral = ResourcePackage.Literals.SENSOR_DATA;
+
+ if ("STATE_VARIABLE".equals(type)) {
+ resourceType = stateVariableLiteral;
+ } else if ("ACTION".equals(type)) {
+ resourceType = actionLiteral;
+ } else if ("PROPERTY".equals(type)) {
+ resourceType = propertyLiteral;
+ } else if ("SENSOR".equals(type)) {
+ resourceType = sensorDataLiteral;
+ } else {
+ logger.error(ModelEditor.class.getCanonicalName() + "::updateResource with type=" + type + " - Is it a bug or a feature ?");
+ resourceType = actionLiteral;
+ }
+ return resourceType;
+ }
+
+ /* ============= */
+ /* MODEL HELPERS */
+ /* ============= */
+
+ protected Device findAppManager(EList<Device> devices) {
+ for (Device device : devices) {
+ if (device.getName().equals("AppManager"))
+ return device;
+ }
+ return null;
+ }
+
+ protected List<ServiceDescriptor> findApplications(Device appManager) {
+ List<ServiceDescriptor> retval = new ArrayList<>();
+
+ String gateway = ((Gateway) appManager.eContainer()).getName();
+ String device = appManager.getName();
+
+ for (Service service : appManager.getService()) {
+ String srvName = service.getName();
+ if (srvName != null && (!srvName.equalsIgnoreCase("admin"))) {
+ retval.add(new ServiceDescriptor(gateway, device, srvName));
+ }
+ }
+ return retval;
+ }
+
+}
diff --git a/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelUpdater.java b/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelUpdater.java
index 8c3bb3a..7656285 100644
--- a/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelUpdater.java
+++ b/services/org.eclipse.sensinact.studio.model.manager/src/org/eclipse/sensinact/studio/model/manager/modelupdater/ModelUpdater.java
@@ -69,7 +69,7 @@
logger.info("Full model update triggered");
- Segments segments = new Segments.Builder().gateway(gatewayName).jsonPath("jsonpath=$.*['name','location']").build();
+ Segments segments = new Segments.Builder().gateway(gatewayName).root().build();
MsgSensinact snaMsg = GatewayHttpClient.sendGetRequest(segments);
if (!(snaMsg instanceof MsgCompleteList))
diff --git a/services/org.eclipse.sensinact.studio.model.resource.edit/META-INF/MANIFEST.MF b/services/org.eclipse.sensinact.studio.model.resource.edit/META-INF/MANIFEST.MF
index 2d925a9..f29fa40 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.edit/META-INF/MANIFEST.MF
+++ b/services/org.eclipse.sensinact.studio.model.resource.edit/META-INF/MANIFEST.MF
@@ -2,6 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.sensinact.studio.model.resource.edit;singleton:=true
+Automatic-Module-Name: org.eclipse.sensinact.studio.model.resource.edit
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.sensinact.studio.resource.provider.ResourceEditPlugin$Implementation
diff --git a/services/org.eclipse.sensinact.studio.model.resource.edit/src/org/eclipse/sensinact/studio/resource/provider/ResourceItemProviderAdapterFactory.java b/services/org.eclipse.sensinact.studio.model.resource.edit/src/org/eclipse/sensinact/studio/resource/provider/ResourceItemProviderAdapterFactory.java
index ad572e7..b4bd837 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.edit/src/org/eclipse/sensinact/studio/resource/provider/ResourceItemProviderAdapterFactory.java
+++ b/services/org.eclipse.sensinact.studio.model.resource.edit/src/org/eclipse/sensinact/studio/resource/provider/ResourceItemProviderAdapterFactory.java
@@ -432,6 +432,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public ComposeableAdapterFactory getRootAdapterFactory() {
return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
}
@@ -442,6 +443,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
this.parentAdapterFactory = parentAdapterFactory;
}
@@ -490,6 +492,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void addListener(INotifyChangedListener notifyChangedListener) {
changeNotifier.addListener(notifyChangedListener);
}
@@ -500,6 +503,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void removeListener(INotifyChangedListener notifyChangedListener) {
changeNotifier.removeListener(notifyChangedListener);
}
@@ -510,6 +514,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void fireNotifyChanged(Notification notification) {
changeNotifier.fireNotifyChanged(notification);
@@ -524,6 +529,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void dispose() {
if (studioItemProvider != null) studioItemProvider.dispose();
if (deviceItemProvider != null) deviceItemProvider.dispose();
diff --git a/services/org.eclipse.sensinact.studio.model.resource.editor/META-INF/MANIFEST.MF b/services/org.eclipse.sensinact.studio.model.resource.editor/META-INF/MANIFEST.MF
index 4ea618a..73500ab 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.editor/META-INF/MANIFEST.MF
+++ b/services/org.eclipse.sensinact.studio.model.resource.editor/META-INF/MANIFEST.MF
@@ -2,6 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.sensinact.studio.model.resource.editor;singleton:=true
+Automatic-Module-Name: org.eclipse.sensinact.studio.model.resource.editor
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: .
Bundle-Activator: org.eclipse.sensinact.studio.resource.presentation.ResourceEditorPlugin$Implementation
diff --git a/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceActionBarContributor.java b/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceActionBarContributor.java
index be1ad84..1454ed1 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceActionBarContributor.java
+++ b/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceActionBarContributor.java
@@ -173,6 +173,7 @@
*/
@Override
public void contributeToToolBar(IToolBarManager toolBarManager) {
+ super.contributeToToolBar(toolBarManager);
toolBarManager.add(new Separator("resource-settings"));
toolBarManager.add(new Separator("resource-additions"));
}
@@ -209,6 +210,7 @@
//
submenuManager.addMenuListener
(new IMenuListener() {
+ @Override
public void menuAboutToShow(IMenuManager menuManager) {
menuManager.updateAll(true);
}
@@ -256,6 +258,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void selectionChanged(SelectionChangedEvent event) {
// Remove any menu items for old selection.
//
diff --git a/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceEditor.java b/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceEditor.java
index a5c9dde..84cc7cb 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceEditor.java
+++ b/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceEditor.java
@@ -79,6 +79,7 @@
import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
@@ -331,6 +332,7 @@
*/
protected IPartListener partListener =
new IPartListener() {
+ @Override
public void partActivated(IWorkbenchPart p) {
if (p instanceof ContentOutline) {
if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
@@ -349,15 +351,19 @@
handleActivate();
}
}
+ @Override
public void partBroughtToTop(IWorkbenchPart p) {
// Ignore.
}
+ @Override
public void partClosed(IWorkbenchPart p) {
// Ignore.
}
+ @Override
public void partDeactivated(IWorkbenchPart p) {
// Ignore.
}
+ @Override
public void partOpened(IWorkbenchPart p) {
// Ignore.
}
@@ -443,6 +449,7 @@
dispatching = true;
getSite().getShell().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
dispatching = false;
updateProblemIndication();
@@ -472,6 +479,7 @@
*/
protected IResourceChangeListener resourceChangeListener =
new IResourceChangeListener() {
+ @Override
public void resourceChanged(IResourceChangeEvent event) {
IResourceDelta delta = event.getDelta();
try {
@@ -480,6 +488,7 @@
protected Collection<Resource> changedResources = new ArrayList<Resource>();
protected Collection<Resource> removedResources = new ArrayList<Resource>();
+ @Override
public boolean visit(IResourceDelta delta) {
if (delta.getResource().getType() == IResource.FILE) {
if (delta.getKind() == IResourceDelta.REMOVED ||
@@ -515,6 +524,7 @@
if (!visitor.getRemovedResources().isEmpty()) {
getSite().getShell().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
removedResources.addAll(visitor.getRemovedResources());
if (!isDirty()) {
@@ -527,6 +537,7 @@
if (!visitor.getChangedResources().isEmpty()) {
getSite().getShell().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
changedResources.addAll(visitor.getChangedResources());
if (getSite().getPage().getActiveEditor() == ResourceEditor.this) {
@@ -585,8 +596,9 @@
*/
protected void handleChangedResources() {
if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+ ResourceSet resourceSet = editingDomain.getResourceSet();
if (isDirty()) {
- changedResources.addAll(editingDomain.getResourceSet().getResources());
+ changedResources.addAll(resourceSet.getResources());
}
editingDomain.getCommandStack().flush();
@@ -595,7 +607,7 @@
if (resource.isLoaded()) {
resource.unload();
try {
- resource.load(Collections.EMPTY_MAP);
+ resource.load(resourceSet.getLoadOptions());
}
catch (IOException exception) {
if (!resourceToDiagnosticMap.containsKey(resource)) {
@@ -716,9 +728,11 @@
//
commandStack.addCommandStackListener
(new CommandStackListener() {
+ @Override
public void commandStackChanged(final EventObject event) {
getContainer().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
firePropertyChange(IEditorPart.PROP_DIRTY);
@@ -771,6 +785,7 @@
if (theSelection != null && !theSelection.isEmpty()) {
Runnable runnable =
new Runnable() {
+ @Override
public void run() {
// Try to select the items in the current content viewer of the editor.
//
@@ -791,6 +806,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public EditingDomain getEditingDomain() {
return editingDomain;
}
@@ -887,6 +903,7 @@
new ISelectionChangedListener() {
// This just notifies those things that are affected by the section.
//
+ @Override
public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
setSelection(selectionChangedEvent.getSelection());
}
@@ -921,6 +938,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public Viewer getViewer() {
return currentViewer;
}
@@ -1226,8 +1244,11 @@
getSite().getShell().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
- setActivePage(0);
+ if (!getContainer().isDisposed()) {
+ setActivePage(0);
+ }
}
});
}
@@ -1250,6 +1271,7 @@
getSite().getShell().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
updateProblemIndication();
}
@@ -1267,9 +1289,9 @@
if (getPageCount() <= 1) {
setPageText(0, "");
if (getContainer() instanceof CTabFolder) {
- ((CTabFolder)getContainer()).setTabHeight(1);
Point point = getContainer().getSize();
- getContainer().setSize(point.x, point.y + 6);
+ Rectangle clientArea = getContainer().getClientArea();
+ getContainer().setSize(point.x, 2 * point.y - clientArea.height - clientArea.y);
}
}
}
@@ -1285,9 +1307,9 @@
if (getPageCount() > 1) {
setPageText(0, getString("_UI_SelectionPage_label"));
if (getContainer() instanceof CTabFolder) {
- ((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
Point point = getContainer().getSize();
- getContainer().setSize(point.x, point.y - 6);
+ Rectangle clientArea = getContainer().getClientArea();
+ getContainer().setSize(point.x, clientArea.height + clientArea.y);
}
}
}
@@ -1315,15 +1337,15 @@
*/
@SuppressWarnings("rawtypes")
@Override
- public Object getAdapter(Class key) {
+ public <T> T getAdapter(Class<T> key) {
if (key.equals(IContentOutlinePage.class)) {
- return showOutlineView() ? getContentOutlinePage() : null;
+ return showOutlineView() ? key.cast(getContentOutlinePage()) : null;
}
else if (key.equals(IPropertySheetPage.class)) {
- return getPropertySheetPage();
+ return key.cast(getPropertySheetPage());
}
else if (key.equals(IGotoMarker.class)) {
- return this;
+ return key.cast(this);
}
else {
return super.getAdapter(key);
@@ -1386,6 +1408,7 @@
(new ISelectionChangedListener() {
// This ensures that we handle selections correctly.
//
+ @Override
public void selectionChanged(SelectionChangedEvent event) {
handleContentOutlineSelection(event.getSelection());
}
@@ -1403,7 +1426,7 @@
*/
public IPropertySheetPage getPropertySheetPage() {
PropertySheetPage propertySheetPage =
- new ExtendedPropertySheetPage(editingDomain) {
+ new ExtendedPropertySheetPage(editingDomain, ExtendedPropertySheetPage.Decoration.NONE, null, 0, false) {
@Override
public void setSelectionToViewer(List<?> selection) {
ResourceEditor.this.setSelectionToViewer(selection);
@@ -1610,6 +1633,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void gotoMarker(IMarker marker) {
List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
if (!targetObjects.isEmpty()) {
@@ -1654,6 +1678,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
selectionChangedListeners.add(listener);
}
@@ -1664,6 +1689,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
selectionChangedListeners.remove(listener);
}
@@ -1674,6 +1700,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public ISelection getSelection() {
return editorSelection;
}
@@ -1685,6 +1712,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void setSelection(ISelection selection) {
editorSelection = selection;
@@ -1754,6 +1782,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void menuAboutToShow(IMenuManager menuManager) {
((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
}
diff --git a/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceModelWizard.java b/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceModelWizard.java
index 9208e6c..5652741 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceModelWizard.java
+++ b/services/org.eclipse.sensinact.studio.model.resource.editor/src/org/eclipse/sensinact/studio/resource/presentation/ResourceModelWizard.java
@@ -182,6 +182,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
this.workbench = workbench;
this.selection = selection;
@@ -288,6 +289,7 @@
final ISelection targetSelection = new StructuredSelection(modelFile);
getShell().getDisplay().asyncExec
(new Runnable() {
+ @Override
public void run() {
((ISetSelectionTarget)activePart).selectReveal(targetSelection);
}
@@ -404,6 +406,7 @@
* <!-- end-user-doc -->
* @generated
*/
+ @Override
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE); {
GridLayout layout = new GridLayout();
@@ -478,6 +481,7 @@
*/
protected ModifyListener validator =
new ModifyListener() {
+ @Override
public void modifyText(ModifyEvent e) {
setPageComplete(validatePage());
}
diff --git a/services/org.eclipse.sensinact.studio.model.resource.tests/META-INF/MANIFEST.MF b/services/org.eclipse.sensinact.studio.model.resource.tests/META-INF/MANIFEST.MF
index 771c45d..b1e1068 100644
--- a/services/org.eclipse.sensinact.studio.model.resource.tests/META-INF/MANIFEST.MF
+++ b/services/org.eclipse.sensinact.studio.model.resource.tests/META-INF/MANIFEST.MF
@@ -2,6 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.sensinact.studio.model.resource.tests;singleton:=true
+Automatic-Module-Name: org.eclipse.sensinact.studio.model.resource.tests
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
diff --git a/services/org.eclipse.sensinact.studio.model.resource/META-INF/MANIFEST.MF b/services/org.eclipse.sensinact.studio.model.resource/META-INF/MANIFEST.MF
index f7158da..479a437 100644
--- a/services/org.eclipse.sensinact.studio.model.resource/META-INF/MANIFEST.MF
+++ b/services/org.eclipse.sensinact.studio.model.resource/META-INF/MANIFEST.MF
@@ -2,6 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.sensinact.studio.model.resource;singleton:=true
+Automatic-Module-Name: org.eclipse.sensinact.studio.model.resource
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
diff --git a/services/org.eclipse.sensinact.studio.model.resource/models/resource.genmodel b/services/org.eclipse.sensinact.studio.model.resource/models/resource.genmodel
index 3561579..b1f40dc 100644
--- a/services/org.eclipse.sensinact.studio.model.resource/models/resource.genmodel
+++ b/services/org.eclipse.sensinact.studio.model.resource/models/resource.genmodel
@@ -14,8 +14,8 @@
<genEnumLiterals ecoreEnumLiteral="resource.ecore#//AccessMethodType/SUBSCRIBE"/>
<genEnumLiterals ecoreEnumLiteral="resource.ecore#//AccessMethodType/UNSUBSCRIBE"/>
</genEnums>
- <genClasses ecoreClass="resource.ecore#//Devices">
- <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference resource.ecore#//Devices/device"/>
+ <genClasses ecoreClass="resource.ecore#//Studio">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference resource.ecore#//Studio/gateways"/>
</genClasses>
<genClasses ecoreClass="resource.ecore#//Device">
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute resource.ecore#//Device/friendlyName"/>
@@ -36,7 +36,7 @@
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute resource.ecore#//Resource/friendlyName"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference resource.ecore#//Resource/attribute"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference resource.ecore#//Resource/accessMethod"/>
- <genOperations ecoreOperation="resource.ecore#//Resource/getAccessMethod">
+ <genOperations ecoreOperation="resource.ecore#//Resource/getAccessMethod" body="EList<AccessMethod> accessMethodByType = new EObjectContainmentEList<AccessMethod>(AccessMethod.class, this, ResourcePackage.RESOURCE__ACCESS_METHOD);
		for (AccessMethod accessMethod : getAccessMethod()) {
			if (accessMethod.getType().equals(type))
				accessMethodByType.add(accessMethod);
		}
		return accessMethodByType;">
<genParameters ecoreParameter="resource.ecore#//Resource/getAccessMethod/type"/>
</genOperations>
</genClasses>
@@ -57,5 +57,8 @@
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute resource.ecore#//AccessMethod/type"/>
</genClasses>
<genClasses ecoreClass="resource.ecore#//Parameter"/>
+ <genClasses ecoreClass="resource.ecore#//Gateway">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference resource.ecore#//Gateway/device"/>
+ </genClasses>
</genPackages>
</genmodel:GenModel>
diff --git a/services/org.eclipse.sensinact.studio.model.resource/src/org/eclipse/sensinact/studio/model/resource/utils/Segments.java b/services/org.eclipse.sensinact.studio.model.resource/src/org/eclipse/sensinact/studio/model/resource/utils/Segments.java
index 55c083b..18202c6 100644
--- a/services/org.eclipse.sensinact.studio.model.resource/src/org/eclipse/sensinact/studio/model/resource/utils/Segments.java
+++ b/services/org.eclipse.sensinact.studio.model.resource/src/org/eclipse/sensinact/studio/model/resource/utils/Segments.java
@@ -106,6 +106,10 @@
return new BuilderLocation(gateway);
}
+ public BuilderReady root() {
+ return new BuilderReady(gateway, ROOT_SEGMENT);
+ }
+
public BuilderReady devices() {
return new BuilderReady(gateway, ROOT_SEGMENT, PROVIDERS);
}
diff --git a/xtext/org.eclipse.sensinact.studio.language.sensinact.ide/META-INF/MANIFEST.MF b/xtext/org.eclipse.sensinact.studio.language.sensinact.ide/META-INF/MANIFEST.MF
index d3b0ced..584b538 100644
--- a/xtext/org.eclipse.sensinact.studio.language.sensinact.ide/META-INF/MANIFEST.MF
+++ b/xtext/org.eclipse.sensinact.studio.language.sensinact.ide/META-INF/MANIFEST.MF
@@ -8,8 +8,7 @@
Require-Bundle: org.eclipse.sensinact.studio.language.sensinact,
org.eclipse.xtext.ide,
org.eclipse.xtext.xbase.ide,
- org.antlr.runtime
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.eclipse.sensinact.studio.language.ide.contentassist.antlr,
org.eclipse.sensinact.studio.language.ide.contentassist.antlr.internal
-
diff --git a/xtext/org.eclipse.sensinact.studio.language.sensinact.tests/META-INF/MANIFEST.MF b/xtext/org.eclipse.sensinact.studio.language.sensinact.tests/META-INF/MANIFEST.MF
index e1d616e..14317a8 100644
--- a/xtext/org.eclipse.sensinact.studio.language.sensinact.tests/META-INF/MANIFEST.MF
+++ b/xtext/org.eclipse.sensinact.studio.language.sensinact.tests/META-INF/MANIFEST.MF
@@ -9,7 +9,7 @@
org.junit,
org.eclipse.xtext.junit4,
org.eclipse.xtext.xbase.junit,
- org.eclipse.xtext.xbase.lib,
+ org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
org.eclipse.xtext.testing,
org.eclipse.xtext.xbase.testing
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/META-INF/MANIFEST.MF b/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/META-INF/MANIFEST.MF
index 081c687..3365da1 100644
--- a/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/META-INF/MANIFEST.MF
+++ b/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/META-INF/MANIFEST.MF
@@ -15,8 +15,8 @@
org.eclipse.ui,
org.eclipse.compare,
org.eclipse.xtext.builder,
- org.eclipse.xtend.lib;resolution:=optional,
- org.eclipse.xtext.xbase.lib,
+ org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional,
+ org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
org.eclipse.sensinact.studio.model.manager
Import-Package: org.apache.log4j
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/plugin.xml_gen b/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/plugin.xml_gen
index 705ed4f..384a316 100644
--- a/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/plugin.xml_gen
+++ b/xtext/org.eclipse.sensinact.studio.language.sensinact.ui/plugin.xml_gen
@@ -204,6 +204,15 @@
</activeWhen>
</handler>
</extension>
+ <extension point="org.eclipse.core.contenttype.contentTypes">
+ <content-type
+ base-type="org.eclipse.core.runtime.text"
+ file-extensions="sna"
+ id="org.eclipse.sensinact.studio.language.Sensinact.contenttype"
+ name="Sensinact File"
+ priority="normal">
+ </content-type>
+ </extension>
<!-- adding resource factories -->
<extension
point="org.eclipse.emf.ecore.extension_parser">
@@ -388,12 +397,18 @@
class="org.eclipse.sensinact.studio.language.ui.SensinactExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
extensions="sna">
</viewer>
+ <contentTypeBinding
+ contentTypeId="org.eclipse.sensinact.studio.language.Sensinact.contenttype"
+ contentViewerId="org.eclipse.sensinact.studio.language.Sensinact.compare.contentViewers" />
</extension>
<extension point="org.eclipse.compare.contentMergeViewers">
<viewer id="org.eclipse.sensinact.studio.language.Sensinact.compare.contentMergeViewers"
class="org.eclipse.sensinact.studio.language.ui.SensinactExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
extensions="sna" label="Sensinact Compare">
</viewer>
+ <contentTypeBinding
+ contentTypeId="org.eclipse.sensinact.studio.language.Sensinact.contenttype"
+ contentMergeViewerId="org.eclipse.sensinact.studio.language.Sensinact.compare.contentMergeViewers" />
</extension>
<extension point="org.eclipse.ui.editors.documentProviders">
<provider id="org.eclipse.sensinact.studio.language.Sensinact.editors.documentProviders"
diff --git a/xtext/org.eclipse.sensinact.studio.language.sensinact/META-INF/MANIFEST.MF b/xtext/org.eclipse.sensinact.studio.language.sensinact/META-INF/MANIFEST.MF
index 7956ec7..64f6982 100644
--- a/xtext/org.eclipse.sensinact.studio.language.sensinact/META-INF/MANIFEST.MF
+++ b/xtext/org.eclipse.sensinact.studio.language.sensinact/META-INF/MANIFEST.MF
@@ -1,31 +1,31 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: org.eclipse.sensinact.studio.language.sensinact
-Bundle-Vendor: My Company
-Bundle-Version: 1.0.0.qualifier
-Bundle-SymbolicName: org.eclipse.sensinact.studio.language.sensinact; singleton:=true
-Bundle-ActivationPolicy: lazy
-Require-Bundle: org.eclipse.xtext,
- org.eclipse.xtext.xbase,
- org.eclipse.equinox.common;bundle-version="3.5.0",
- org.eclipse.emf.ecore,
- org.eclipse.xtext.xbase.lib,
- org.antlr.runtime,
- org.eclipse.xtext.util,
- org.eclipse.xtend.lib,
- org.eclipse.emf.common,
- org.eclipse.sensinact.studio.model.manager;bundle-version="1.0.0",
- org.eclipse.sensinact.studio.model.resource;bundle-version="1.0.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.sensinact.studio.language.validation,
- org.eclipse.sensinact.studio.language.sensinact.impl,
- org.eclipse.sensinact.studio.language.scoping,
- org.eclipse.sensinact.studio.language.sensinact.util,
- org.eclipse.sensinact.studio.language.parser.antlr.internal,
- org.eclipse.sensinact.studio.language.parser.antlr,
- org.eclipse.sensinact.studio.language,
- org.eclipse.sensinact.studio.language.services,
- org.eclipse.sensinact.studio.language.sensinact,
- org.eclipse.sensinact.studio.language.serializer,
- org.eclipse.sensinact.studio.language.generator
-Import-Package: org.apache.log4j
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.sensinact.studio.language.sensinact
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: org.eclipse.sensinact.studio.language.sensinact; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext,
+ org.eclipse.xtext.xbase,
+ org.eclipse.equinox.common;bundle-version="3.5.0",
+ org.eclipse.emf.ecore,
+ org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
+ org.eclipse.xtext.util,
+ org.eclipse.xtend.lib;bundle-version="2.14.0",
+ org.eclipse.emf.common,
+ org.eclipse.sensinact.studio.model.manager;bundle-version="1.0.0",
+ org.eclipse.sensinact.studio.model.resource;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.sensinact.studio.language.validation,
+ org.eclipse.sensinact.studio.language.sensinact.impl,
+ org.eclipse.sensinact.studio.language.scoping,
+ org.eclipse.sensinact.studio.language.sensinact.util,
+ org.eclipse.sensinact.studio.language.parser.antlr.internal,
+ org.eclipse.sensinact.studio.language.parser.antlr,
+ org.eclipse.sensinact.studio.language,
+ org.eclipse.sensinact.studio.language.services,
+ org.eclipse.sensinact.studio.language.sensinact,
+ org.eclipse.sensinact.studio.language.serializer,
+ org.eclipse.sensinact.studio.language.generator
+Import-Package: org.apache.log4j
diff --git a/xtext/org.eclipse.sensinact.studio.language.sensinact/model/generated/Sensinact.genmodel b/xtext/org.eclipse.sensinact.studio.language.sensinact/model/generated/Sensinact.genmodel
index 6a60467..3b623b6 100644
--- a/xtext/org.eclipse.sensinact.studio.language.sensinact/model/generated/Sensinact.genmodel
+++ b/xtext/org.eclipse.sensinact.studio.language.sensinact/model/generated/Sensinact.genmodel
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
- xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="generated by Xtext 2.12.0" modelDirectory="/org.eclipse.sensinact.studio.language.sensinact/src-gen"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="generated by Xtext 2.16.0" modelDirectory="/org.eclipse.sensinact.studio.language.sensinact/src-gen"
modelPluginID="org.eclipse.sensinact.studio.language.sensinact" forceOverwrite="true"
modelName="Sensinact" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
- complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.13">
+ complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.16">
<genPackages prefix="Sensinact" basePackage="org.eclipse.sensinact.studio.language"
disposableProviderFactory="true" fileExtensions="sna" ecorePackage="Sensinact.ecore#/">
<genClasses ecoreClass="Sensinact.ecore#//Sensinact">