]> git.basschouten.com Git - openhab-addons.git/blob
ce8a7381197e801e4a7fab9a3054b418d4796f28
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.smsmodem.internal;
14
15 import java.util.Set;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19 import org.openhab.binding.smsmodem.internal.handler.SMSConversationHandler;
20 import org.openhab.binding.smsmodem.internal.handler.SMSModemBridgeHandler;
21 import org.openhab.core.config.discovery.AbstractDiscoveryService;
22 import org.openhab.core.config.discovery.DiscoveryResult;
23 import org.openhab.core.config.discovery.DiscoveryResultBuilder;
24 import org.openhab.core.config.discovery.DiscoveryService;
25 import org.openhab.core.thing.ThingTypeUID;
26 import org.openhab.core.thing.ThingUID;
27 import org.openhab.core.thing.binding.ThingHandler;
28 import org.openhab.core.thing.binding.ThingHandlerService;
29
30 /**
31  * This class implements a discovery service for SMSConversation
32  *
33  * @author Gwendal ROULLEAU - Initial contribution
34  */
35 @NonNullByDefault
36 public class SMSConversationDiscoveryService extends AbstractDiscoveryService
37         implements DiscoveryService, ThingHandlerService {
38
39     private @NonNullByDefault({}) SMSModemBridgeHandler bridgeHandler;
40     private @NonNullByDefault({}) ThingUID bridgeUid;
41
42     public SMSConversationDiscoveryService() {
43         super(0);
44     }
45
46     public SMSConversationDiscoveryService(int timeout) throws IllegalArgumentException {
47         super(timeout);
48     }
49
50     @Override
51     protected void startScan() {
52         for (String msisdn : bridgeHandler.getAllSender()) {
53             buildDiscovery(msisdn);
54         }
55     }
56
57     public void buildDiscovery(String sender) {
58         String senderSanitized = sender.replaceAll("[^a-zA-Z0-9+]", "_");
59
60         ThingUID thingUID = new ThingUID(SMSModemBindingConstants.SMSCONVERSATION_THING_TYPE, senderSanitized,
61                 bridgeUid.getId());
62
63         DiscoveryResult result = DiscoveryResultBuilder.create(thingUID)
64                 .withProperty(SMSModemBindingConstants.SMSCONVERSATION_PARAMETER_RECIPIENT, senderSanitized)
65                 .withLabel("Conversation with " + sender).withBridge(bridgeUid)
66                 .withThingType(SMSModemBindingConstants.SMSCONVERSATION_THING_TYPE)
67                 .withRepresentationProperty(SMSModemBindingConstants.SMSCONVERSATION_PARAMETER_RECIPIENT).build();
68         thingDiscovered(result);
69     }
70
71     public void buildByAutoDiscovery(String sender) {
72         if (isBackgroundDiscoveryEnabled()) {
73             buildDiscovery(sender);
74         }
75     }
76
77     @Override
78     public Set<ThingTypeUID> getSupportedThingTypes() {
79         return Set.of(SMSConversationHandler.SUPPORTED_THING_TYPES_UIDS);
80     }
81
82     @Override
83     public void setThingHandler(ThingHandler handler) {
84         this.bridgeHandler = (SMSModemBridgeHandler) handler;
85         this.bridgeUid = handler.getThing().getUID();
86         this.bridgeHandler.setDiscoveryService(this);
87     }
88
89     @Override
90     public @Nullable ThingHandler getThingHandler() {
91         return bridgeHandler;
92     }
93
94     @Override
95     public void deactivate() {
96         super.deactivate();
97     }
98 }