/*
* Copyright 2011-2012 Amazon Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://aws.amazon.com/apache2.0
*
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and
* limitations under the License.
*/
package com.amazonaws.eclipse.explorer.simpledb;
import java.util.Properties;
import org.eclipse.datatools.connectivity.ConnectionProfileException;
import org.eclipse.datatools.connectivity.IConnectionProfile;
import org.eclipse.datatools.connectivity.ProfileManager;
import org.eclipse.datatools.connectivity.drivers.DriverInstance;
import org.eclipse.datatools.connectivity.drivers.DriverManager;
import org.eclipse.datatools.connectivity.drivers.jdbc.IJDBCConnectionProfileConstants;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.datatools.enablement.simpledb.connection.ISimpleDBConnectionProfileConstants;
public class SimpleDBConnectionProfileManager {
public IConnectionProfile findOrCreateConnectionProfile(final String endpoint) {
// Attempt to use an existing ConnectionProfile
for (IConnectionProfile profile : ProfileManager.getInstance().getProfileByProviderID(ISimpleDBConnectionProfileConstants.SIMPLEDB_PROFILE_PROVIDER_ID)) {
Properties baseProperties = profile.getBaseProperties();
// Ignore any connection profiles that have their AWS security credentials directly
// included in their properties.
String username = baseProperties.getProperty(IJDBCConnectionProfileConstants.USERNAME_PROP_ID);
if (username != null && username.length() > 0) {
continue;
}
boolean isCorrectRegion = endpoint.equals(baseProperties.getProperty(ISimpleDBConnectionProfileConstants.ENDPOINT));
boolean isCorrectAccount = AwsToolkitCore.getDefault().getCurrentAccountId().equals(baseProperties.getProperty(ISimpleDBConnectionProfileConstants.ACCOUNT_ID));
if (isCorrectRegion && isCorrectAccount) {
return profile;
}
}
// If we didn't find a suitable existing ConnectionProfile, create a new one...
DriverInstance driverInstance = DriverManager.getInstance().getDriverInstanceByID(ISimpleDBConnectionProfileConstants.SIMPLEDB_DRIVER_ID);
Properties baseProperties = (Properties)driverInstance.getPropertySet().getBaseProperties().clone();
baseProperties.setProperty(ISimpleDBConnectionProfileConstants.ACCOUNT_ID, AwsToolkitCore.getDefault().getCurrentAccountId());
baseProperties.setProperty(ISimpleDBConnectionProfileConstants.ENDPOINT, endpoint);
try {
String name = createUniqueConnectionProfileName(endpoint);
String description = "Connection to Amazon SimpleDB (" + endpoint + ")";
return ProfileManager.getInstance().createProfile(name, description, ISimpleDBConnectionProfileConstants.SIMPLEDB_PROFILE_PROVIDER_ID, baseProperties);
} catch (ConnectionProfileException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
private String createUniqueConnectionProfileName(final String endpoint) {
String currentAccountId = AwsToolkitCore.getDefault().getCurrentAccountId();
String currentAccountName = AwsToolkitCore.getDefault().getAccountManager().getAllAccountNames().get(currentAccountId);
String name;
int suffix = 0;
do {
name = "Amazon SimpleDB (account: " + currentAccountName + ", endpoint: " + endpoint + ")";
if (suffix++ > 0) {
name += " " + suffix;
}
} while (ProfileManager.getInstance().getProfileByName(name) != null);
return name;
}
}