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.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
34 * Some automation actions to be used with a {@link PushoverAccountHandler}.
36 * @author Christoph Weitkamp - Initial contribution
37 * @author Jacob Laursen - Added support for Expiring Messages
39 @ThingActionsScope(name = "pushover")
41 public class PushoverActions implements ThingActions {
43 private static final String DEFAULT_EMERGENCY_PRIORITY = "2";
45 private final Logger logger = LoggerFactory.getLogger(PushoverActions.class);
47 private @NonNullByDefault({}) PushoverAccountHandler accountHandler;
49 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
50 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
51 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
52 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
53 @ActionInput(name = "sound", label = "@text/sendMessageActionInputSoundLabel", description = "@text/sendMessageActionInputSoundDescription", type = "java.lang.String", defaultValue = DEFAULT_SOUND) @Nullable String sound,
54 @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String") @Nullable String url,
55 @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle,
56 @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String") @Nullable String attachment,
57 @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType,
58 @ActionInput(name = "priority", label = "@text/sendMessageActionInputPriorityLabel", description = "@text/sendMessageActionInputPriorityDescription", type = "java.lang.Integer", defaultValue = DEFAULT_EMERGENCY_PRIORITY) @Nullable Integer priority,
59 @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String") @Nullable String device,
60 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
62 "ThingAction 'sendMessage' called with value(s): message='{}', title='{}', sound='{}', url='{}', urlTitle='{}', attachment='{}', contentType='{}', priority='{}', device='{}'",
63 message, title, sound, url, urlTitle, attachment, contentType, priority, device);
65 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message);
66 // add sound, if defined
67 if (sound != null && !DEFAULT_SOUND.equals(sound)) {
68 builder.withSound(sound);
72 if (urlTitle != null) {
73 builder.withUrlTitle(urlTitle);
76 if (attachment != null) {
77 builder.withAttachment(attachment);
78 if (contentType != null) {
79 builder.withContentType(contentType);
82 if (priority != null) {
83 builder.withPriority(priority.intValue());
86 builder.withDevice(device);
91 return send(builder, title);
94 public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title,
95 @Nullable String sound, @Nullable String url, @Nullable String urlTitle, @Nullable String attachment,
96 @Nullable String contentType, @Nullable Integer priority, @Nullable String device, @Nullable Duration ttl) {
97 return ((PushoverActions) actions).sendMessage(message, title, sound, url, urlTitle, attachment, contentType,
98 priority, device, ttl);
101 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
102 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
103 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message) {
104 logger.trace("ThingAction 'sendMessage' called with value(s): message='{}'", message);
105 return send(getDefaultPushoverMessageBuilder(message), null);
108 public static Boolean sendMessage(ThingActions actions, String message) {
109 return ((PushoverActions) actions).sendMessage(message);
112 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
113 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
114 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
115 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
116 logger.trace("ThingAction 'sendMessage' called with value(s): message='{}', title='{}'", message, title);
117 return send(getDefaultPushoverMessageBuilder(message), title);
120 public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title) {
121 return ((PushoverActions) actions).sendMessage(message, title);
124 @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
125 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
126 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
127 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
128 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
129 logger.trace("ThingAction 'sendMessage' called with value(s): message='{}', title='{}', ttl='{}'", message,
131 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message);
133 builder.withTTL(ttl);
135 return send(builder, title);
138 public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title,
139 @Nullable Duration ttl) {
140 return ((PushoverActions) actions).sendMessage(message, title, ttl);
143 @RuleAction(label = "@text/sendURLMessageActionLabel", description = "@text/sendURLMessageActionDescription")
144 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendURLMessage(
145 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
146 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
147 @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String", required = true) @Nullable String url,
148 @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle) {
150 "ThingAction 'sendURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}'",
151 message, url, title, urlTitle);
153 throw new IllegalArgumentException("Skip sending message as 'url' is null.");
156 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withUrl(url);
157 if (urlTitle != null) {
158 builder.withUrl(urlTitle);
160 return send(builder, title);
163 public static Boolean sendURLMessage(ThingActions actions, String message, @Nullable String title, String url,
164 @Nullable String urlTitle) {
165 return ((PushoverActions) actions).sendURLMessage(message, title, url, urlTitle);
168 @RuleAction(label = "@text/sendURLMessageActionLabel", description = "@text/sendURLMessageActionDescription")
169 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendURLMessage(
170 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
171 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
172 @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String", required = true) @Nullable String url,
173 @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle,
174 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
176 "ThingAction 'sendURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}', ttl='{}'",
177 message, url, title, urlTitle, ttl);
179 throw new IllegalArgumentException("Skip sending message as 'url' is null.");
182 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withUrl(url);
183 if (urlTitle != null) {
184 builder.withUrl(urlTitle);
187 builder.withTTL(ttl);
189 return send(builder, title);
192 public static Boolean sendURLMessage(ThingActions actions, String message, @Nullable String title, String url,
193 @Nullable String urlTitle, @Nullable Duration ttl) {
194 return ((PushoverActions) actions).sendURLMessage(message, title, url, urlTitle, ttl);
197 @RuleAction(label = "@text/sendHTMLMessageActionLabel", description = "@text/sendHTMLMessageActionDescription")
198 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendHtmlMessage(
199 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
200 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
201 logger.trace("ThingAction 'sendHtmlMessage' called with value(s): message='{}', title='{}'", message, title);
202 return send(getDefaultPushoverMessageBuilder(message).withHtmlFormatting(), title);
205 public static Boolean sendHtmlMessage(ThingActions actions, String message, @Nullable String title) {
206 return ((PushoverActions) actions).sendHtmlMessage(message, title);
209 @RuleAction(label = "@text/sendHTMLMessageActionLabel", description = "@text/sendHTMLMessageActionDescription")
210 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendHtmlMessage(
211 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
212 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
213 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
214 logger.trace("ThingAction 'sendHtmlMessage' called with value(s): message='{}', title='{}', ttl='{}'", message,
216 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withHtmlFormatting();
218 builder.withTTL(ttl);
220 return send(builder, title);
223 public static Boolean sendHtmlMessage(ThingActions actions, String message, @Nullable String title,
224 @Nullable Duration ttl) {
225 return ((PushoverActions) actions).sendHtmlMessage(message, title, ttl);
228 @RuleAction(label = "@text/sendMonospaceMessageActionLabel", description = "@text/sendMonospaceMessageActionDescription")
229 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMonospaceMessage(
230 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
231 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
232 logger.trace("ThingAction 'sendMonospaceMessage' called with value(s): message='{}', title='{}'", message,
234 return send(getDefaultPushoverMessageBuilder(message).withMonospaceFormatting(), title);
237 public static Boolean sendMonospaceMessage(ThingActions actions, String message, @Nullable String title) {
238 return ((PushoverActions) actions).sendMonospaceMessage(message, title);
241 @RuleAction(label = "@text/sendMonospaceMessageActionLabel", description = "@text/sendMonospaceMessageActionDescription")
242 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMonospaceMessage(
243 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
244 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
245 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
246 logger.trace("ThingAction 'sendMonospaceMessage' called with value(s): message='{}', title='{}', ttl='{}'",
247 message, title, ttl);
248 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withMonospaceFormatting();
250 builder.withTTL(ttl);
252 return send(builder, title);
255 public static Boolean sendMonospaceMessage(ThingActions actions, String message, @Nullable String title,
256 @Nullable Duration ttl) {
257 return ((PushoverActions) actions).sendMonospaceMessage(message, title, ttl);
260 @RuleAction(label = "@text/sendAttachmentMessageActionLabel", description = "@text/sendAttachmentMessageActionDescription")
261 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendAttachmentMessage(
262 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
263 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
264 @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String", required = true) @Nullable String attachment,
265 @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType) {
267 "ThingAction 'sendAttachmentMessage' called with value(s): message='{}', title='{}', attachment='{}', contentType='{}'",
268 message, title, attachment, contentType);
269 if (attachment == null) {
270 throw new IllegalArgumentException("Skip sending message as 'attachment' is null.");
273 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withAttachment(attachment);
274 if (contentType != null) {
275 builder.withContentType(contentType);
277 return send(builder, title);
280 public static Boolean sendAttachmentMessage(ThingActions actions, String message, @Nullable String title,
281 String attachment, @Nullable String contentType) {
282 return ((PushoverActions) actions).sendAttachmentMessage(message, title, attachment, contentType);
285 @RuleAction(label = "@text/sendAttachmentMessageActionLabel", description = "@text/sendAttachmentMessageActionDescription")
286 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendAttachmentMessage(
287 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
288 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
289 @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String", required = true) @Nullable String attachment,
290 @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType,
291 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
293 "ThingAction 'sendAttachmentMessage' called with value(s): message='{}', title='{}', attachment='{}', contentType='{}', ttl='{}'",
294 message, title, attachment, contentType, ttl);
295 if (attachment == null) {
296 throw new IllegalArgumentException("Skip sending message as 'attachment' is null.");
299 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withAttachment(attachment);
300 if (contentType != null) {
301 builder.withContentType(contentType);
304 builder.withTTL(ttl);
306 return send(builder, title);
309 public static Boolean sendAttachmentMessage(ThingActions actions, String message, @Nullable String title,
310 String attachment, @Nullable String contentType, @Nullable Duration ttl) {
311 return ((PushoverActions) actions).sendAttachmentMessage(message, title, attachment, contentType, ttl);
314 @RuleAction(label = "@text/sendPriorityMessageActionLabel", description = "@text/sendPriorityMessageActionDescription")
315 public @ActionOutput(name = "receipt", label = "@text/sendPriorityMessageActionOutputLabel", description = "@text/sendPriorityMessageActionOutputDescription", type = "java.lang.String") String sendPriorityMessage(
316 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
317 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
318 @ActionInput(name = "priority", label = "@text/sendMessageActionInputPriorityLabel", description = "@text/sendMessageActionInputPriorityDescription", type = "java.lang.Integer", defaultValue = DEFAULT_EMERGENCY_PRIORITY) @Nullable Integer priority) {
319 logger.trace("ThingAction 'sendPriorityMessage' called with value(s): message='{}', title='{}', priority='{}'",
320 message, title, priority);
321 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message)
322 .withPriority(priority == null ? EMERGENCY_PRIORITY : priority.intValue());
325 builder.withTitle(title);
327 return accountHandler.sendPriorityMessage(builder);
330 public static String sendPriorityMessage(ThingActions actions, String message, @Nullable String title,
331 @Nullable Integer priority) {
332 return ((PushoverActions) actions).sendPriorityMessage(message, title, priority);
335 @RuleAction(label = "@text/cancelPriorityMessageActionLabel", description = "@text/cancelPriorityMessageActionDescription")
336 public @ActionOutput(name = "canceled", label = "@text/cancelPriorityMessageActionOutputLabel", description = "@text/cancelPriorityMessageActionOutputDescription", type = "java.lang.Boolean") Boolean cancelPriorityMessage(
337 @ActionInput(name = "receipt", label = "@text/cancelPriorityMessageActionInputReceiptLabel", description = "@text/cancelPriorityMessageActionInputReceiptDescription", type = "java.lang.String", required = true) @Nullable String receipt) {
338 logger.trace("ThingAction 'cancelPriorityMessage' called with value(s): '{}'", receipt);
339 if (accountHandler == null) {
340 throw new IllegalStateException("PushoverAccountHandler is null!");
343 if (receipt == null) {
344 throw new IllegalArgumentException("Skip canceling message as 'receipt' is null.");
347 return accountHandler.cancelPriorityMessage(receipt);
350 public static Boolean cancelPriorityMessage(ThingActions actions, String receipt) {
351 return ((PushoverActions) actions).cancelPriorityMessage(receipt);
354 @RuleAction(label = "@text/sendMessageToDeviceActionLabel", description = "@text/sendMessageToDeviceActionDescription")
355 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessageToDevice(
356 @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String", required = true) @Nullable String device,
357 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
358 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
359 logger.trace("ThingAction 'sendMessageToDevice' called with value(s): device='{}', message='{}', title='{}'",
360 device, message, title);
361 if (device == null) {
362 throw new IllegalArgumentException("Skip sending message as 'device' is null.");
365 return send(getDefaultPushoverMessageBuilder(message).withDevice(device), title);
368 public static Boolean sendMessageToDevice(ThingActions actions, String device, String message,
369 @Nullable String title) {
370 return ((PushoverActions) actions).sendMessageToDevice(device, message, title);
373 @RuleAction(label = "@text/sendMessageToDeviceActionLabel", description = "@text/sendMessageToDeviceActionDescription")
374 public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessageToDevice(
375 @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String", required = true) @Nullable String device,
376 @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
377 @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
378 @ActionInput(name = "ttl", label = "@text/sendMessageActionInputTTLLabel", description = "@text/sendMessageActionInputTTLDescription", type = "java.time.Duration") @Nullable Duration ttl) {
380 "ThingAction 'sendMessageToDevice' called with value(s): device='{}', message='{}', title='{}', ttl='{}'",
381 device, message, title, ttl);
382 if (device == null) {
383 throw new IllegalArgumentException("Skip sending message as 'device' is null.");
385 PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withDevice(device);
387 builder.withTTL(ttl);
390 return send(builder, title);
393 public static Boolean sendMessageToDevice(ThingActions actions, String device, String message,
394 @Nullable String title, @Nullable Duration ttl) {
395 return ((PushoverActions) actions).sendMessageToDevice(device, message, title, ttl);
398 private PushoverMessageBuilder getDefaultPushoverMessageBuilder(@Nullable String message) {
399 if (accountHandler == null) {
400 throw new IllegalStateException("PushoverAccountHandler is null!");
403 if (message == null) {
404 throw new IllegalArgumentException("Skip sending message as 'message' is null.");
407 return accountHandler.getDefaultPushoverMessageBuilder(message);
410 private Boolean send(PushoverMessageBuilder builder, @Nullable String title) {
412 builder.withTitle(title);
414 return accountHandler.sendMessage(builder);
418 public void setThingHandler(@Nullable ThingHandler handler) {
419 this.accountHandler = (PushoverAccountHandler) handler;
423 public @Nullable ThingHandler getThingHandler() {
424 return accountHandler;