]> git.basschouten.com Git - openhab-addons.git/blob
3cabf46867e577dfd9f4de75ef6ad3440d6b7ace
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 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.pushsafer.internal.actions;
14
15 import static org.openhab.binding.pushsafer.internal.PushsaferBindingConstants.DEFAULT_TITLE;
16 import static org.openhab.binding.pushsafer.internal.connection.PushsaferMessageBuilder.*;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.binding.pushsafer.internal.connection.PushsaferConfigurationException;
21 import org.openhab.binding.pushsafer.internal.connection.PushsaferMessageBuilder;
22 import org.openhab.binding.pushsafer.internal.handler.PushsaferAccountHandler;
23 import org.openhab.core.automation.annotation.ActionInput;
24 import org.openhab.core.automation.annotation.ActionOutput;
25 import org.openhab.core.automation.annotation.RuleAction;
26 import org.openhab.core.thing.binding.ThingActions;
27 import org.openhab.core.thing.binding.ThingActionsScope;
28 import org.openhab.core.thing.binding.ThingHandler;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 /**
33  * Some automation actions to be used with a {@link PushsaferAccountHandler}.
34  *
35  * @author Kevin Siml - Initial contribution, forked from Christoph Weitkamp
36  */
37 @ThingActionsScope(name = "pushsafer")
38 @NonNullByDefault
39 public class PushsaferActions implements ThingActions {
40
41     private static final String DEFAULT_EMERGENCY_PRIORITY = "2";
42
43     private final Logger logger = LoggerFactory.getLogger(PushsaferActions.class);
44
45     private @NonNullByDefault({}) PushsaferAccountHandler accountHandler;
46
47     @RuleAction(label = "@text/sendPushsaferMessageActionLabel", description = "@text/sendPushsaferMessageActionDescription")
48     public @ActionOutput(name = "sent", label = "@text/sendPushsaferMessageActionOutputLabel", description = "@text/sendPushsaferMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendPushsaferMessage(
49             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
50             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
51         logger.trace("ThingAction 'sendPushsaferMessage' called with value(s): message='{}', title='{}'", message,
52                 title);
53         return send(getDefaultPushsaferMessageBuilder(message), title);
54     }
55
56     public static Boolean sendPushsaferMessage(ThingActions actions, String message, @Nullable String title) {
57         return ((PushsaferActions) actions).sendPushsaferMessage(message, title);
58     }
59
60     @RuleAction(label = "@text/sendPushsaferURLMessageActionLabel", description = "@text/sendPushsaferURLMessageActionDescription")
61     public @ActionOutput(name = "sent", label = "@text/sendPushsaferMessageActionOutputLabel", description = "@text/sendPushsaferMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendPushsaferURLMessage(
62             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
63             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
64             @ActionInput(name = "url", label = "@text/sendPushsaferMessageActionInputURLLabel", description = "@text/sendPushsaferMessageActionInputURLDescription", type = "java.lang.String", required = true) String url,
65             @ActionInput(name = "urlTitle", label = "@text/sendPushsaferMessageActionInputURLTitleLabel", description = "@text/sendPushsaferMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle) {
66         logger.trace(
67                 "ThingAction 'sendPushsaferURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}'",
68                 message, url, title, urlTitle);
69         if (url == null) {
70             throw new IllegalArgumentException("Skip sending message as 'url' is null.");
71         }
72
73         PushsaferMessageBuilder builder = getDefaultPushsaferMessageBuilder(message).withUrl(url);
74         if (urlTitle != null) {
75             builder.withUrl(urlTitle);
76         }
77         return send(builder, title);
78     }
79
80     public static Boolean sendPushsaferURLMessage(ThingActions actions, String message, @Nullable String title,
81             String url, @Nullable String urlTitle) {
82         return ((PushsaferActions) actions).sendPushsaferURLMessage(message, title, url, urlTitle);
83     }
84
85     @RuleAction(label = "@text/sendHTMLMessageActionLabel", description = "@text/sendHTMLMessageActionDescription")
86     public @ActionOutput(name = "sent", label = "@text/sendPushsaferMessageActionOutputLabel", description = "@text/sendPushsaferMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendPushsaferHtmlMessage(
87             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
88             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
89         logger.trace("ThingAction 'sendPushsaferHtmlMessage' called with value(s): message='{}', title='{}'", message,
90                 title);
91         return send(getDefaultPushsaferMessageBuilder(message).withHtmlFormatting(), title);
92     }
93
94     public static Boolean sendPushsaferHtmlMessage(ThingActions actions, String message, @Nullable String title) {
95         return ((PushsaferActions) actions).sendPushsaferHtmlMessage(message, title);
96     }
97
98     @RuleAction(label = "@text/sendPushsaferMonospaceMessageActionLabel", description = "@text/sendPushsaferMonospaceMessageActionDescription")
99     public @ActionOutput(name = "sent", label = "@text/sendPushsaferMessageActionOutputLabel", description = "@text/sendPushsaferMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendPushsaferMonospaceMessage(
100             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
101             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
102         logger.trace("ThingAction 'sendPushsaferMonospaceMessage' called with value(s): message='{}', title='{}'",
103                 message, title);
104         return send(getDefaultPushsaferMessageBuilder(message).withMonospaceFormatting(), title);
105     }
106
107     public static Boolean sendPushsaferMonospaceMessage(ThingActions actions, String message, @Nullable String title) {
108         return ((PushsaferActions) actions).sendPushsaferMonospaceMessage(message, title);
109     }
110
111     @RuleAction(label = "@text/sendPushsaferAttachmentMessageActionLabel", description = "@text/sendPushsaferAttachmentMessageActionDescription")
112     public @ActionOutput(name = "sent", label = "@text/sendPushsaferMessageActionOutputLabel", description = "@text/sendPushsaferMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendPushsaferAttachmentMessage(
113             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
114             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
115             @ActionInput(name = "attachment", label = "@text/sendPushsaferMessageActionInputAttachmentLabel", description = "@text/sendPushsaferMessageActionInputAttachmentDescription", type = "java.lang.String", required = true) String attachment,
116             @ActionInput(name = "contentType", label = "@text/sendPushsaferMessageActionInputContentTypeLabel", description = "@text/sendPushsaferMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType,
117             @ActionInput(name = "authentication", label = "@text/sendPushsaferMessageActionInputAuthenticationLabel", description = "@text/sendPushsaferMessageActionInputAuthenticationDescription", type = "java.lang.String", defaultValue = DEFAULT_AUTH) @Nullable String authentication) {
118         logger.trace(
119                 "ThingAction 'sendPushsaferAttachmentMessage' called with value(s): message='{}', title='{}', attachment='{}', contentType='{}', authentication='{}'",
120                 message, title, attachment, contentType, authentication);
121         if (attachment == null) {
122             throw new IllegalArgumentException("Skip sending message as 'attachment' is null.");
123         }
124
125         PushsaferMessageBuilder builder = getDefaultPushsaferMessageBuilder(message).withAttachment(attachment);
126         if (contentType != null) {
127             builder.withContentType(contentType);
128         }
129         if (authentication != null) {
130             builder.withAuthentication(authentication);
131         }
132         return send(builder, title);
133     }
134
135     public static Boolean sendPushsaferAttachmentMessage(ThingActions actions, String message, @Nullable String title,
136             String attachment, @Nullable String contentType, @Nullable String authentication) {
137         return ((PushsaferActions) actions).sendPushsaferAttachmentMessage(message, title, attachment, contentType,
138                 authentication);
139     }
140
141     @RuleAction(label = "@text/sendPushsaferPriorityMessageActionLabel", description = "@text/sendPushsaferPriorityMessageActionDescription")
142     public @ActionOutput(name = "receipt", label = "@text/sendPushsaferPriorityMessageActionOutputLabel", description = "@text/sendPushsaferPriorityMessageActionOutputDescription", type = "java.lang.String") String sendPushsaferPriorityMessage(
143             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
144             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
145             @ActionInput(name = "priority", label = "@text/sendPushsaferMessageActionInputPriorityLabel", description = "@text/sendPushsaferMessageActionInputPriorityDescription", type = "java.lang.Integer", defaultValue = DEFAULT_EMERGENCY_PRIORITY) @Nullable Integer priority) {
146         logger.trace(
147                 "ThingAction 'sendPushsaferPriorityMessage' called with value(s): message='{}', title='{}', priority='{}'",
148                 message, title, priority);
149         PushsaferMessageBuilder builder = getDefaultPushsaferMessageBuilder(message)
150                 .withPriority(priority == null ? EMERGENCY_PRIORITY : priority.intValue());
151
152         if (title != null) {
153             builder.withTitle(title);
154         }
155         return accountHandler.sendPushsaferPriorityMessage(builder);
156     }
157
158     public static String sendPushsaferPriorityMessage(ThingActions actions, String message, @Nullable String title,
159             @Nullable Integer priority) {
160         return ((PushsaferActions) actions).sendPushsaferPriorityMessage(message, title, priority);
161     }
162
163     @RuleAction(label = "@text/cancelPushsaferPriorityMessageActionLabel", description = "@text/cancelPushsaferPriorityMessageActionDescription")
164     public @ActionOutput(name = "canceled", label = "@text/cancelPushsaferPriorityMessageActionOutputLabel", description = "@text/cancelPushsaferPriorityMessageActionOutputDescription", type = "java.lang.Boolean") Boolean cancelPushsaferPriorityMessage(
165             @ActionInput(name = "receipt", label = "@text/cancelPushsaferPriorityMessageActionInputReceiptLabel", description = "@text/cancelPushsaferPriorityMessageActionInputReceiptDescription", type = "java.lang.String", required = true) String receipt) {
166         logger.trace("ThingAction 'cancelPushsaferPriorityMessage' called with value(s): '{}'", receipt);
167         if (accountHandler == null) {
168             throw new RuntimeException("PushsaferAccountHandler is null!");
169         }
170
171         if (receipt == null) {
172             throw new IllegalArgumentException("Skip sending message as 'receipt' is null.");
173         }
174
175         return accountHandler.cancelPushsaferPriorityMessage(receipt);
176     }
177
178     public static Boolean cancelPushsaferPriorityMessage(ThingActions actions, String receipt) {
179         return ((PushsaferActions) actions).cancelPushsaferPriorityMessage(receipt);
180     }
181
182     @RuleAction(label = "@text/sendPushsaferMessageToDeviceActionLabel", description = "@text/sendPushsaferMessageToDeviceActionDescription")
183     public @ActionOutput(name = "sent", label = "@text/sendPushsaferMessageActionOutputLabel", description = "@text/sendPushsaferMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendPushsaferMessageToDevice(
184             @ActionInput(name = "device", label = "@text/sendPushsaferMessageActionInputDeviceLabel", description = "@text/sendPushsaferMessageActionInputDeviceDescription", type = "java.lang.String", required = true) String device,
185             @ActionInput(name = "message", label = "@text/sendPushsaferMessageActionInputMessageLabel", description = "@text/sendPushsaferMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
186             @ActionInput(name = "title", label = "@text/sendPushsaferMessageActionInputTitleLabel", description = "@text/sendPushsaferMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
187         logger.trace(
188                 "ThingAction 'sendPushsaferMessageToDevice' called with value(s): device='{}', message='{}', title='{}'",
189                 device, message, title);
190         if (device == null) {
191             throw new IllegalArgumentException("Skip sending message as 'device' is null.");
192         }
193
194         return send(getDefaultPushsaferMessageBuilder(message).withDevice(device), title);
195     }
196
197     public static Boolean sendPushsaferMessageToDevice(ThingActions actions, String device, String message,
198             @Nullable String title) {
199         return ((PushsaferActions) actions).sendPushsaferMessageToDevice(device, message, title);
200     }
201
202     private PushsaferMessageBuilder getDefaultPushsaferMessageBuilder(String message) {
203         if (accountHandler == null) {
204             throw new RuntimeException("PushsaferAccountHandler is null!");
205         }
206
207         if (message == null) {
208             throw new IllegalArgumentException("Skip sending message as 'message' is null.");
209         }
210
211         try {
212             return accountHandler.getDefaultPushsaferMessageBuilder(message);
213         } catch (PushsaferConfigurationException e) {
214             throw new IllegalArgumentException(e.getCause());
215         }
216     }
217
218     private Boolean send(PushsaferMessageBuilder builder, @Nullable String title) {
219         if (title != null) {
220             builder.withTitle(title);
221         }
222         return accountHandler.sendPushsaferMessage(builder);
223     }
224
225     @Override
226     public void setThingHandler(@Nullable ThingHandler handler) {
227         this.accountHandler = (PushsaferAccountHandler) handler;
228     }
229
230     @Override
231     public @Nullable ThingHandler getThingHandler() {
232         return accountHandler;
233     }
234 }