diff --git a/core/impl/integration-test.bndrun b/core/impl/integration-test.bndrun index a162cfd53..d2a9fdd61 100644 --- a/core/impl/integration-test.bndrun +++ b/core/impl/integration-test.bndrun @@ -40,12 +40,13 @@ org.eclipse.sensinact.gateway.core.impl-tests;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.core.models.metadata;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.core.models.provider;version='[0.0.2,0.0.3)',\ - org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ - org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ + org.gecko.emf.osgi.api;version='[5.0.0,5.0.1)',\ + org.gecko.emf.osgi.component;version='[5.0.0,5.0.1)',\ org.mockito.junit-jupiter;version='[4.7.0,4.7.1)',\ org.mockito.mockito-core;version='[4.7.0,4.7.1)',\ org.objenesis;version='[3.2.0,3.2.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/core/impl/src/main/java/org/eclipse/sensinact/core/command/impl/GatewayThreadImpl.java b/core/impl/src/main/java/org/eclipse/sensinact/core/command/impl/GatewayThreadImpl.java index b601fc8ad..67381bc8b 100644 --- a/core/impl/src/main/java/org/eclipse/sensinact/core/command/impl/GatewayThreadImpl.java +++ b/core/impl/src/main/java/org/eclipse/sensinact/core/command/impl/GatewayThreadImpl.java @@ -27,19 +27,20 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.sensinact.core.command.AbstractSensinactCommand; import org.eclipse.sensinact.core.command.GatewayThread; import org.eclipse.sensinact.core.metrics.IMetricTimer; import org.eclipse.sensinact.core.metrics.IMetricsManager; -import org.eclipse.sensinact.core.notification.NotificationAccumulator; -import org.eclipse.sensinact.model.core.provider.ProviderPackage; import org.eclipse.sensinact.core.model.impl.SensinactModelManagerImpl; import org.eclipse.sensinact.core.model.nexus.ModelNexus; +import org.eclipse.sensinact.core.notification.NotificationAccumulator; import org.eclipse.sensinact.core.notification.impl.ImmediateNotificationAccumulator; import org.eclipse.sensinact.core.notification.impl.NotificationAccumulatorImpl; import org.eclipse.sensinact.core.twin.impl.SensinactDigitalTwinImpl; import org.eclipse.sensinact.core.whiteboard.impl.SensinactWhiteboard; +import org.eclipse.sensinact.model.core.provider.ProviderPackage; import org.osgi.service.component.AnyService; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -76,14 +77,12 @@ public class GatewayThreadImpl extends Thread implements GatewayThread { private IMetricsManager metrics; @Activate - public GatewayThreadImpl( - @Reference IMetricsManager metrics, - @Reference TypedEventBus typedEventBus, @Reference ResourceSet resourceSet, - @Reference ProviderPackage ProviderPackage) { + public GatewayThreadImpl(@Reference IMetricsManager metrics, @Reference TypedEventBus typedEventBus, + @Reference ResourceSet resourceSet, @Reference ProviderPackage providerPackage) { this.metrics = metrics; this.typedEventBus = typedEventBus; this.whiteboard = new SensinactWhiteboard(this, metrics); - nexusImpl = new ModelNexus(resourceSet, ProviderPackage, this::getCurrentAccumulator, whiteboard); + nexusImpl = new ModelNexus(resourceSet, providerPackage, this::getCurrentAccumulator, whiteboard); start(); } @@ -120,6 +119,15 @@ void deactivate() { } } + @Reference(cardinality = MULTIPLE, policy = DYNAMIC) + void addEPackage(EPackage ePackage) { + nexusImpl.addEPackage(ePackage); + } + + void removeEPackage(EPackage ePackage) { + nexusImpl.removeEPackage(ePackage); + } + @Reference(service = AnyService.class, target = "(sensiNact.whiteboard.resource=true)", cardinality = MULTIPLE, policy = DYNAMIC) void addWhiteboardService(Object service, Map props) { whiteboard.addWhiteboardService(service, props); diff --git a/core/impl/src/main/java/org/eclipse/sensinact/core/model/nexus/ModelNexus.java b/core/impl/src/main/java/org/eclipse/sensinact/core/model/nexus/ModelNexus.java index 4333b78c8..e9949cec1 100644 --- a/core/impl/src/main/java/org/eclipse/sensinact/core/model/nexus/ModelNexus.java +++ b/core/impl/src/main/java/org/eclipse/sensinact/core/model/nexus/ModelNexus.java @@ -51,9 +51,15 @@ import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.XMLResource; +import org.eclipse.sensinact.core.command.impl.ActionHandler; +import org.eclipse.sensinact.core.command.impl.ResourcePullHandler; +import org.eclipse.sensinact.core.command.impl.ResourcePushHandler; import org.eclipse.sensinact.core.model.ResourceType; +import org.eclipse.sensinact.core.model.nexus.emf.EMFUtil; +import org.eclipse.sensinact.core.model.nexus.emf.compare.EMFCompareUtil; import org.eclipse.sensinact.core.notification.NotificationAccumulator; import org.eclipse.sensinact.core.twin.TimedValue; +import org.eclipse.sensinact.core.whiteboard.impl.SensinactWhiteboard; import org.eclipse.sensinact.model.core.metadata.Action; import org.eclipse.sensinact.model.core.metadata.ActionParameter; import org.eclipse.sensinact.model.core.metadata.AnnotationMetadata; @@ -67,12 +73,6 @@ import org.eclipse.sensinact.model.core.provider.ProviderFactory; import org.eclipse.sensinact.model.core.provider.ProviderPackage; import org.eclipse.sensinact.model.core.provider.Service; -import org.eclipse.sensinact.core.command.impl.ActionHandler; -import org.eclipse.sensinact.core.command.impl.ResourcePullHandler; -import org.eclipse.sensinact.core.command.impl.ResourcePushHandler; -import org.eclipse.sensinact.core.model.nexus.emf.EMFUtil; -import org.eclipse.sensinact.core.model.nexus.emf.compare.EMFCompareUtil; -import org.eclipse.sensinact.core.whiteboard.impl.SensinactWhiteboard; import org.osgi.util.promise.Promise; import org.osgi.util.promise.Promises; import org.slf4j.Logger; @@ -135,7 +135,8 @@ public Promise act(String model, String provider, String service, String public Promise> pullValue(String model, String provider, String service, String resource, Class type, TimedValue cachedValue, Consumer> gatewayUpdate) { if (resourceValuePullHandler != null) { - return resourceValuePullHandler.pullValue(model, provider, service, resource, type, cachedValue, gatewayUpdate); + return resourceValuePullHandler.pullValue(model, provider, service, resource, type, cachedValue, + gatewayUpdate); } throw new RuntimeException("No pullValue handler set"); } @@ -898,4 +899,29 @@ public EClass registerModel(EClass modelEClass, Instant timestamp) { models.put(EMFUtil.getModelName(modelEClass), modelEClass); return null; } + + /** + * @param ePackage a registered {@link EPackage} to scan for registered + * Provideres + */ + public void addEPackage(EPackage ePackage) { + if (ePackage != providerPackage) { + ePackage.getEClassifiers().stream().filter(EClass.class::isInstance).map(EClass.class::cast) + .filter(ProviderPackage.Literals.PROVIDER::isSuperTypeOf) + .forEach(ec -> models.put(EcoreUtil.getURI(ec).toString(), ec)); + } + } + + /** + * TODO how do we handle existing Instances of such a model? + * + * @param ePackage a registered {@link EPackage} to remove + */ + public void removeEPackage(EPackage ePackage) { + if (ePackage != providerPackage) { + ePackage.getEClassifiers().stream().filter(EClass.class::isInstance).map(EClass.class::cast) + .filter(ProviderPackage.Literals.PROVIDER::isSuperTypeOf) + .forEach(ec -> models.remove(EcoreUtil.getURI(ec).toString())); + } + } } diff --git a/core/impl/src/test/java/org/eclipse/sensinact/core/model/nexus/impl/NexusTest.java b/core/impl/src/test/java/org/eclipse/sensinact/core/model/nexus/impl/NexusTest.java index 7825d096d..2aaea372b 100644 --- a/core/impl/src/test/java/org/eclipse/sensinact/core/model/nexus/impl/NexusTest.java +++ b/core/impl/src/test/java/org/eclipse/sensinact/core/model/nexus/impl/NexusTest.java @@ -18,6 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.io.InputStream; @@ -33,11 +34,13 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; +import java.util.Optional; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; @@ -50,14 +53,14 @@ import org.eclipse.emf.ecore.resource.impl.URIMappingRegistryImpl; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.XMLResource; +import org.eclipse.sensinact.core.emf.util.EMFTestUtil; +import org.eclipse.sensinact.core.model.nexus.ModelNexus; +import org.eclipse.sensinact.core.model.nexus.emf.EMFUtil; import org.eclipse.sensinact.core.notification.NotificationAccumulator; import org.eclipse.sensinact.model.core.provider.Admin; import org.eclipse.sensinact.model.core.provider.Provider; import org.eclipse.sensinact.model.core.provider.ProviderPackage; import org.eclipse.sensinact.model.core.provider.Service; -import org.eclipse.sensinact.core.emf.util.EMFTestUtil; -import org.eclipse.sensinact.core.model.nexus.ModelNexus; -import org.eclipse.sensinact.core.model.nexus.emf.EMFUtil; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -734,4 +737,110 @@ void pushEObjectTestSimpleAttributeChange() throws IOException, InterruptedExcep assertEquals(testAdminEClass, savedAgain.getAdmin().eClass()); } } + + @Nested + public class EPackageTests { + + private ModelNexus nexus; + private EPackage ePackage; + + @BeforeEach + public void setup() throws IOException { + URI ProviderPackageURI = URI.createURI(ProviderPackage.eNS_URI); + + URIMappingRegistryImpl.INSTANCE.put( + URI.createURI("https://eclipse.org/../../../models/src/main/resources/model/sensinact.ecore"), + ProviderPackageURI); + + XMLResource.URIHandler handler = new XMLResource.URIHandler() { + + @Override + public URI deresolve(URI arg0) { + return arg0; + } + + @Override + public URI resolve(URI arg0) { + if (arg0.lastSegment().equals("sensinact.ecore")) { + return ProviderPackageURI.appendFragment(arg0.fragment()); + } + return arg0; + } + + @Override + public void setBaseURI(URI arg0) { + // TODO Auto-generated method stub + } + }; + + nexus = new ModelNexus(resourceSet, ProviderPackage.eINSTANCE, () -> accumulator); + + Resource extendedPackageResource = resourceSet + .createResource(URI.createURI("https://eclipse.org/sensinact/test/1.0")); + InputStream ín = getClass().getResourceAsStream("/model/extended.ecore"); + + assertNotNull(ín); + + extendedPackageResource.load(ín, Collections.singletonMap(XMLResource.OPTION_URI_HANDLER, handler)); + + ePackage = (EPackage) extendedPackageResource.getContents().get(0); + + assertNotNull(ePackage); + } + + @Test + void addModelEPackage() throws IOException, InterruptedException { + URI uri = EcoreUtil.getURI(ePackage.getEClassifier("TemperatureSensor")); + Optional model = nexus.getModel(uri.toString()); + + assertTrue(model.isEmpty()); + + nexus.addEPackage(ePackage); + + model = nexus.getModel(uri.toString()); + + assertTrue(model.isPresent()); + } + + @Test + void removeModelEPackage() throws IOException, InterruptedException { + URI uri = EcoreUtil.getURI(ePackage.getEClassifier("TemperatureSensor")); + Optional model = nexus.getModel(uri.toString()); + + assertTrue(model.isEmpty()); + + nexus.addEPackage(ePackage); + + model = nexus.getModel(uri.toString()); + + assertTrue(model.isPresent()); + + nexus.removeEPackage(ePackage); + + model = nexus.getModel(uri.toString()); + + assertTrue(model.isEmpty()); + } + + @Test + void checkInstance() throws IOException, InterruptedException { + EClassifier eClassifier = ePackage.getEClassifier("TemperatureSensor"); + URI uri = EcoreUtil.getURI(ePackage.getEClassifier("TemperatureSensor")); + Optional model = nexus.getModel(uri.toString()); + + assertTrue(model.isEmpty()); + + nexus.addEPackage(ePackage); + + model = nexus.getModel(uri.toString()); + + assertTrue(model.isPresent()); + + Provider provider = nexus.createProviderInstance(uri.toString(), "test"); + + assertNotNull(provider); + assertEquals(eClassifier, provider.eClass()); + } + + } } diff --git a/northbound/filters/ldap/integration-test.bndrun b/northbound/filters/ldap/integration-test.bndrun index 90113c024..914bc98bc 100644 --- a/northbound/filters/ldap/integration-test.bndrun +++ b/northbound/filters/ldap/integration-test.bndrun @@ -46,6 +46,7 @@ org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/northbound/query-handler/integration-test.bndrun b/northbound/query-handler/integration-test.bndrun index 56dc92d47..986030e95 100644 --- a/northbound/query-handler/integration-test.bndrun +++ b/northbound/query-handler/integration-test.bndrun @@ -43,6 +43,7 @@ org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/northbound/rest/integration-test.bndrun b/northbound/rest/integration-test.bndrun index 90838f8b4..d5f07c596 100644 --- a/northbound/rest/integration-test.bndrun +++ b/northbound/rest/integration-test.bndrun @@ -96,6 +96,7 @@ org.glassfish.jersey.media.jersey-media-sse;version='[3.0.8,3.0.9)',\ org.objectweb.asm;version='[9.3.0,9.3.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.jakartars;version='[2.0.0,2.0.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ diff --git a/northbound/security/openid-connect/integration-test.bndrun b/northbound/security/openid-connect/integration-test.bndrun index cdd359638..11b308fb2 100644 --- a/northbound/security/openid-connect/integration-test.bndrun +++ b/northbound/security/openid-connect/integration-test.bndrun @@ -45,6 +45,7 @@ org.mockito.mockito-core;version='[4.7.0,4.7.1)',\ org.objenesis;version='[3.2.0,3.2.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ org.osgi.test.junit5;version='[1.2.1,1.2.2)',\ diff --git a/northbound/sensorthings/mqtt/integration-test.bndrun b/northbound/sensorthings/mqtt/integration-test.bndrun index a5f364e4a..34b72142a 100644 --- a/northbound/sensorthings/mqtt/integration-test.bndrun +++ b/northbound/sensorthings/mqtt/integration-test.bndrun @@ -57,6 +57,7 @@ org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/northbound/sensorthings/rest.gateway/integration-test.bndrun b/northbound/sensorthings/rest.gateway/integration-test.bndrun index 66f7eebde..a8f0bd211 100644 --- a/northbound/sensorthings/rest.gateway/integration-test.bndrun +++ b/northbound/sensorthings/rest.gateway/integration-test.bndrun @@ -105,6 +105,7 @@ org.objectweb.asm;version='[9.3.0,9.3.1)',\ org.objenesis;version='[3.2.0,3.2.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.jakartars;version='[2.0.0,2.0.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ diff --git a/northbound/websocket/integration-test.bndrun b/northbound/websocket/integration-test.bndrun index 5c80d7147..1bfe9ce7c 100644 --- a/northbound/websocket/integration-test.bndrun +++ b/northbound/websocket/integration-test.bndrun @@ -85,6 +85,7 @@ org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ org.objectweb.asm;version='[9.4.0,9.4.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/southbound/history/timescale-provider/integration-test.bndrun b/southbound/history/timescale-provider/integration-test.bndrun index 79999adda..a76909b32 100644 --- a/southbound/history/timescale-provider/integration-test.bndrun +++ b/southbound/history/timescale-provider/integration-test.bndrun @@ -46,12 +46,13 @@ org.eclipse.sensinact.gateway.southbound.history.history-api;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.history.timescale-provider;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.history.timescale-provider-tests;version='[0.0.2,0.0.3)',\ - org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ - org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ + org.gecko.emf.osgi.api;version='[5.0.0,5.0.1)',\ + org.gecko.emf.osgi.component;version='[5.0.0,5.0.1)',\ org.mockito.junit-jupiter;version='[4.7.0,4.7.1)',\ org.mockito.mockito-core;version='[4.7.0,4.7.1)',\ org.objenesis;version='[3.2.0,3.2.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/southbound/http/http-device-factory/integration-test.bndrun b/southbound/http/http-device-factory/integration-test.bndrun index 87755bcbd..156dad834 100644 --- a/southbound/http/http-device-factory/integration-test.bndrun +++ b/southbound/http/http-device-factory/integration-test.bndrun @@ -56,9 +56,10 @@ org.eclipse.sensinact.gateway.southbound.device-factory.parser-csv;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.http.http-device-factory;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.http.http-device-factory-tests;version='[0.0.2,0.0.3)',\ - org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ - org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ + org.gecko.emf.osgi.api;version='[5.0.0,5.0.1)',\ + org.gecko.emf.osgi.component;version='[5.0.0,5.0.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/southbound/mqtt/mqtt-device-factory/integration-test.bndrun b/southbound/mqtt/mqtt-device-factory/integration-test.bndrun index 8e0ad5d44..b079b486f 100644 --- a/southbound/mqtt/mqtt-device-factory/integration-test.bndrun +++ b/southbound/mqtt/mqtt-device-factory/integration-test.bndrun @@ -62,9 +62,10 @@ org.eclipse.sensinact.gateway.southbound.mqtt.mqtt-client;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.mqtt.mqtt-device-factory;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.mqtt.mqtt-device-factory-tests;version='[0.0.2,0.0.3)',\ - org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ - org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ + org.gecko.emf.osgi.api;version='[5.0.0,5.0.1)',\ + org.gecko.emf.osgi.component;version='[5.0.0,5.0.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\ diff --git a/southbound/virtual/virtual-temperature-sensor/integration-test.bndrun b/southbound/virtual/virtual-temperature-sensor/integration-test.bndrun index 27c1ee7cd..cad720c33 100644 --- a/southbound/virtual/virtual-temperature-sensor/integration-test.bndrun +++ b/southbound/virtual/virtual-temperature-sensor/integration-test.bndrun @@ -39,9 +39,10 @@ org.eclipse.sensinact.gateway.core.models.provider;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.virtual.virtual-temperature-sensor;version='[0.0.2,0.0.3)',\ org.eclipse.sensinact.gateway.southbound.virtual.virtual-temperature-sensor-tests;version='[0.0.2,0.0.3)',\ - org.gecko.emf.osgi.api;version='[4.6.2,4.6.3)',\ - org.gecko.emf.osgi.component;version='[4.6.2,4.6.3)',\ + org.gecko.emf.osgi.api;version='[5.0.0,5.0.1)',\ + org.gecko.emf.osgi.component;version='[5.0.0,5.0.1)',\ org.opentest4j;version='[1.2.0,1.2.1)',\ + org.osgi.service.cm;version='[1.6.1,1.6.2)',\ org.osgi.service.component;version='[1.5.0,1.5.1)',\ org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\ org.osgi.test.common;version='[1.2.1,1.2.2)',\