diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/BoxHandler.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/BoxHandler.java index 276d978e04479..193b2dae7bdfd 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/BoxHandler.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/BoxHandler.java @@ -117,6 +117,7 @@ public void initialize() { public void dispose() { logger.debug("Handler disposed."); if (pollingJob != null && !pollingJob.isCancelled()) { + logger.debug("stop polling job"); pollingJob.cancel(true); pollingJob = null; } diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/IFritzHandler.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/IFritzHandler.java index 6d814decb3f3f..18d03de019b38 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/IFritzHandler.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/handler/IFritzHandler.java @@ -37,8 +37,7 @@ public interface IFritzHandler { * Called from {@link FritzAhaUpdateXmlCallback} to provide new values for * things. * - * @param model - * Device model with updated data. + * @param model Device model with updated data. */ public void addDeviceList(DeviceModel model); diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/ahamodel/DeviceModel.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/ahamodel/DeviceModel.java index 61fe96b284609..aa04417a1a50e 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/ahamodel/DeviceModel.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/ahamodel/DeviceModel.java @@ -64,12 +64,16 @@ public class DeviceModel { @XmlElement(name = "name") private String name; + @XmlElement(name = "switch") private SwitchModel switchModel; + @XmlElement(name = "powermeter") private PowerMeterModel powermeterModel; + @XmlElement(name = "temperature") private TemperatureModel temperatureModel; + @XmlElement(name = "hkr") private HeatingModel heatingModel; public PowerMeterModel getPowermeter() { diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmDiscoveryService.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmDiscoveryService.java index 33a50904d37b6..899bac489fa09 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmDiscoveryService.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmDiscoveryService.java @@ -93,6 +93,7 @@ public void startScan() { */ @Override protected synchronized void stopScan() { + logger.debug("stop scan on bridge {}", bridgeHandler.getThing().getUID()); super.stopScan(); removeOlderResults(getTimestampOfLastScan()); } @@ -140,6 +141,7 @@ protected void startBackgroundDiscovery() { @Override protected void stopBackgroundDiscovery() { if (scanningJob != null && !scanningJob.isCancelled()) { + logger.debug("stop background scanning job"); scanningJob.cancel(false); scanningJob = null; } diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmUpnpDiscoveryParticipant.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmUpnpDiscoveryParticipant.java index c16b103d3fc9c..10ae2c111f94d 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmUpnpDiscoveryParticipant.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/discovery/AvmUpnpDiscoveryParticipant.java @@ -32,6 +32,7 @@ * {@link UpnpDiscoveryService}. * * @author Robert Bausdorf - Initial contribution + * */ public class AvmUpnpDiscoveryParticipant implements UpnpDiscoveryParticipant { /** diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaDiscoveryCallback.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaDiscoveryCallback.java index e0021628a90b1..c56a46ff631e0 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaDiscoveryCallback.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaDiscoveryCallback.java @@ -10,7 +10,6 @@ import java.io.StringReader; -import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; @@ -18,6 +17,7 @@ import org.openhab.binding.avmfritz.internal.ahamodel.DevicelistModel; import org.openhab.binding.avmfritz.internal.discovery.AvmDiscoveryService; import org.openhab.binding.avmfritz.internal.hardware.FritzahaWebInterface; +import org.openhab.binding.avmfritz.util.JAXBtUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,8 +30,12 @@ * */ public class FritzAhaDiscoveryCallback extends FritzAhaReauthCallback { - private final Logger logger = LoggerFactory.getLogger(getClass()); + private final Logger logger = LoggerFactory.getLogger(FritzAhaDiscoveryCallback.class); + + /** + * Handler to update + */ private AvmDiscoveryService service; /** @@ -51,23 +55,23 @@ public FritzAhaDiscoveryCallback(FritzahaWebInterface webIface, AvmDiscoveryServ @Override public void execute(int status, String response) { super.execute(status, response); - if (this.isValidRequest()) { - logger.debug("discovery callback response {}", response); + logger.trace("Received discovery callback response: {}", response); + if (isValidRequest()) { try { - JAXBContext jaxbContext = JAXBContext.newInstance(DevicelistModel.class); - Unmarshaller jaxbUM = jaxbContext.createUnmarshaller(); - - DevicelistModel model = (DevicelistModel) jaxbUM.unmarshal(new StringReader(response)); + final Unmarshaller jaxbUnmarshaller = JAXBtUtils.JAXBCONTEXT.createUnmarshaller(); + final DevicelistModel model = (DevicelistModel) jaxbUnmarshaller.unmarshal(new StringReader(response)); if (model != null) { - for (DeviceModel device : model.getDevicelist()) { - this.service.onDeviceAddedInternal(device); + for (final DeviceModel device : model.getDevicelist()) { + service.onDeviceAddedInternal(device); } } else { logger.warn("no model in response"); } } catch (JAXBException e) { - logger.error("{}", e.getLocalizedMessage(), e); + logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e); } + } else { + logger.info("request is invalid: {}", status); } } } diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaUpdateXmlCallback.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaUpdateXmlCallback.java index e637a4e896609..de3fff89e9e27 100644 --- a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaUpdateXmlCallback.java +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/internal/hardware/callbacks/FritzAhaUpdateXmlCallback.java @@ -10,7 +10,6 @@ import java.io.StringReader; -import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; @@ -20,6 +19,7 @@ import org.openhab.binding.avmfritz.internal.ahamodel.DeviceModel; import org.openhab.binding.avmfritz.internal.ahamodel.DevicelistModel; import org.openhab.binding.avmfritz.internal.hardware.FritzahaWebInterface; +import org.openhab.binding.avmfritz.util.JAXBtUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,13 +28,12 @@ * response. Supports reauthorization. * * @author Robert Bausdorf - * + * @author Christoph Weitkamp + * */ public class FritzAhaUpdateXmlCallback extends FritzAhaReauthCallback { - /** - * logger - */ - private final Logger logger = LoggerFactory.getLogger(getClass()); + + private final Logger logger = LoggerFactory.getLogger(FritzAhaUpdateXmlCallback.class); /** * Handler to update @@ -43,9 +42,9 @@ public class FritzAhaUpdateXmlCallback extends FritzAhaReauthCallback { /** * Constructor - * + * * @param webIface Webinterface to FRITZ!Box - * @param handler Bridge handler taht will update things. + * @param handler Bridge handler that will update things. */ public FritzAhaUpdateXmlCallback(FritzahaWebInterface webIface, IFritzHandler handler) { super(WEBSERVICE_PATH, "switchcmd=getdevicelistinfos", webIface, Method.GET, 1); @@ -58,15 +57,13 @@ public FritzAhaUpdateXmlCallback(FritzahaWebInterface webIface, IFritzHandler ha @Override public void execute(int status, String response) { super.execute(status, response); - if (this.isValidRequest()) { - logger.trace("Received State response {}", response); + logger.trace("Received State response {}", response); + if (isValidRequest()) { try { - JAXBContext jaxbContext = JAXBContext.newInstance(DevicelistModel.class); - Unmarshaller jaxbUM = jaxbContext.createUnmarshaller(); - - DevicelistModel model = (DevicelistModel) jaxbUM.unmarshal(new StringReader(response)); + final Unmarshaller jaxbUnmarshaller = JAXBtUtils.JAXBCONTEXT.createUnmarshaller(); + final DevicelistModel model = (DevicelistModel) jaxbUnmarshaller.unmarshal(new StringReader(response)); if (model != null) { - for (DeviceModel device : model.getDevicelist()) { + for (final DeviceModel device : model.getDevicelist()) { handler.addDeviceList(device); } handler.setStatusInfo(ThingStatus.ONLINE, ThingStatusDetail.NONE, "FRITZ!Box online"); @@ -74,7 +71,7 @@ public void execute(int status, String response) { logger.warn("no model in response"); } } catch (JAXBException e) { - logger.error("{}", e.getLocalizedMessage(), e); + logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e); } } else { logger.info("request is invalid: {}", status); diff --git a/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/util/JAXBtUtils.java b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/util/JAXBtUtils.java new file mode 100755 index 0000000000000..e8aefc73ef9c0 --- /dev/null +++ b/addons/binding/org.openhab.binding.avmfritz/src/main/java/org/openhab/binding/avmfritz/util/JAXBtUtils.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2010-2017 by the respective copyright holders. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.openhab.binding.avmfritz.util; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; + +import org.openhab.binding.avmfritz.internal.ahamodel.DevicelistModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Implementation for a static use of JAXBContext as singleton instance. + * + * @author Christoph Weitkamp + * + */ +public class JAXBtUtils { + + private static final Logger logger = LoggerFactory.getLogger(JAXBtUtils.class); + + public static final JAXBContext JAXBCONTEXT = initJAXBContext(); + + private static JAXBContext initJAXBContext() { + JAXBContext jaxbContext = null; + try { + jaxbContext = JAXBContext.newInstance(DevicelistModel.class); + } catch (JAXBException e) { + logger.error("Exception creating JAXBContext: {}", e.getMessage(), e); + jaxbContext = null; + } + return jaxbContext; + } +}