2 * Copyright (c) 2010-2023 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.pushsafer.internal.actions;
15 import static org.openhab.binding.pushsafer.internal.PushsaferBindingConstants.DEFAULT_TITLE;
16 import static org.openhab.binding.pushsafer.internal.connection.PushsaferMessageBuilder.*;
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;
33 * Some automation actions to be used with a {@link PushsaferAccountHandler}.
35 * @author Kevin Siml - Initial contribution, forked from Christoph Weitkamp
37 @ThingActionsScope(name = "pushsafer")
39 public class PushsaferActions implements ThingActions {
41 private static final String DEFAULT_EMERGENCY_PRIORITY = "2";
43 private final Logger logger = LoggerFactory.getLogger(PushsaferActions.class);
45 private @NonNullByDefault({}) PushsaferAccountHandler accountHandler;
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,
53 return send(getDefaultPushsaferMessageBuilder(message), title);
56 public static Boolean sendPushsaferMessage(ThingActions actions, String message, @Nullable String title) {
57 return ((PushsaferActions) actions).sendPushsaferMessage(message, title);
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) {
67 "ThingAction 'sendPushsaferURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}'",
68 message, url, title, urlTitle);
70 throw new IllegalArgumentException("Skip sending message as 'url' is null.");
73 PushsaferMessageBuilder builder = getDefaultPushsaferMessageBuilder(message).withUrl(url);
74 if (urlTitle != null) {
75 builder.withUrl(urlTitle);
77 return send(builder, title);
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);
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,
91 return send(getDefaultPushsaferMessageBuilder(message).withHtmlFormatting(), title);
94 public static Boolean sendPushsaferHtmlMessage(ThingActions actions, String message, @Nullable String title) {
95 return ((PushsaferActions) actions).sendPushsaferHtmlMessage(message, title);
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='{}'",
104 return send(getDefaultPushsaferMessageBuilder(message).withMonospaceFormatting(), title);
107 public static Boolean sendPushsaferMonospaceMessage(ThingActions actions, String message, @Nullable String title) {
108 return ((PushsaferActions) actions).sendPushsaferMonospaceMessage(message, title);
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) {
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.");
125 PushsaferMessageBuilder builder = getDefaultPushsaferMessageBuilder(message).withAttachment(attachment);
126 if (contentType != null) {
127 builder.withContentType(contentType);
129 if (authentication != null) {
130 builder.withAuthentication(authentication);
132 return send(builder, title);
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,
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) {
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());
153 builder.withTitle(title);
155 return accountHandler.sendPushsaferPriorityMessage(builder);
158 public static String sendPushsaferPriorityMessage(ThingActions actions, String message, @Nullable String title,
159 @Nullable Integer priority) {
160 return ((PushsaferActions) actions).sendPushsaferPriorityMessage(message, title, priority);
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!");
171 if (receipt == null) {
172 throw new IllegalArgumentException("Skip sending message as 'receipt' is null.");
175 return accountHandler.cancelPushsaferPriorityMessage(receipt);
178 public static Boolean cancelPushsaferPriorityMessage(ThingActions actions, String receipt) {
179 return ((PushsaferActions) actions).cancelPushsaferPriorityMessage(receipt);
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) {
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.");
194 return send(getDefaultPushsaferMessageBuilder(message).withDevice(device), title);
197 public static Boolean sendPushsaferMessageToDevice(ThingActions actions, String device, String message,
198 @Nullable String title) {
199 return ((PushsaferActions) actions).sendPushsaferMessageToDevice(device, message, title);
202 private PushsaferMessageBuilder getDefaultPushsaferMessageBuilder(String message) {
203 if (accountHandler == null) {
204 throw new RuntimeException("PushsaferAccountHandler is null!");
207 if (message == null) {
208 throw new IllegalArgumentException("Skip sending message as 'message' is null.");
212 return accountHandler.getDefaultPushsaferMessageBuilder(message);
213 } catch (PushsaferConfigurationException e) {
214 throw new IllegalArgumentException(e.getCause());
218 private Boolean send(PushsaferMessageBuilder builder, @Nullable String title) {
220 builder.withTitle(title);
222 return accountHandler.sendPushsaferMessage(builder);
226 public void setThingHandler(@Nullable ThingHandler handler) {
227 this.accountHandler = (PushsaferAccountHandler) handler;
231 public @Nullable ThingHandler getThingHandler() {
232 return accountHandler;