2 * Copyright (c) 2010-2021 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.avmfritz.internal.hardware.callbacks;
15 import static org.eclipse.jetty.http.HttpMethod.GET;
17 import java.io.StringReader;
19 import javax.xml.bind.JAXBException;
20 import javax.xml.bind.Unmarshaller;
21 import javax.xml.stream.XMLStreamException;
22 import javax.xml.stream.XMLStreamReader;
24 import org.eclipse.jdt.annotation.NonNullByDefault;
25 import org.openhab.binding.avmfritz.internal.dto.templates.TemplateListModel;
26 import org.openhab.binding.avmfritz.internal.handler.AVMFritzBaseBridgeHandler;
27 import org.openhab.binding.avmfritz.internal.hardware.FritzAhaWebInterface;
28 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
33 * Callback implementation for updating templates from a xml response.
35 * @author Christoph Weitkamp - Initial contribution
38 public class FritzAhaUpdateTemplatesCallback extends FritzAhaReauthCallback {
40 private final Logger logger = LoggerFactory.getLogger(FritzAhaUpdateTemplatesCallback.class);
42 private static final String WEBSERVICE_COMMAND = "switchcmd=gettemplatelistinfos";
44 private final AVMFritzBaseBridgeHandler handler;
49 * @param webInterface web interface to FRITZ!Box
50 * @param handler handler that will update things
52 public FritzAhaUpdateTemplatesCallback(FritzAhaWebInterface webInterface, AVMFritzBaseBridgeHandler handler) {
53 super(WEBSERVICE_PATH, WEBSERVICE_COMMAND, webInterface, GET, 1);
54 this.handler = handler;
58 public void execute(int status, String response) {
59 super.execute(status, response);
60 logger.trace("Received response '{}'", response);
61 if (isValidRequest()) {
63 XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(response));
64 Unmarshaller unmarshaller = JAXBUtils.JAXBCONTEXT_TEMPLATES.createUnmarshaller();
65 TemplateListModel model = (TemplateListModel) unmarshaller.unmarshal(xsr);
67 handler.addTemplateList(model.getTemplates());
69 logger.debug("no template in response");
71 } catch (JAXBException | XMLStreamException e) {
72 logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e);
75 logger.debug("request is invalid: {}", status);