/**
* 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.pushover.internal;
import java.util.Dictionary;
import org.apache.commons.lang.StringUtils;
import org.openhab.core.scriptengine.action.ActionService;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class registers an OSGi service for the Pushover action. Pushover is
* a web based service that allows pushing of messages to mobile devices.
*
* @author Chris Graham
* @since 1.5.0
*/
public class PushoverActionService implements ActionService, ManagedService {
private static final Logger logger = LoggerFactory.getLogger(PushoverActionService.class);
/**
* Your applications API token. See https://pushover.net/api
*/
private final static String PARAM_KEY_API_KEY = "defaultToken";
/**
* The user/group key (not e-mail address) of your user (or you).
*/
private final static String PARAM_KEY_USER = "defaultUser";
/**
* Name of the sending app (optional). Defaults to 'openHAB'
*/
private final static String PARAM_KEY_TITLE = "defaultTitle";
/**
* Priority to use for messages if not specified otherwise (optional).
* Defaults to 0. Valid values range from -2 to 2.
*/
private final static String PARAM_KEY_DEFAULT_PRIORITY = "defaultPriority";
/**
* Url to attach to the message if not specified in the command (optional).
* This can be used to trigger actions on the device
*/
private final static String PARAM_KEY_DEFAULT_URL = "defaultUrl";
/**
* Url title to attach to the message if not specified in the command (optional).
* This can be used to trigger actions on the device
*/
private final static String PARAM_KEY_DEFAULT_URL_TITLE = "defaultUrlTitle";
/**
* Timeout in milliseconds for the connection to pushover.net
* (optional). Defaults to 10 seconds
*/
private final static String PARAM_KEY_TIMEOUT = "defaultTimeout";
/**
* Retry time in seconds to resend message for high priority messages.
* (optional). Defaults to 300 seconds.
*/
private final static String PARAM_KEY_RETRY = "defaultRetry";
/**
* Expirey time in seconds to stop resending messages that are high priority.
* (optional). Defaults to 3600 seconds.
*/
private final static String PARAM_KEY_EXPIRE = "defaultExpire";
/**
* Indicates whether this action is properly configured which means all
* necessary configurations are set. This flag can be checked by the action
* methods before executing code.
*/
static boolean isProperlyConfigured = false;
public PushoverActionService() {
// nothing to do
}
public void activate() {
logger.debug("Pushover action service activated");
}
public void deactivate() {
logger.debug("Pushover action service deactivated");
}
@Override
public String getActionClassName() {
return Pushover.class.getCanonicalName();
}
@Override
public Class<?> getActionClass() {
return Pushover.class;
}
/**
* @{inheritDoc}
*/
@Override
public void updated(Dictionary<String, ?> config) throws ConfigurationException {
logger.debug("Configuration file is being parsed.");
if (config != null) {
logger.debug("Configuration data exists. Parsing the paramaters.");
String apiKey = (String) config.get(PARAM_KEY_API_KEY);
if (!StringUtils.isEmpty(apiKey)) {
Pushover.defaultApiKey = apiKey;
}
String user = (String) config.get(PARAM_KEY_USER);
if (!StringUtils.isEmpty(user)) {
Pushover.defaultUser = user;
}
String title = (String) config.get(PARAM_KEY_TITLE);
if (!StringUtils.isEmpty(title)) {
Pushover.defaultTitle = title;
}
String url = (String) config.get(PARAM_KEY_DEFAULT_URL);
if (!StringUtils.isEmpty(url)) {
Pushover.defaultUrl = url;
}
String urlTitle = (String) config.get(PARAM_KEY_DEFAULT_URL_TITLE);
if (!StringUtils.isEmpty(urlTitle)) {
Pushover.defaultUrlTitle = urlTitle;
}
String defaultPriority = (String) config.get(PARAM_KEY_DEFAULT_PRIORITY);
if (!StringUtils.isEmpty(defaultPriority)) {
try {
Pushover.defaultPriority = Integer.parseInt((String) config.get(PARAM_KEY_DEFAULT_PRIORITY));
} catch (NumberFormatException e) {
logger.warn("Can't parse the default priority value, falling back to default value.");
}
}
String retry = (String) config.get(PARAM_KEY_RETRY);
if (!StringUtils.isEmpty(retry)) {
try {
Pushover.retry = Integer.parseInt((String) config.get(PARAM_KEY_RETRY));
} catch (NumberFormatException e) {
logger.warn("Can't parse the retry value, falling back to default value");
}
}
String expire = (String) config.get(PARAM_KEY_EXPIRE);
if (!StringUtils.isEmpty(expire)) {
try {
Pushover.expire = Integer.parseInt((String) config.get(PARAM_KEY_EXPIRE));
} catch (NumberFormatException e) {
logger.warn("Can't parse the expire message value, falling back to default value");
}
}
String timeOut = (String) config.get(PARAM_KEY_TIMEOUT);
if (!StringUtils.isEmpty(timeOut)) {
try {
Pushover.timeout = Integer.parseInt((String) config.get(PARAM_KEY_TIMEOUT));
} catch (NumberFormatException e) {
logger.warn("Can't parse the timeout value, falling back to default value");
}
}
} else {
// Messages can be sent by providing API Key and User key in the action binding, so no issue here.
logger.debug("The configurations information was empty. No defaults for Pushover loaded.");
}
isProperlyConfigured = true;
}
}