2 * Copyright (c) 2010-2022 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.knx.internal.factory;
15 import static org.openhab.binding.knx.internal.KNXBindingConstants.*;
17 import java.util.Arrays;
18 import java.util.Collection;
20 import org.openhab.binding.knx.internal.handler.DeviceThingHandler;
21 import org.openhab.binding.knx.internal.handler.IPBridgeThingHandler;
22 import org.openhab.binding.knx.internal.handler.SerialBridgeThingHandler;
23 import org.openhab.binding.knx.internal.i18n.KNXTranslationProvider;
24 import org.openhab.core.config.core.Configuration;
25 import org.openhab.core.i18n.LocaleProvider;
26 import org.openhab.core.i18n.TranslationProvider;
27 import org.openhab.core.net.NetworkAddressService;
28 import org.openhab.core.thing.Bridge;
29 import org.openhab.core.thing.Thing;
30 import org.openhab.core.thing.ThingTypeUID;
31 import org.openhab.core.thing.ThingUID;
32 import org.openhab.core.thing.binding.BaseThingHandlerFactory;
33 import org.openhab.core.thing.binding.ThingHandler;
34 import org.openhab.core.thing.binding.ThingHandlerFactory;
35 import org.osgi.service.component.annotations.Activate;
36 import org.osgi.service.component.annotations.Component;
37 import org.osgi.service.component.annotations.Reference;
40 * The {@link KNXHandlerFactory} is responsible for creating things and thing
43 * @author Simon Kaufmann - Initial contribution and API
45 @Component(service = ThingHandlerFactory.class, configurationPid = "binding.knx")
46 public class KNXHandlerFactory extends BaseThingHandlerFactory {
48 public static final Collection<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Arrays.asList(THING_TYPE_DEVICE,
49 THING_TYPE_IP_BRIDGE, THING_TYPE_SERIAL_BRIDGE);
51 private NetworkAddressService networkAddressService;
54 public KNXHandlerFactory(final @Reference TranslationProvider translationProvider,
55 final @Reference LocaleProvider localeProvider) {
56 KNXTranslationProvider.I18N.setProvider(localeProvider, translationProvider);
60 public boolean supportsThingType(ThingTypeUID thingTypeUID) {
61 return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID);
65 public Thing createThing(ThingTypeUID thingTypeUID, Configuration configuration, ThingUID thingUID,
67 if (THING_TYPE_IP_BRIDGE.equals(thingTypeUID)) {
68 ThingUID ipBridgeUID = getIPBridgeThingUID(thingTypeUID, thingUID, configuration);
69 return super.createThing(thingTypeUID, configuration, ipBridgeUID, null);
71 if (THING_TYPE_SERIAL_BRIDGE.equals(thingTypeUID)) {
72 ThingUID serialBridgeUID = getSerialBridgeThingUID(thingTypeUID, thingUID, configuration);
73 return super.createThing(thingTypeUID, configuration, serialBridgeUID, null);
75 if (THING_TYPE_DEVICE.equals(thingTypeUID)) {
76 return super.createThing(thingTypeUID, configuration, thingUID, bridgeUID);
78 throw new IllegalArgumentException("The thing type " + thingTypeUID + " is not supported by the KNX binding.");
82 protected ThingHandler createHandler(Thing thing) {
83 if (thing.getThingTypeUID().equals(THING_TYPE_IP_BRIDGE)) {
84 return new IPBridgeThingHandler((Bridge) thing, networkAddressService);
85 } else if (thing.getThingTypeUID().equals(THING_TYPE_SERIAL_BRIDGE)) {
86 return new SerialBridgeThingHandler((Bridge) thing);
87 } else if (thing.getThingTypeUID().equals(THING_TYPE_DEVICE)) {
88 return new DeviceThingHandler(thing);
93 private ThingUID getIPBridgeThingUID(ThingTypeUID thingTypeUID, ThingUID thingUID, Configuration configuration) {
94 if (thingUID != null) {
97 String ipAddress = (String) configuration.get(IP_ADDRESS);
98 return new ThingUID(thingTypeUID, ipAddress);
101 private ThingUID getSerialBridgeThingUID(ThingTypeUID thingTypeUID, ThingUID thingUID,
102 Configuration configuration) {
103 if (thingUID != null) {
106 String serialPort = (String) configuration.get(SERIAL_PORT);
107 return new ThingUID(thingTypeUID, serialPort);
111 protected void setNetworkAddressService(NetworkAddressService networkAddressService) {
112 this.networkAddressService = networkAddressService;
115 protected void unsetNetworkAddressService(NetworkAddressService networkAddressService) {
116 this.networkAddressService = null;