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.pushover.internal.actions;
15 import static org.openhab.binding.pushover.internal.PushoverBindingConstants.*;
16 import static org.openhab.binding.pushover.internal.connection.PushoverMessageBuilder.*;
18 import java.time.Duration;
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.eclipse.jdt.annotation.Nullable;
22 import org.openhab.binding.pushover.internal.connection.PushoverMessageBuilder;
23 import org.openhab.binding.pushover.internal.handler.PushoverAccountHandler;
24 import org.openhab.core.automation.annotation.ActionInput;
25 import org.openhab.core.automation.annotation.ActionOutput;
26 import org.openhab.core.automation.annotation.RuleAction;
27 import org.openhab.core.thing.binding.ThingActions;
28 import org.openhab.core.thing.binding.ThingActionsScope;
29 import org.openhab.core.thing.binding.ThingHandler;
30 import org.osgi.service.component.annotations.Component;
31 import org.osgi.service.component.annotations.ServiceScope;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
36 * Some automation actions to be used with a {@link PushoverAccountHandler}.
38 * @author Christoph Weitkamp - Initial contribution
39 * @author Jacob Laursen - Added support for Expiring Messages
41 @Component(scope = ServiceScope.PROTOTYPE, service = PushoverActions.class)
42 @ThingActionsScope(name = "pushover")
44 public class PushoverActions implements ThingActions {
46 private static final String DEFAULT_EMERGENCY_PRIORITY = "2";
48 private final Logger logger = LoggerFactory.getLogger(PushoverActions.class);
50 private @NonNullByDefault({}) PushoverAccountHandler accountHandler;
52 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
53 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
54 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
55 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
56 @ActionInput(name = "sound", label = "@text/sendMessageActionInputSoundLabel", description = "@text/sendMessageActionInputSoundDescription", type = "java.lang.String", defaultValue = DEFAULT_SOUND) @Nullable String sound,
57 @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String") @Nullable String url,
58 @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle,
59 @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String") @Nullable String attachment,
60 @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType,
61 @ActionInput(name = "priority", label = "@text/sendMessageActionInputPriorityLabel", description = "@text/sendMessageActionInputPriorityDescription", type = "java.lang.Integer", defaultValue = DEFAULT_EMERGENCY_PRIORITY) @Nullable Integer priority,
62 @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String") @Nullable String device,
63 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
65 "ThingAction 'sendMessage' called with value(s): message='{}', title='{}', sound='{}', url='{}', urlTitle='{}', attachment='{}', contentType='{}', priority='{}', device='{}'",
66 message, title, sound, url, urlTitle, attachment, contentType, priority, device);
68 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message);
69 // add sound, if defined
70 if (sound != null && !DEFAULT_SOUND.equals(sound)) {
71 builder.withSound(sound);
75 if (urlTitle != null) {
76 builder.withUrlTitle(urlTitle);
79 if (attachment != null) {
80 builder.withAttachment(attachment);
81 if (contentType != null) {
82 builder.withContentType(contentType);
85 if (priority != null) {
86 builder.withPriority(priority.intValue());
89 builder.withDevice(device);
94 return send(builder, title);
97 public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title,
98 @Nullable String sound, @Nullable String url, @Nullable String urlTitle, @Nullable String attachment,
99 @Nullable String contentType, @Nullable Integer priority, @Nullable String device, @Nullable Duration ttl) {
100 return ((PushoverActions) actions).sendMessage(message, title, sound, url, urlTitle, attachment, contentType,
101 priority, device, ttl);
104 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
105 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
106 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message) {
107 logger.trace("ThingAction 'sendMessage' called with value(s): message='{}'", message);
108 return send(getDefaultPushoverMessageBuilder(message), null);
111 public static Boolean sendMessage(ThingActions actions, String message) {
112 return ((PushoverActions) actions).sendMessage(message);
115 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
116 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
117 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
118 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
119 logger.trace("ThingAction 'sendMessage' called with value(s): message='{}', title='{}'", message, title);
120 return send(getDefaultPushoverMessageBuilder(message), title);
123 public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title) {
124 return ((PushoverActions) actions).sendMessage(message, title);
127 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
128 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
129 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
130 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
131 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
132 logger.trace("ThingAction 'sendMessage' called with value(s): message='{}', title='{}', ttl='{}'", message,
134 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message);
136 builder.withTTL(ttl);
138 return send(builder, title);
141 public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title,
142 @Nullable Duration ttl) {
143 return ((PushoverActions) actions).sendMessage(message, title, ttl);
146 @RuleAction(label = "@text/sendURLMessageActionLabel", description = "@text/sendURLMessageActionDescription")
147 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendURLMessage(
148 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
149 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
150 @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String", required = true) @Nullable String url,
151 @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle) {
153 "ThingAction 'sendURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}'",
154 message, url, title, urlTitle);
156 throw new IllegalArgumentException("Skip sending message as 'url' is null.");
159 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withUrl(url);
160 if (urlTitle != null) {
161 builder.withUrl(urlTitle);
163 return send(builder, title);
166 public static Boolean sendURLMessage(ThingActions actions, String message, @Nullable String title, String url,
167 @Nullable String urlTitle) {
168 return ((PushoverActions) actions).sendURLMessage(message, title, url, urlTitle);
171 @RuleAction(label = "@text/sendURLMessageActionLabel", description = "@text/sendURLMessageActionDescription")
172 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendURLMessage(
173 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
174 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
175 @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String", required = true) @Nullable String url,
176 @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle,
177 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
179 "ThingAction 'sendURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}', ttl='{}'",
180 message, url, title, urlTitle, ttl);
182 throw new IllegalArgumentException("Skip sending message as 'url' is null.");
185 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withUrl(url);
186 if (urlTitle != null) {
187 builder.withUrl(urlTitle);
190 builder.withTTL(ttl);
192 return send(builder, title);
195 public static Boolean sendURLMessage(ThingActions actions, String message, @Nullable String title, String url,
196 @Nullable String urlTitle, @Nullable Duration ttl) {
197 return ((PushoverActions) actions).sendURLMessage(message, title, url, urlTitle, ttl);
200 @RuleAction(label = "@text/sendHTMLMessageActionLabel", description = "@text/sendHTMLMessageActionDescription")
201 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendHtmlMessage(
202 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
203 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
204 logger.trace("ThingAction 'sendHtmlMessage' called with value(s): message='{}', title='{}'", message, title);
205 return send(getDefaultPushoverMessageBuilder(message).withHtmlFormatting(), title);
208 public static Boolean sendHtmlMessage(ThingActions actions, String message, @Nullable String title) {
209 return ((PushoverActions) actions).sendHtmlMessage(message, title);
212 @RuleAction(label = "@text/sendHTMLMessageActionLabel", description = "@text/sendHTMLMessageActionDescription")
213 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendHtmlMessage(
214 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
215 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
216 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
217 logger.trace("ThingAction 'sendHtmlMessage' called with value(s): message='{}', title='{}', ttl='{}'", message,
219 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withHtmlFormatting();
221 builder.withTTL(ttl);
223 return send(builder, title);
226 public static Boolean sendHtmlMessage(ThingActions actions, String message, @Nullable String title,
227 @Nullable Duration ttl) {
228 return ((PushoverActions) actions).sendHtmlMessage(message, title, ttl);
231 @RuleAction(label = "@text/sendMonospaceMessageActionLabel", description = "@text/sendMonospaceMessageActionDescription")
232 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMonospaceMessage(
233 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
234 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
235 logger.trace("ThingAction 'sendMonospaceMessage' called with value(s): message='{}', title='{}'", message,
237 return send(getDefaultPushoverMessageBuilder(message).withMonospaceFormatting(), title);
240 public static Boolean sendMonospaceMessage(ThingActions actions, String message, @Nullable String title) {
241 return ((PushoverActions) actions).sendMonospaceMessage(message, title);
244 @RuleAction(label = "@text/sendMonospaceMessageActionLabel", description = "@text/sendMonospaceMessageActionDescription")
245 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMonospaceMessage(
246 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
247 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
248 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
249 logger.trace("ThingAction 'sendMonospaceMessage' called with value(s): message='{}', title='{}', ttl='{}'",
250 message, title, ttl);
251 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withMonospaceFormatting();
253 builder.withTTL(ttl);
255 return send(builder, title);
258 public static Boolean sendMonospaceMessage(ThingActions actions, String message, @Nullable String title,
259 @Nullable Duration ttl) {
260 return ((PushoverActions) actions).sendMonospaceMessage(message, title, ttl);
263 @RuleAction(label = "@text/sendAttachmentMessageActionLabel", description = "@text/sendAttachmentMessageActionDescription")
264 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendAttachmentMessage(
265 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
266 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
267 @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String", required = true) @Nullable String attachment,
268 @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType) {
270 "ThingAction 'sendAttachmentMessage' called with value(s): message='{}', title='{}', attachment='{}', contentType='{}'",
271 message, title, attachment, contentType);
272 if (attachment == null) {
273 throw new IllegalArgumentException("Skip sending message as 'attachment' is null.");
276 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withAttachment(attachment);
277 if (contentType != null) {
278 builder.withContentType(contentType);
280 return send(builder, title);
283 public static Boolean sendAttachmentMessage(ThingActions actions, String message, @Nullable String title,
284 String attachment, @Nullable String contentType) {
285 return ((PushoverActions) actions).sendAttachmentMessage(message, title, attachment, contentType);
288 @RuleAction(label = "@text/sendAttachmentMessageActionLabel", description = "@text/sendAttachmentMessageActionDescription")
289 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendAttachmentMessage(
290 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
291 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
292 @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String", required = true) @Nullable String attachment,
293 @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType,
294 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
296 "ThingAction 'sendAttachmentMessage' called with value(s): message='{}', title='{}', attachment='{}', contentType='{}', ttl='{}'",
297 message, title, attachment, contentType, ttl);
298 if (attachment == null) {
299 throw new IllegalArgumentException("Skip sending message as 'attachment' is null.");
302 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withAttachment(attachment);
303 if (contentType != null) {
304 builder.withContentType(contentType);
307 builder.withTTL(ttl);
309 return send(builder, title);
312 public static Boolean sendAttachmentMessage(ThingActions actions, String message, @Nullable String title,
313 String attachment, @Nullable String contentType, @Nullable Duration ttl) {
314 return ((PushoverActions) actions).sendAttachmentMessage(message, title, attachment, contentType, ttl);
317 @RuleAction(label = "@text/sendPriorityMessageActionLabel", description = "@text/sendPriorityMessageActionDescription")
318 public @ActionOutput(name = "receipt", label = "@text/sendPriorityMessageActionOutputLabel", description = "@text/sendPriorityMessageActionOutputDescription", type = "java.lang.String") String sendPriorityMessage(
319 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
320 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
321 @ActionInput(name = "priority", label = "@text/sendMessageActionInputPriorityLabel", description = "@text/sendMessageActionInputPriorityDescription", type = "java.lang.Integer", defaultValue = DEFAULT_EMERGENCY_PRIORITY) @Nullable Integer priority) {
322 logger.trace("ThingAction 'sendPriorityMessage' called with value(s): message='{}', title='{}', priority='{}'",
323 message, title, priority);
324 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message)
325 .withPriority(priority == null ? EMERGENCY_PRIORITY : priority.intValue());
328 builder.withTitle(title);
330 return accountHandler.sendPriorityMessage(builder);
333 public static String sendPriorityMessage(ThingActions actions, String message, @Nullable String title,
334 @Nullable Integer priority) {
335 return ((PushoverActions) actions).sendPriorityMessage(message, title, priority);
338 @RuleAction(label = "@text/cancelPriorityMessageActionLabel", description = "@text/cancelPriorityMessageActionDescription")
339 public @ActionOutput(name = "canceled", label = "@text/cancelPriorityMessageActionOutputLabel", description = "@text/cancelPriorityMessageActionOutputDescription", type = "java.lang.Boolean") Boolean cancelPriorityMessage(
340 @ActionInput(name = "receipt", label = "@text/cancelPriorityMessageActionInputReceiptLabel", description = "@text/cancelPriorityMessageActionInputReceiptDescription", type = "java.lang.String", required = true) @Nullable String receipt) {
341 logger.trace("ThingAction 'cancelPriorityMessage' called with value(s): '{}'", receipt);
342 if (accountHandler == null) {
343 throw new IllegalStateException("PushoverAccountHandler is null!");
346 if (receipt == null) {
347 throw new IllegalArgumentException("Skip canceling message as 'receipt' is null.");
350 return accountHandler.cancelPriorityMessage(receipt);
353 public static Boolean cancelPriorityMessage(ThingActions actions, String receipt) {
354 return ((PushoverActions) actions).cancelPriorityMessage(receipt);
357 @RuleAction(label = "@text/sendMessageToDeviceActionLabel", description = "@text/sendMessageToDeviceActionDescription")
358 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessageToDevice(
359 @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String", required = true) @Nullable String device,
360 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
361 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
362 logger.trace("ThingAction 'sendMessageToDevice' called with value(s): device='{}', message='{}', title='{}'",
363 device, message, title);
364 if (device == null) {
365 throw new IllegalArgumentException("Skip sending message as 'device' is null.");
368 return send(getDefaultPushoverMessageBuilder(message).withDevice(device), title);
371 public static Boolean sendMessageToDevice(ThingActions actions, String device, String message,
372 @Nullable String title) {
373 return ((PushoverActions) actions).sendMessageToDevice(device, message, title);
376 @RuleAction(label = "@text/sendMessageToDeviceActionLabel", description = "@text/sendMessageToDeviceActionDescription")
377 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessageToDevice(
378 @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String", required = true) @Nullable String device,
379 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
380 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
381 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
383 "ThingAction 'sendMessageToDevice' called with value(s): device='{}', message='{}', title='{}', ttl='{}'",
384 device, message, title, ttl);
385 if (device == null) {
386 throw new IllegalArgumentException("Skip sending message as 'device' is null.");
388 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withDevice(device);
390 builder.withTTL(ttl);
393 return send(builder, title);
396 public static Boolean sendMessageToDevice(ThingActions actions, String device, String message,
397 @Nullable String title, @Nullable Duration ttl) {
398 return ((PushoverActions) actions).sendMessageToDevice(device, message, title, ttl);
401 private PushoverMessageBuilder getDefaultPushoverMessageBuilder(@Nullable String message) {
402 if (accountHandler == null) {
403 throw new IllegalStateException("PushoverAccountHandler is null!");
406 if (message == null) {
407 throw new IllegalArgumentException("Skip sending message as 'message' is null.");
410 return accountHandler.getDefaultPushoverMessageBuilder(message);
413 private Boolean send(PushoverMessageBuilder builder, @Nullable String title) {
415 builder.withTitle(title);
417 return accountHandler.sendMessage(builder);
421 public void setThingHandler(@Nullable ThingHandler handler) {
422 this.accountHandler = (PushoverAccountHandler) handler;
426 public @Nullable ThingHandler getThingHandler() {
427 return accountHandler;