diff options
author | BOLLE Sebastien | 2018-03-22 12:55:37 +0000 |
---|---|---|
committer | Mahdi Ben Alaya | 2018-07-02 12:51:11 +0000 |
commit | 93f8706da82b0ecce07e33a15fafe097343cdae0 (patch) | |
tree | 99ab263876269e4e68d0e7f66bd495cf3d944027 | |
parent | 327fb9a2553c5617d21a6b5023d3e72a59ef47ac (diff) | |
download | org.eclipse.om2m-93f8706da82b0ecce07e33a15fafe097343cdae0.tar.gz org.eclipse.om2m-93f8706da82b0ecce07e33a15fafe097343cdae0.tar.xz org.eclipse.om2m-93f8706da82b0ecce07e33a15fafe097343cdae0.zip |
sdt.netatmo: use declarative services.
Signed-off-by: BOLLE Sebastien <sebastien.bolle@orange.com>
Signed-off-by: BONNARDEL Gregory <gbonnardel.ext@orange.com>
8 files changed, 130 insertions, 122 deletions
diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.classpath b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.classpath index b82e5828..3c425631 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.classpath +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.classpath @@ -1,8 +1,9 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src/main/java/"/> - <classpathentry exported="true" kind="lib" path="lib/json-simple-1.1.1.jar"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> +<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/test/java"/>
+ <classpathentry exported="true" kind="lib" path="lib/json-simple-1.1.1.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.project b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.project index 3f8012f6..107f4a6c 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.project +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/.project @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.onem2m.home.netatmo</name>
- <comment></comment>
+ <comment></comment>
<projects>
</projects>
<buildSpec>
@@ -25,6 +25,11 @@ <arguments>
</arguments>
</buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/META-INF/MANIFEST.MF b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/META-INF/MANIFEST.MF index ec49c0f1..2833f5e2 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/META-INF/MANIFEST.MF +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/META-INF/MANIFEST.MF @@ -3,8 +3,8 @@ Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.om2m.sdt.home.netatmo Bundle-SymbolicName: org.eclipse.om2m.sdt.home.netatmo;singleton:=true Bundle-Version: 1.1.0.qualifier -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-Activator: org.eclipse.om2m.sdt.home.netatmo.impl.Activator +Bundle-RequiredExecutionEnvironment: JavaSE-1.7, + JavaSE-1.8 Bundle-ClassPath: ., lib/json-simple-1.1.1.jar Import-Package: org.eclipse.om2m.sdt, @@ -18,5 +18,8 @@ Import-Package: org.eclipse.om2m.sdt, org.junit;version="4.12.0";resolution:=optional, org.osgi.framework, org.osgi.service.cm, + org.osgi.service.component, + org.osgi.service.component.annotations, org.osgi.service.log, org.osgi.util.tracker +Service-Component: OSGI-INF/netatmo.sdt.driver.xml diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/OSGI-INF/netatmo.sdt.driver.xml b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/OSGI-INF/netatmo.sdt.driver.xml new file mode 100644 index 00000000..9e8c7569 --- /dev/null +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/OSGI-INF/netatmo.sdt.driver.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.2.0" activate="activate" configuration-pid="netatmo.sdt.driver" configuration-policy="require" deactivate="deactivate" enabled="true" immediate="true" modified="modified" name="netatmo.sdt.driver">
+ <reference bind="setLogService" cardinality="0..1" interface="org.osgi.service.log.LogService" name="logService" policy="dynamic" unbind="unsetLogService"/>
+ <implementation class="org.eclipse.om2m.sdt.home.netatmo.impl.Activator"/>
+</scr:component>
diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/build.properties b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/build.properties index 940bbe7b..b6d31b39 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/build.properties +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/build.properties @@ -21,4 +21,5 @@ source.. = src/main/java/ output.. = bin/ bin.includes = META-INF/,\ .,\ - lib/json-simple-1.1.1.jar + lib/json-simple-1.1.1.jar,\ + OSGI-INF/netatmo.sdt.driver.xml diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Activator.java b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Activator.java index 9b84edf1..5be819dc 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Activator.java +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Activator.java @@ -8,9 +8,7 @@ package org.eclipse.om2m.sdt.home.netatmo.impl; import java.util.ArrayList; -import java.util.Dictionary; import java.util.HashMap; -import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -25,100 +23,81 @@ import org.eclipse.om2m.sdt.home.netatmo.model.WeatherStationModule; import org.eclipse.om2m.sdt.home.netatmo.model.WelcomeCamera; import org.eclipse.om2m.sdt.home.netatmo.sdt.SDTWeatherStation; import org.eclipse.om2m.sdt.home.netatmo.sdt.SDTWelcomeCameraDevice; -import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; -import org.osgi.service.cm.ConfigurationException; -import org.osgi.service.cm.ManagedService; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.ConfigurationPolicy; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Modified; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferenceCardinality; +import org.osgi.service.component.annotations.ReferencePolicy; import org.osgi.service.log.LogService; -import org.osgi.util.tracker.ServiceTracker; -import org.osgi.util.tracker.ServiceTrackerCustomizer; @SuppressWarnings({ "rawtypes", "unchecked" }) -public class Activator implements BundleActivator, HomeListener, ManagedService { - +@Component( + configurationPid = "netatmo.sdt.driver", + configurationPolicy = ConfigurationPolicy.REQUIRE, + enabled = true, + immediate = true, + name = "netatmo.sdt.driver") +public class Activator implements HomeListener { + public static final Domain NETATMO_DOMAIN = new Domain("Netatmo_Domain"); public static final String PROTOCOL = "Netatmo"; public static Logger logger = new Logger(PROTOCOL); private static int detectionThreshold; private static final String SERVICE_PID = "netatmo.sdt.driver"; - - private ServiceTracker logServiceTracker; - + private Discovery discovery; - + private Map<String, WelcomeCamera> welcomeCameras; private Map<String, SDTWelcomeCameraDevice> sdtCameras; - + private Map<String, SDTWeatherStation> sdtWeatherStations; - + private BundleContext bundleContext; - + private ServiceRegistration serviceRegistration; - + public Activator() { sdtCameras = new HashMap<>(); welcomeCameras = new HashMap<>(); sdtWeatherStations = new HashMap<>(); } - @Override - public void start(final BundleContext context) throws Exception { - // store bundleContext - bundleContext = context; - - // retrieve LogService and init Logger - logServiceTracker = new ServiceTracker(context, LogService.class.getName(), - new ServiceTrackerCustomizer() { - @Override - public void removedService(ServiceReference reference, Object service) { - logger.unsetLogService(); - } - @Override - public void modifiedService(ServiceReference reference, Object service) { - } - @Override - public Object addingService(ServiceReference reference) { - LogService logService = (LogService) context.getService(reference); -// logger.setLogService(logService); - return logService; - } - }); - logServiceTracker.open(); - - // register this as a ManagedService - Dictionary properties = new Hashtable<>(); - properties.put(Constants.SERVICE_PID, SERVICE_PID); - serviceRegistration = bundleContext.registerService(ManagedService.class.getName(), - this, properties); + @Activate + protected void activate(BundleContext pBundleContext, Map<String, Object> properties) { + // store bundleContext + bundleContext = pBundleContext; + + modified(properties); + } - @Override - public void stop(BundleContext context) throws Exception { + @Deactivate + protected void deactivate(ComponentContext cc) { if (serviceRegistration != null) { serviceRegistration.unregister(); serviceRegistration = null; } - - logServiceTracker.close(); - logServiceTracker = null; - + if (discovery != null) { discovery.stopDiscovery(); discovery.removeHomeListener(this); discovery = null; } - + // unregister all cameras - for(SDTWelcomeCameraDevice sdtWelcomeCamera : sdtCameras.values()) { + for (SDTWelcomeCameraDevice sdtWelcomeCamera : sdtCameras.values()) { sdtWelcomeCamera.unregister(); } - + // unregister all weather stations - for(SDTWeatherStation sdtWeatherStation : sdtWeatherStations.values()) { + for (SDTWeatherStation sdtWeatherStation : sdtWeatherStations.values()) { sdtWeatherStation.unregister(); } } @@ -127,18 +106,17 @@ public class Activator implements BundleActivator, HomeListener, ManagedService public void notifyCameraAddedOrUpdated(Home home, WelcomeCamera camera, boolean updated) { if (updated) { // update - + } else { // add new camera into welcomeCameras map synchronized (welcomeCameras) { welcomeCameras.put(camera.getId(), camera); } - + // create SDT device - SDTWelcomeCameraDevice sdtWelcomeCamera = - new SDTWelcomeCameraDevice(camera, detectionThreshold); + SDTWelcomeCameraDevice sdtWelcomeCamera = new SDTWelcomeCameraDevice(camera, detectionThreshold); sdtWelcomeCamera.register(bundleContext); - + // add into sdtCameras map synchronized (sdtCameras) { sdtCameras.put(camera.getId(), sdtWelcomeCamera); @@ -148,13 +126,15 @@ public class Activator implements BundleActivator, HomeListener, ManagedService @Override public void notifyPersonAddedOrUpdated(Home home, Person person, boolean updated) { - SDTWelcomeCameraDevice sdtWelcomeCamera = getSDTWelcomeCamera(home.getCameras().values().iterator().next().getId()); - + SDTWelcomeCameraDevice sdtWelcomeCamera = getSDTWelcomeCamera( + home.getCameras().values().iterator().next().getId()); + if (sdtWelcomeCamera != null) { // notify person if (person.getPseudo() == null) -// logger.debug("Unknwown person... Ignore"); - ;else if (person.getOutOfSight()) + // logger.debug("Unknwown person... Ignore"); + ; + else if (person.getOutOfSight()) logger.debug(person.getPseudo() + " out of sight. Ignore..."); else { logger.info("InSight " + person.getPseudo()); @@ -167,49 +147,49 @@ public class Activator implements BundleActivator, HomeListener, ManagedService @Override public void notifyEventsUpdated(Home home, List<Event> events) { -// logger.info("notifyEventsUpdated"); -// -// // list of events has changed -// for(Event e : events) { -// String cameraId = e.getCameraId(); -// String eventType = e.getType(); -// if ("person".equals(eventType)) { -// String personId = e.getPersonId(); -// Long time = e.getTime(); -// Person person = home.getPerson(personId); -// -// // retrieve SDt device -// SDTWelcomeCameraDevice sdtWelcomeCamera = getSDTWelcomeCamera(cameraId); -// -// if (sdtWelcomeCamera != null) { -// // notify person -// sdtWelcomeCamera.notifyPerson(personId, person.getPseudo(), time); -// -// // no need to continue -// break; -// } -// -// -// } -// } + // logger.info("notifyEventsUpdated"); + // + // // list of events has changed + // for(Event e : events) { + // String cameraId = e.getCameraId(); + // String eventType = e.getType(); + // if ("person".equals(eventType)) { + // String personId = e.getPersonId(); + // Long time = e.getTime(); + // Person person = home.getPerson(personId); + // + // // retrieve SDt device + // SDTWelcomeCameraDevice sdtWelcomeCamera = getSDTWelcomeCamera(cameraId); + // + // if (sdtWelcomeCamera != null) { + // // notify person + // sdtWelcomeCamera.notifyPerson(personId, person.getPseudo(), time); + // + // // no need to continue + // break; + // } + // + // + // } + // } } @Override public void notifyHomeAdded(Home newHome) { - + } - + @Override public void notifyWeatherStationAddedOrUpdated(WeatherStation ws, boolean updated) { // register WeatherStation as SDT Device ! logger.info("notifyWeatherStationAddedOrUpdated(ws=" + ws.getId() + ", updated=" + updated + ")"); - + if (!updated) { // add a new WeatherStation SDTWeatherStation sdtWS = new SDTWeatherStation(ws); sdtWS.register(bundleContext); sdtWeatherStations.put(sdtWS.getId(), sdtWS); - + // add new module for (WeatherStationModule module : ws.getModules().values()) { SDTWeatherStation sdtModuleWS = new SDTWeatherStation(module); @@ -217,8 +197,19 @@ public class Activator implements BundleActivator, HomeListener, ManagedService sdtWeatherStations.put(sdtModuleWS.getId(), sdtModuleWS); } } - } - + } + + @Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, name = "logService", unbind = "unsetLogService") + protected void setLogService(LogService pLogService) { + logger.setLogService(pLogService); + logger.info("Netatmo - logger set"); + } + + protected void unsetLogService(LogService pLogService) { + logger.info("Netatmo - logger unset"); + logger.unsetLogService(); + } + private SDTWelcomeCameraDevice getSDTWelcomeCamera(String cameraId) { SDTWelcomeCameraDevice sdtWelcomeCamera = null; synchronized (sdtCameras) { @@ -227,11 +218,11 @@ public class Activator implements BundleActivator, HomeListener, ManagedService return sdtWelcomeCamera; } - @Override - public synchronized void updated(Dictionary properties) throws ConfigurationException { - logger.info("updated(properties=" + properties + ")"); + @Modified + protected void modified(Map<String, Object> properties) { + logger.info("modified(properties=" + properties + ")"); // check all parameters are located into properties - if (! checkParameters(properties)) { + if (!checkParameters(properties)) { logger.info("Missing a mandatory property --> Netatmo driver is not started"); return; } @@ -248,20 +239,21 @@ public class Activator implements BundleActivator, HomeListener, ManagedService discovery.addHomeListener(this); discovery.startDiscovery(); } - + /** * Return true if all mandatory parameters are provided + * * @param properties * @return true if all is ok */ - private static boolean checkParameters(Dictionary properties) { + private static boolean checkParameters(Map properties) { logger.info("checkParameters"); if (properties == null) { // no properties logger.info("No properties to configure SDT Netatmo Driver --> the driver is not started !"); return false; } - + logger.info("checkParameter(properties.length=" + properties.size() + ")"); List<String> missing = new ArrayList<String>(); if (properties.get(Discovery.CONFIG_CLIENT_ID) == null) { @@ -278,8 +270,8 @@ public class Activator implements BundleActivator, HomeListener, ManagedService } // retrieve detection threshold try { - detectionThreshold = - Integer.parseInt(properties.get(Discovery.CONFIG_CAMERA_DETECTION_THRESHOLD).toString()); + detectionThreshold = Integer + .parseInt(properties.get(Discovery.CONFIG_CAMERA_DETECTION_THRESHOLD).toString()); } catch (Exception e) { detectionThreshold = -1; } diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Discovery.java b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Discovery.java index 92271f24..4b805b1f 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Discovery.java +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/main/java/org/eclipse/om2m/sdt/home/netatmo/impl/Discovery.java @@ -53,7 +53,7 @@ public class Discovery { private boolean useLocalUrl = false; @SuppressWarnings("rawtypes") - public Discovery(Dictionary properties) { + public Discovery(Map properties) { // retrieve useLocalUrl Object useLocalUrlProp = properties.get(CONFIG_CAMERA_USE_LOCAL_URL); diff --git a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/test/java/org/eclipse/om2m/sdt/home/netatmo/impl/DiscoveryTestCase.java b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/test/java/org/eclipse/om2m/sdt/home/netatmo/impl/DiscoveryTestCase.java index 76e279c2..652a5664 100644 --- a/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/test/java/org/eclipse/om2m/sdt/home/netatmo/impl/DiscoveryTestCase.java +++ b/org.eclipse.om2m.sdt/org.eclipse.om2m.sdt.home.netatmo/src/test/java/org/eclipse/om2m/sdt/home/netatmo/impl/DiscoveryTestCase.java @@ -9,6 +9,7 @@ package org.eclipse.om2m.sdt.home.netatmo.impl; import java.io.FileInputStream; import java.util.Dictionary; +import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.Properties; @@ -20,7 +21,7 @@ import junit.framework.TestCase; public class DiscoveryTestCase extends TestCase { - private Dictionary<String, String> configuration; + private Map<String, String> configuration; @Override protected void setUp() throws Exception { @@ -29,7 +30,7 @@ public class DiscoveryTestCase extends TestCase { Properties properties = new Properties(); properties.load(new FileInputStream("src/test/resources/netatmo.sdt.driver.properties")); - configuration = new Hashtable<>(); + configuration = new HashMap(); configuration.put(Discovery.CONFIG_CLIENT_ID, properties.getProperty(Discovery.CONFIG_CLIENT_ID)); configuration.put(Discovery.CONFIG_CLIENT_SECRET, properties.getProperty(Discovery.CONFIG_CLIENT_SECRET)); configuration.put(Discovery.CONFIG_USERNAME, properties.getProperty(Discovery.CONFIG_USERNAME)); |