]> git.basschouten.com Git - openhab-addons.git/blob
85113164932839ec10d116f8e38c0a915b02d041
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.pushover.internal.actions;
14
15 import static org.openhab.binding.pushover.internal.PushoverBindingConstants.DEFAULT_TITLE;
16 import static org.openhab.binding.pushover.internal.connection.PushoverMessageBuilder.*;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.binding.pushover.internal.connection.PushoverMessageBuilder;
21 import org.openhab.binding.pushover.internal.handler.PushoverAccountHandler;
22 import org.openhab.core.automation.annotation.ActionInput;
23 import org.openhab.core.automation.annotation.ActionOutput;
24 import org.openhab.core.automation.annotation.RuleAction;
25 import org.openhab.core.thing.binding.ThingActions;
26 import org.openhab.core.thing.binding.ThingActionsScope;
27 import org.openhab.core.thing.binding.ThingHandler;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 /**
32  * Some automation actions to be used with a {@link PushoverAccountHandler}.
33  *
34  * @author Christoph Weitkamp - Initial contribution
35  */
36 @ThingActionsScope(name = "pushover")
37 @NonNullByDefault
38 public class PushoverActions implements ThingActions {
39
40     private static final String DEFAULT_EMERGENCY_PRIORITY = "2";
41
42     private final Logger logger = LoggerFactory.getLogger(PushoverActions.class);
43
44     private @NonNullByDefault({}) PushoverAccountHandler accountHandler;
45
46     @RuleAction(label = "@text/sendMessageActionLabel", description = "@text/sendMessageActionDescription")
47     public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessage(
48             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
49             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
50         logger.trace("ThingAction 'sendMessage' called with value(s): message='{}', title='{}'", message, title);
51         return send(getDefaultPushoverMessageBuilder(message), title);
52     }
53
54     public static Boolean sendMessage(ThingActions actions, String message, @Nullable String title) {
55         return ((PushoverActions) actions).sendMessage(message, title);
56     }
57
58     @RuleAction(label = "@text/sendURLMessageActionLabel", description = "@text/sendURLMessageActionDescription")
59     public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendURLMessage(
60             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
61             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
62             @ActionInput(name = "url", label = "@text/sendMessageActionInputURLLabel", description = "@text/sendMessageActionInputURLDescription", type = "java.lang.String", required = true) String url,
63             @ActionInput(name = "urlTitle", label = "@text/sendMessageActionInputURLTitleLabel", description = "@text/sendMessageActionInputURLTitleDescription", type = "java.lang.String") @Nullable String urlTitle) {
64         logger.trace(
65                 "ThingAction 'sendURLMessage' called with value(s): message='{}', url='{}', title='{}', urlTitle='{}'",
66                 message, url, title, urlTitle);
67         if (url == null) {
68             throw new IllegalArgumentException("Skip sending message as 'url' is null.");
69         }
70
71         PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withUrl(url);
72         if (urlTitle != null) {
73             builder.withUrl(urlTitle);
74         }
75         return send(builder, title);
76     }
77
78     public static Boolean sendURLMessage(ThingActions actions, String message, @Nullable String title, String url,
79             @Nullable String urlTitle) {
80         return ((PushoverActions) actions).sendURLMessage(message, title, url, urlTitle);
81     }
82
83     @RuleAction(label = "@text/sendHTMLMessageActionLabel", description = "@text/sendHTMLMessageActionDescription")
84     public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendHtmlMessage(
85             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
86             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
87         logger.trace("ThingAction 'sendHtmlMessage' called with value(s): message='{}', title='{}'", message, title);
88         return send(getDefaultPushoverMessageBuilder(message).withHtmlFormatting(), title);
89     }
90
91     public static Boolean sendHtmlMessage(ThingActions actions, String message, @Nullable String title) {
92         return ((PushoverActions) actions).sendHtmlMessage(message, title);
93     }
94
95     @RuleAction(label = "@text/sendMonospaceMessageActionLabel", description = "@text/sendMonospaceMessageActionDescription")
96     public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMonospaceMessage(
97             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
98             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
99         logger.trace("ThingAction 'sendMonospaceMessage' called with value(s): message='{}', title='{}'", message,
100                 title);
101         return send(getDefaultPushoverMessageBuilder(message).withMonospaceFormatting(), title);
102     }
103
104     public static Boolean sendMonospaceMessage(ThingActions actions, String message, @Nullable String title) {
105         return ((PushoverActions) actions).sendMonospaceMessage(message, title);
106     }
107
108     @RuleAction(label = "@text/sendAttachmentMessageActionLabel", description = "@text/sendAttachmentMessageActionDescription")
109     public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendAttachmentMessage(
110             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
111             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
112             @ActionInput(name = "attachment", label = "@text/sendMessageActionInputAttachmentLabel", description = "@text/sendMessageActionInputAttachmentDescription", type = "java.lang.String", required = true) String attachment,
113             @ActionInput(name = "contentType", label = "@text/sendMessageActionInputContentTypeLabel", description = "@text/sendMessageActionInputContentTypeDescription", type = "java.lang.String", defaultValue = DEFAULT_CONTENT_TYPE) @Nullable String contentType) {
114         logger.trace(
115                 "ThingAction 'sendAttachmentMessage' called with value(s): message='{}', title='{}', attachment='{}', contentType='{}'",
116                 message, title, attachment, contentType);
117         if (attachment == null) {
118             throw new IllegalArgumentException("Skip sending message as 'attachment' is null.");
119         }
120
121         PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message).withAttachment(attachment);
122         if (contentType != null) {
123             builder.withContentType(contentType);
124         }
125         return send(builder, title);
126     }
127
128     public static Boolean sendAttachmentMessage(ThingActions actions, String message, @Nullable String title,
129             String attachment, @Nullable String contentType) {
130         return ((PushoverActions) actions).sendAttachmentMessage(message, title, attachment, contentType);
131     }
132
133     @RuleAction(label = "@text/sendPriorityMessageActionLabel", description = "@text/sendPriorityMessageActionDescription")
134     public @ActionOutput(name = "receipt", label = "@text/sendPriorityMessageActionOutputLabel", description = "@text/sendPriorityMessageActionOutputDescription", type = "java.lang.String") String sendPriorityMessage(
135             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
136             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title,
137             @ActionInput(name = "priority", label = "@text/sendMessageActionInputPriorityLabel", description = "@text/sendMessageActionInputPriorityDescription", type = "java.lang.Integer", defaultValue = DEFAULT_EMERGENCY_PRIORITY) @Nullable Integer priority) {
138         logger.trace("ThingAction 'sendPriorityMessage' called with value(s): message='{}', title='{}', priority='{}'",
139                 message, title, priority);
140         PushoverMessageBuilder builder = getDefaultPushoverMessageBuilder(message)
141                 .withPriority(priority == null ? EMERGENCY_PRIORITY : priority.intValue());
142
143         if (title != null) {
144             builder.withTitle(title);
145         }
146         return accountHandler.sendPriorityMessage(builder);
147     }
148
149     public static String sendPriorityMessage(ThingActions actions, String message, @Nullable String title,
150             @Nullable Integer priority) {
151         return ((PushoverActions) actions).sendPriorityMessage(message, title, priority);
152     }
153
154     @RuleAction(label = "@text/cancelPriorityMessageActionLabel", description = "@text/cancelPriorityMessageActionDescription")
155     public @ActionOutput(name = "canceled", label = "@text/cancelPriorityMessageActionOutputLabel", description = "@text/cancelPriorityMessageActionOutputDescription", type = "java.lang.Boolean") Boolean cancelPriorityMessage(
156             @ActionInput(name = "receipt", label = "@text/cancelPriorityMessageActionInputReceiptLabel", description = "@text/cancelPriorityMessageActionInputReceiptDescription", type = "java.lang.String", required = true) String receipt) {
157         logger.trace("ThingAction 'cancelPriorityMessage' called with value(s): '{}'", receipt);
158         if (accountHandler == null) {
159             throw new RuntimeException("PushoverAccountHandler is null!");
160         }
161
162         if (receipt == null) {
163             throw new IllegalArgumentException("Skip canceling message as 'receipt' is null.");
164         }
165
166         return accountHandler.cancelPriorityMessage(receipt);
167     }
168
169     public static Boolean cancelPriorityMessage(ThingActions actions, String receipt) {
170         return ((PushoverActions) actions).cancelPriorityMessage(receipt);
171     }
172
173     @RuleAction(label = "@text/sendMessageToDeviceActionLabel", description = "@text/sendMessageToDeviceActionDescription")
174     public @ActionOutput(name = "sent", label = "@text/sendMessageActionOutputLabel", description = "@text/sendMessageActionOutputDescription", type = "java.lang.Boolean") Boolean sendMessageToDevice(
175             @ActionInput(name = "device", label = "@text/sendMessageActionInputDeviceLabel", description = "@text/sendMessageActionInputDeviceDescription", type = "java.lang.String", required = true) String device,
176             @ActionInput(name = "message", label = "@text/sendMessageActionInputMessageLabel", description = "@text/sendMessageActionInputMessageDescription", type = "java.lang.String", required = true) String message,
177             @ActionInput(name = "title", label = "@text/sendMessageActionInputTitleLabel", description = "@text/sendMessageActionInputTitleDescription", type = "java.lang.String", defaultValue = DEFAULT_TITLE) @Nullable String title) {
178         logger.trace("ThingAction 'sendMessageToDevice' called with value(s): device='{}', message='{}', title='{}'",
179                 device, message, title);
180         if (device == null) {
181             throw new IllegalArgumentException("Skip sending message as 'device' is null.");
182         }
183
184         return send(getDefaultPushoverMessageBuilder(message).withDevice(device), title);
185     }
186
187     public static Boolean sendMessageToDevice(ThingActions actions, String device, String message,
188             @Nullable String title) {
189         return ((PushoverActions) actions).sendMessageToDevice(device, message, title);
190     }
191
192     private PushoverMessageBuilder getDefaultPushoverMessageBuilder(String message) {
193         if (accountHandler == null) {
194             throw new RuntimeException("PushoverAccountHandler is null!");
195         }
196
197         if (message == null) {
198             throw new IllegalArgumentException("Skip sending message as 'message' is null.");
199         }
200
201         return accountHandler.getDefaultPushoverMessageBuilder(message);
202     }
203
204     private Boolean send(PushoverMessageBuilder builder, @Nullable String title) {
205         if (title != null) {
206             builder.withTitle(title);
207         }
208         return accountHandler.sendMessage(builder);
209     }
210
211     @Override
212     public void setThingHandler(@Nullable ThingHandler handler) {
213         this.accountHandler = (PushoverAccountHandler) handler;
214     }
215
216     @Override
217     public @Nullable ThingHandler getThingHandler() {
218         return accountHandler;
219     }
220 }