/**
* Copyright (c) 2010-2016 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.action.prowl.internal;
import org.apache.commons.lang.StringUtils;
import org.openhab.core.scriptengine.action.ActionDoc;
import org.openhab.core.scriptengine.action.ParamDoc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sourceforge.prowl.api.DefaultProwlEvent;
import net.sourceforge.prowl.api.ProwlClient;
import net.sourceforge.prowl.api.ProwlEvent;
import net.sourceforge.prowl.exception.ProwlException;
/**
* This class provides static methods that can be used in automation rules
* for pushing Prowl notifications.
*
* @author Thomas.Eichstaedt-Engelen
* @since 0.6.0
*/
public class Prowl {
private static final Logger logger = LoggerFactory.getLogger(Prowl.class);
static String url = null;
static String apiKey = null;
static int priority = 0;
/**
* Pushes a Prowl notification with the configured api
* key and takes the default priority into account
*
* @param subject the subject of the notification
* @param message the message of the notification
*
* @return <code>true</code>, if pushing the notification has been successful
* and <code>false</code> in all other cases.
*/
@ActionDoc(text = "Pushes a Prowl notification and takes the default priority into account", returns = "<code>true</code>, if successful and <code>false</code> otherwise.")
static public boolean pushNotification(
@ParamDoc(name = "subject", text = "subject the subject of the notification.") String subject,
@ParamDoc(name = "message", text = "message the message of the notification.") String message) {
return pushNotification(Prowl.apiKey, subject, message, Prowl.priority);
}
/**
* Pushes a Prowl notification and takes the default priority into account
*
* @param apiKey apiKey to use for the notification
* @param subject the subject of the notification
* @param message the message of the notification
*
* @return <code>true</code>, if pushing the notification has been successful
* and <code>false</code> in all other cases.
*/
@ActionDoc(text = "Pushes a Prowl notification and takes the default priority into account", returns = "<code>true</code>, if successful and <code>false</code> otherwise.")
static public boolean pushNotification(
@ParamDoc(name = "apiKey", text = "apiKey to use for the notification.") String apiKey,
@ParamDoc(name = "subject", text = "subject the subject of the notification.") String subject,
@ParamDoc(name = "message", text = "message the message of the notification.") String message) {
return pushNotification(apiKey, subject, message, Prowl.priority);
}
/**
* Pushes a Prowl notification
*
* @param apiKey apiKey to use for the notification
* @param subject the subject of the notification
* @param message the message of the notification
* @param priority the priority of the notification (a value between
* '-2' and '2')
*
* @return <code>true</code>, if pushing the notification has been successful
* and <code>false</code> in all other cases.
*/
@ActionDoc(text = "Pushes a Prowl notification", returns = "<code>true</code>, if successful and <code>false</code> otherwise.")
static public boolean pushNotification(
@ParamDoc(name = "apiKey", text = "apiKey to use for the notification.") String apiKey,
@ParamDoc(name = "subject", text = "the subject of the notification.") String subject,
@ParamDoc(name = "message", text = "the message of the notification.") String message,
@ParamDoc(name = "priority", text = "the priority of the notification (a value between '-2' and '2'.") int priority) {
boolean success = false;
int normalizedPriority = priority;
if (priority < -2) {
normalizedPriority = -2;
logger.info("Prowl-Notification priority '{}' is invalid - normalized value to '{}'", priority,
normalizedPriority);
} else if (priority > 2) {
normalizedPriority = 2;
logger.info("Prowl-Notification priority '{}' is invalid - normalized value to '{}'", priority,
normalizedPriority);
}
if (ProwlActionService.isProperlyConfigured) {
ProwlClient client = new ProwlClient();
if (StringUtils.isNotBlank(Prowl.url)) {
client.setProwlUrl(Prowl.url);
}
ProwlEvent event = new DefaultProwlEvent(apiKey, "openhab", subject, message, normalizedPriority);
try {
String returnMessage = client.pushEvent(event);
logger.info(returnMessage);
success = true;
} catch (ProwlException pe) {
logger.error("pushing prowl event throws exception", pe);
}
} else {
logger.error(
"Cannot push Prowl notification because of missing configuration settings. The current settings are: "
+ "apiKey: '{}', priority: {}, url: '{}'",
new Object[] { apiKey, String.valueOf(normalizedPriority), url });
}
return success;
}
}