/*
* Weblounge: Web Content Management System
* Copyright (c) 2011 The Weblounge Team
* http://weblounge.o2it.ch
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package ch.entwine.weblounge.aws;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import org.apache.commons.lang.StringUtils;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Dictionary;
/**
* Main class that is coordinating support around Amazon Web Services (AWS).
*/
public class AmazonWebServices implements ManagedService {
/** Value of the service pid, used for service configuration lookup */
public static final String SERVICE_PID = "ch.entwine.weblounge.aws";
/** Identifier used to access amazon web services */
public static final String OPT_ACCESS_KEY_ID = "aws.accessKeyId";
/** Secret used to access amazon web services */
public static final String OPT_ACCESS_KEY_SECRET = "aws.accessKeySecret";
/** The logging implementation */
private static final Logger logger = LoggerFactory.getLogger(AmazonWebServices.class);
/** Amazon web services access key id */
private String accessKeyId = null;
/** Amazon web services access key secret */
private String accessKeySecret = null;
/** Amazon web services access credentials */
private AWSCredentials accessCredentials = null;
/** The Amazon S3 resource serializer */
private AmazonResourceSerializer s3Serializer = null;
/**
* Activates the service implementation.
*
* @param cc
* the component context
* @throws ConfigurationException
* if service configuration fails
*/
void activate(ComponentContext cc) throws ConfigurationException {
BundleContext bundleCtx = cc.getBundleContext();
ServiceReference ref = bundleCtx.getServiceReference(ConfigurationAdmin.class.getName());
if (ref != null) {
ConfigurationAdmin configurationAdmin = (ConfigurationAdmin) bundleCtx.getService(ref);
Configuration config;
try {
config = configurationAdmin.getConfiguration(SERVICE_PID);
if (config != null && config.getProperties() != null)
updated(config.getProperties());
else
throw new IllegalStateException("Amazon web services need configuration");
} catch (IOException e) {
logger.error("Error trying to look up datasource configuration", e);
}
}
}
/**
* {@inheritDoc}
*
* @see org.osgi.service.cm.ManagedService#updated(java.util.Dictionary)
*/
@SuppressWarnings("rawtypes")
public void updated(Dictionary properties) throws ConfigurationException {
// Read the access key id
accessKeyId = (String)properties.get(OPT_ACCESS_KEY_ID);
if (StringUtils.isBlank(accessKeyId))
throw new ConfigurationException(OPT_ACCESS_KEY_ID, "not set");
logger.debug("Amazon access key id is '{}'", accessKeyId);
// Read the access key secret–
accessKeySecret = (String)properties.get(OPT_ACCESS_KEY_SECRET);
if (StringUtils.isBlank(accessKeySecret))
throw new ConfigurationException(OPT_ACCESS_KEY_SECRET, "not set");
logger.debug("Amazon access key secret is '{}'", accessKeySecret);
// Create the credentials
accessCredentials = new BasicAWSCredentials(accessKeyId, accessKeySecret);
s3Serializer = new AmazonResourceSerializer(accessCredentials);
}
}