/**
* 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.nma.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 NotifyMyAndroid action.
*
* @author Till Klocke
* @since 1.3.0
*/
public class NotifyMyAndroidActionService implements ActionService, ManagedService {
private static final Logger logger = LoggerFactory.getLogger(NotifyMyAndroidActionService.class);
/**
* Developer key (optional). See http://www.notifymyandroid.com/api.jsp
*/
private final static String PARAM_KEY_DEV_API_KEY = "developerKey";
/**
* Name of the sending app (optional). Defaults to 'openHAB'
*/
private final static String PARAM_KEY_APP_NAME = "appName";
/**
* Timeout in milliseconds for the connection to notifymyandroid.com
* (optional). Defaults to 10 seconds
*/
private final static String PARAM_KEY_TIMEOUT = "timeout";
/**
* Default apiKey (account id) to use for sending message if null or not
* specified in the command. (optional)
*/
private final static String PARAM_KEY_API_KEY = "apiKey";
/**
* 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";
/**
* 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.
*/
/* default */static boolean isProperlyConfigured = false;
public NotifyMyAndroidActionService() {
}
public void activate() {
logger.debug("NotifyMyAndroid action service activated");
}
public void deactivate() {
logger.debug("NotifyMyAndroid action service deactivated");
}
@Override
public String getActionClassName() {
return NotifyMyAndroid.class.getCanonicalName();
}
@Override
public Class<?> getActionClass() {
return NotifyMyAndroid.class;
}
/**
* @{inheritDoc
*/
@Override
public void updated(Dictionary<String, ?> config) throws ConfigurationException {
logger.debug("Updating config");
if (config != null) {
logger.debug("Received new config");
NotifyMyAndroid.developerKey = (String) config.get(PARAM_KEY_DEV_API_KEY);
String appName = (String) config.get(PARAM_KEY_APP_NAME);
if (!StringUtils.isEmpty(appName)) {
NotifyMyAndroid.appName = appName;
}
String timeOut = (String) config.get(PARAM_KEY_TIMEOUT);
if (!StringUtils.isEmpty(timeOut)) {
try {
NotifyMyAndroid.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");
}
}
NotifyMyAndroid.apiKey = (String) config.get(PARAM_KEY_API_KEY);
String defaultPriority = (String) config.get(PARAM_KEY_DEFAULT_PRIORITY);
if (!StringUtils.isEmpty(defaultPriority)) {
try {
NotifyMyAndroid.defaultPriotiy = 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");
}
}
NotifyMyAndroid.defaultUrl = (String) config.get(PARAM_KEY_DEFAULT_URL);
} else {
// We don't need necessarily any config
logger.debug("Dictionary was NULL, didn't read any configuration");
}
isProperlyConfigured = true;
}
}