2 * Copyright (c) 2010-2023 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.UnmarshalException;
21 import javax.xml.bind.Unmarshaller;
22 import javax.xml.stream.XMLStreamException;
23 import javax.xml.stream.XMLStreamReader;
25 import org.eclipse.jdt.annotation.NonNullByDefault;
26 import org.openhab.binding.avmfritz.internal.dto.templates.TemplateListModel;
27 import org.openhab.binding.avmfritz.internal.handler.AVMFritzBaseBridgeHandler;
28 import org.openhab.binding.avmfritz.internal.hardware.FritzAhaWebInterface;
29 import org.openhab.binding.avmfritz.internal.util.JAXBUtils;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
34 * Callback implementation for updating templates from a xml response.
36 * @author Christoph Weitkamp - Initial contribution
39 public class FritzAhaUpdateTemplatesCallback extends FritzAhaReauthCallback {
41 private final Logger logger = LoggerFactory.getLogger(FritzAhaUpdateTemplatesCallback.class);
43 private static final String WEBSERVICE_COMMAND = "switchcmd=gettemplatelistinfos";
45 private final AVMFritzBaseBridgeHandler handler;
50 * @param webInterface web interface to FRITZ!Box
51 * @param handler handler that will update things
53 public FritzAhaUpdateTemplatesCallback(FritzAhaWebInterface webInterface, AVMFritzBaseBridgeHandler handler) {
54 super(WEBSERVICE_PATH, WEBSERVICE_COMMAND, webInterface, GET, 1);
55 this.handler = handler;
58 @SuppressWarnings({ "null", "unused" })
60 public void execute(int status, String response) {
61 super.execute(status, response);
62 logger.trace("Received response '{}'", response);
63 if (isValidRequest()) {
65 XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(response));
66 Unmarshaller unmarshaller = JAXBUtils.JAXBCONTEXT_TEMPLATES.createUnmarshaller();
67 TemplateListModel model = unmarshaller.unmarshal(xsr, TemplateListModel.class).getValue();
69 handler.addTemplateList(model.getTemplates());
71 logger.debug("no template in response");
73 } catch (UnmarshalException e) {
74 logger.debug("Failed to unmarshal XML document: {}", e.getMessage());
75 } catch (JAXBException | XMLStreamException e) {
76 logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e);
79 logger.debug("request is invalid: {}", status);