2 * Copyright (c) 2010-2024 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.verisure.internal;
15 import java.util.HashSet;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.eclipse.jetty.client.HttpClient;
21 import org.openhab.binding.verisure.internal.handler.VerisureAlarmThingHandler;
22 import org.openhab.binding.verisure.internal.handler.VerisureBridgeHandler;
23 import org.openhab.binding.verisure.internal.handler.VerisureBroadbandConnectionThingHandler;
24 import org.openhab.binding.verisure.internal.handler.VerisureClimateDeviceThingHandler;
25 import org.openhab.binding.verisure.internal.handler.VerisureDoorWindowThingHandler;
26 import org.openhab.binding.verisure.internal.handler.VerisureEventLogThingHandler;
27 import org.openhab.binding.verisure.internal.handler.VerisureGatewayThingHandler;
28 import org.openhab.binding.verisure.internal.handler.VerisureMiceDetectionThingHandler;
29 import org.openhab.binding.verisure.internal.handler.VerisureSmartLockThingHandler;
30 import org.openhab.binding.verisure.internal.handler.VerisureSmartPlugThingHandler;
31 import org.openhab.binding.verisure.internal.handler.VerisureUserPresenceThingHandler;
32 import org.openhab.core.io.net.http.HttpClientFactory;
33 import org.openhab.core.thing.Bridge;
34 import org.openhab.core.thing.Thing;
35 import org.openhab.core.thing.ThingTypeUID;
36 import org.openhab.core.thing.binding.BaseThingHandlerFactory;
37 import org.openhab.core.thing.binding.ThingHandler;
38 import org.openhab.core.thing.binding.ThingHandlerFactory;
39 import org.osgi.service.component.annotations.Activate;
40 import org.osgi.service.component.annotations.Component;
41 import org.osgi.service.component.annotations.Reference;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
46 * The {@link VerisureHandlerFactory} is responsible for creating things and thing
49 * @author Jarle Hjortland - Initial contribution
50 * @author Jan Gustafsson - Further development
53 @Component(service = ThingHandlerFactory.class, configurationPid = "binding.verisure")
54 public class VerisureHandlerFactory extends BaseThingHandlerFactory {
56 public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = new HashSet<ThingTypeUID>();
58 SUPPORTED_THING_TYPES.addAll(VerisureBridgeHandler.SUPPORTED_THING_TYPES);
59 SUPPORTED_THING_TYPES.addAll(VerisureAlarmThingHandler.SUPPORTED_THING_TYPES);
60 SUPPORTED_THING_TYPES.addAll(VerisureSmartLockThingHandler.SUPPORTED_THING_TYPES);
61 SUPPORTED_THING_TYPES.addAll(VerisureSmartPlugThingHandler.SUPPORTED_THING_TYPES);
62 SUPPORTED_THING_TYPES.addAll(VerisureClimateDeviceThingHandler.SUPPORTED_THING_TYPES);
63 SUPPORTED_THING_TYPES.addAll(VerisureBroadbandConnectionThingHandler.SUPPORTED_THING_TYPES);
64 SUPPORTED_THING_TYPES.addAll(VerisureDoorWindowThingHandler.SUPPORTED_THING_TYPES);
65 SUPPORTED_THING_TYPES.addAll(VerisureUserPresenceThingHandler.SUPPORTED_THING_TYPES);
66 SUPPORTED_THING_TYPES.addAll(VerisureMiceDetectionThingHandler.SUPPORTED_THING_TYPES);
67 SUPPORTED_THING_TYPES.addAll(VerisureEventLogThingHandler.SUPPORTED_THING_TYPES);
68 SUPPORTED_THING_TYPES.addAll(VerisureGatewayThingHandler.SUPPORTED_THING_TYPES);
71 private final Logger logger = LoggerFactory.getLogger(VerisureHandlerFactory.class);
72 private final HttpClient httpClient;
75 public VerisureHandlerFactory(@Reference HttpClientFactory httpClientFactory) {
76 this.httpClient = httpClientFactory.getCommonHttpClient();
80 public boolean supportsThingType(ThingTypeUID thingTypeUID) {
81 return SUPPORTED_THING_TYPES.contains(thingTypeUID);
85 protected @Nullable ThingHandler createHandler(Thing thing) {
86 logger.debug("createHandler this: {}", thing);
87 final ThingHandler thingHandler;
88 if (VerisureBridgeHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
89 logger.debug("Create VerisureBridgeHandler");
90 thingHandler = new VerisureBridgeHandler((Bridge) thing, httpClient);
91 } else if (VerisureAlarmThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
92 logger.debug("Create VerisureAlarmThingHandler {}", thing.getThingTypeUID());
93 thingHandler = new VerisureAlarmThingHandler(thing);
94 } else if (VerisureSmartLockThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
95 logger.debug("Create VerisureSmartLockThingHandler {}", thing.getThingTypeUID());
96 thingHandler = new VerisureSmartLockThingHandler(thing);
97 } else if (VerisureSmartPlugThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
98 logger.debug("Create VerisureSmartPlugThingHandler {}", thing.getThingTypeUID());
99 thingHandler = new VerisureSmartPlugThingHandler(thing);
100 } else if (VerisureClimateDeviceThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
101 logger.debug("Create VerisureClimateDeviceThingHandler {}", thing.getThingTypeUID());
102 thingHandler = new VerisureClimateDeviceThingHandler(thing);
103 } else if (VerisureBroadbandConnectionThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
104 logger.debug("Create VerisureBroadbandConnectionThingHandler {}", thing.getThingTypeUID());
105 thingHandler = new VerisureBroadbandConnectionThingHandler(thing);
106 } else if (VerisureDoorWindowThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
107 logger.debug("Create VerisureDoorWindowThingHandler {}", thing.getThingTypeUID());
108 thingHandler = new VerisureDoorWindowThingHandler(thing);
109 } else if (VerisureUserPresenceThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
110 logger.debug("Create VerisureUserPresenceThingHandler {}", thing.getThingTypeUID());
111 thingHandler = new VerisureUserPresenceThingHandler(thing);
112 } else if (VerisureMiceDetectionThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
113 logger.debug("Create VerisureMiceDetectionThingHandler {}", thing.getThingTypeUID());
114 thingHandler = new VerisureMiceDetectionThingHandler(thing);
115 } else if (VerisureEventLogThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
116 logger.debug("Create VerisureEventLogThingHandler {}", thing.getThingTypeUID());
117 thingHandler = new VerisureEventLogThingHandler(thing);
118 } else if (VerisureGatewayThingHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
119 logger.debug("Create VerisureGatewayThingHandler {}", thing.getThingTypeUID());
120 thingHandler = new VerisureGatewayThingHandler(thing);
122 logger.debug("Not possible to create thing handler for thing {}", thing);