You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/06/11 23:34:48 UTC
[7/8] airavata git commit: moved commons-utils to commons module
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java
new file mode 100644
index 0000000..f753bc1
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java
@@ -0,0 +1,205 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.data.Stat;
+import org.apache.zookeeper.server.ServerCnxnFactory;
+import org.apache.zookeeper.server.ServerConfig;
+import org.apache.zookeeper.server.ZooKeeperServer;
+import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
+import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.ByteBuffer;
+
+public class AiravataZKUtils implements Watcher {
+ private final static Logger logger = LoggerFactory.getLogger(AiravataZKUtils.class);
+
+ public static final String ZK_EXPERIMENT_STATE_NODE = "state";
+ public static final String DELIVERY_TAG_POSTFIX = "-deliveryTag";
+ public static final String CANCEL_DELIVERY_TAG_POSTFIX = "-cancel-deliveryTag";
+
+ @Override
+ public void process(WatchedEvent event) {
+
+ }
+
+ public static String getExpZnodePath(String experimentId) throws ApplicationSettingsException {
+ return ServerSettings.getSetting(Constants.ZOOKEEPER_GFAC_EXPERIMENT_NODE) +
+ File.separator +
+ ServerSettings.getSetting(Constants.ZOOKEEPER_GFAC_SERVER_NAME) + File.separator
+ + experimentId;
+ }
+
+ public static String getExpZnodeHandlerPath(String experimentId, String className) throws ApplicationSettingsException {
+ return ServerSettings.getSetting(Constants.ZOOKEEPER_GFAC_EXPERIMENT_NODE) +
+ File.separator +
+ ServerSettings.getSetting(Constants.ZOOKEEPER_GFAC_SERVER_NAME) + File.separator
+ + experimentId + File.separator + className;
+ }
+
+ public static String getZKhostPort() throws ApplicationSettingsException {
+ return ServerSettings.getSetting(Constants.ZOOKEEPER_SERVER_HOST,"localhost")
+ + ":" + ServerSettings.getSetting(Constants.ZOOKEEPER_SERVER_PORT,"2181");
+ }
+
+ public static int getZKTimeout()throws ApplicationSettingsException {
+ return Integer.parseInt(ServerSettings.getSetting(Constants.ZOOKEEPER_TIMEOUT,"30000"));
+ }
+
+ public static String getExpStatePath(String experimentId) throws ApplicationSettingsException {
+ return AiravataZKUtils.getExpZnodePath(experimentId) +
+ File.separator +
+ "state";
+ }
+
+ public static String getExpState(CuratorFramework curatorClient, String expId) throws Exception {
+ Stat exists = curatorClient.checkExists().forPath(getExpStatePath(expId));
+ if (exists != null) {
+ return new String(curatorClient.getData().storingStatIn(exists).forPath(getExpStatePath(expId)));
+ }
+ return null;
+ }
+
+ public static void runZKFromConfig(ServerConfig config,ServerCnxnFactory cnxnFactory) throws IOException {
+ AiravataZKUtils.logger.info("Starting Zookeeper server...");
+ FileTxnSnapLog txnLog = null;
+ try {
+ // Note that this thread isn't going to be doing anything else,
+ // so rather than spawning another thread, we will just call
+ // run() in this thread.
+ // create a file logger url from the command line args
+ ZooKeeperServer zkServer = new ZooKeeperServer();
+
+ txnLog = new FileTxnSnapLog(new File(config.getDataDir()), new File(
+ config.getDataDir()));
+ zkServer.setTxnLogFactory(txnLog);
+ zkServer.setTickTime(config.getTickTime());
+ zkServer.setMinSessionTimeout(config.getMinSessionTimeout());
+ zkServer.setMaxSessionTimeout(config.getMaxSessionTimeout());
+ cnxnFactory = ServerCnxnFactory.createFactory();
+ cnxnFactory.configure(config.getClientPortAddress(),
+ config.getMaxClientCnxns());
+ cnxnFactory.startup(zkServer);
+ cnxnFactory.join();
+ if (zkServer.isRunning()) {
+ zkServer.shutdown();
+ }
+ } catch (InterruptedException e) {
+ // warn, but generally this is ok
+ AiravataZKUtils.logger.warn("Server interrupted", e);
+ System.exit(1);
+ } finally {
+ if (txnLog != null) {
+ txnLog.close();
+ }
+ }
+ }
+
+ public static void startEmbeddedZK(ServerCnxnFactory cnxnFactory) {
+ if (ServerSettings.isEmbeddedZK()) {
+ ServerConfig serverConfig = new ServerConfig();
+ URL resource = AiravataZKUtils.class.getClassLoader().getResource("zoo.cfg");
+ if (resource == null) {
+ logger.error("There is no zoo.cfg file in the classpath... Failed to start Zookeeper Server");
+ System.exit(1);
+ }
+ try {
+ serverConfig.parse(resource.getPath());
+ } catch (QuorumPeerConfig.ConfigException e) {
+ logger.error("Error while starting embedded Zookeeper", e);
+ System.exit(2);
+ }
+
+ final ServerConfig fServerConfig = serverConfig;
+ final ServerCnxnFactory fserverCnxnFactory = cnxnFactory;
+ (new Thread() {
+ public void run() {
+ try {
+ AiravataZKUtils.runZKFromConfig(fServerConfig,fserverCnxnFactory);
+ } catch (IOException e) {
+ logger.error("Error while starting embedded Zookeeper", e);
+ System.exit(3);
+ }
+ }
+ }).start();
+ }else{
+ logger.info("Skipping Zookeeper embedded startup ...");
+ }
+ }
+
+ public static byte[] toByteArray(double value) {
+ byte[] bytes = new byte[8];
+ ByteBuffer.wrap(bytes).putDouble(value);
+ return bytes;
+ }
+
+ public static long getDeliveryTag(String experimentID, CuratorFramework curatorClient, String experimentNode,
+ String pickedChild) throws Exception {
+ String deliveryTagPath = experimentNode + File.separator + pickedChild + File.separator + experimentID
+ + DELIVERY_TAG_POSTFIX;
+ Stat exists = curatorClient.checkExists().forPath(deliveryTagPath);
+ if(exists==null) {
+ logger.error("Cannot find delivery Tag in path:" + deliveryTagPath + " for this experiment");
+ return -1;
+ }
+ return bytesToLong(curatorClient.getData().storingStatIn(exists).forPath(deliveryTagPath));
+ }
+ public static byte[] longToBytes(long x) {
+ ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
+ buffer.putLong(x);
+ return buffer.array();
+ }
+
+ public static long bytesToLong(byte[] bytes) {
+ ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
+ buffer.put(bytes);
+ buffer.flip();//need flip
+ return buffer.getLong();
+ }
+
+ public static double toDouble(byte[] bytes) {
+ return ByteBuffer.wrap(bytes).getDouble();
+ }
+
+ public static long getCancelDeliveryTagIfExist(String experimentId, CuratorFramework curatorClient,
+ String experimentNode, String pickedChild) throws Exception {
+
+ String cancelDeliveryTagPath = experimentNode + File.separator + pickedChild + File.separator + experimentId +
+ AiravataZKUtils.CANCEL_DELIVERY_TAG_POSTFIX;
+ Stat exists = curatorClient.checkExists().forPath(cancelDeliveryTagPath);
+ if (exists == null) {
+ return -1; // no cancel deliverytag found
+ } else {
+ return bytesToLong(curatorClient.getData().storingStatIn(exists).forPath(cancelDeliveryTagPath));
+ }
+
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
new file mode 100644
index 0000000..9a59573
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
@@ -0,0 +1,444 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.exception.ApplicationSettingsLoadException;
+import org.apache.airavata.common.exception.ApplicationSettingsStoreException;
+import org.apache.airavata.common.exception.UnspecifiedApplicationSettingsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ApplicationSettings {
+ public static final String SERVER_PROPERTIES="airavata-server.properties";
+
+ public static String ADDITIONAL_SETTINGS_FILES = "external.settings";
+
+ protected Properties properties = new Properties();
+ private Exception propertyLoadException;
+
+
+ protected static final String TRUST_STORE_PATH="trust.store";
+ protected static final String TRUST_STORE_PASSWORD="trust.store.password";
+
+ private static final String REGULAR_EXPRESSION = "\\$\\{[a-zA-Z.-]*\\}";
+
+ private final static Logger logger = LoggerFactory.getLogger(ApplicationSettings.class);
+
+ private static final String SHUTDOWN_STATEGY_STRING="shutdown.strategy";
+
+ protected static ApplicationSettings INSTANCE;
+ public static enum ShutdownStrategy{
+ NONE,
+ SELF_TERMINATE
+ }
+ {
+ loadProperties();
+ }
+
+ private void loadProperties() {
+ URL url = getPropertyFileURL();
+ try {
+
+ properties.load(url.openStream());
+ logger.info("Settings loaded from "+url.toString());
+ URL[] externalSettingsFileURLs = getExternalSettingsFileURLs();
+ for (URL externalSettings : externalSettingsFileURLs) {
+ mergeSettingsImpl(externalSettings.openStream());
+ logger.info("External settings merged from "+url.toString());
+ }
+ } catch (Exception e) {
+ propertyLoadException=e;
+ }
+ }
+
+ protected URL getPropertyFileURL() {
+ return ApplicationSettings.class.getClassLoader().getResource(SERVER_PROPERTIES);
+ }
+
+ protected URL[] getExternalSettingsFileURLs(){
+ try {
+ List<URL> externalSettingsFileURLs=new ArrayList<URL>();
+ String externalSettingsFileNames = getSettingImpl(ADDITIONAL_SETTINGS_FILES);
+ String[] externalSettingFiles = externalSettingsFileNames.split(",");
+ for (String externalSettingFile : externalSettingFiles) {
+ URL externalSettingFileURL = ApplicationSettings.class.getClassLoader().getResource(externalSettingFile);
+ if (externalSettingFileURL==null){
+ logger.warn("Could not file external settings file "+externalSettingFile);
+ }else{
+ externalSettingsFileURLs.add(externalSettingFileURL);
+ }
+ }
+ return externalSettingsFileURLs.toArray(new URL[]{});
+ } catch (ApplicationSettingsException e) {
+ return new URL[]{};
+ }
+ }
+ protected static ApplicationSettings getInstance(){
+ if (INSTANCE==null){
+ INSTANCE=new ApplicationSettings();
+ }
+ return INSTANCE;
+ }
+
+ protected static void setInstance(ApplicationSettings settingsInstance){
+ INSTANCE=settingsInstance;
+ }
+
+ private void saveProperties() throws ApplicationSettingsStoreException{
+ URL url = getPropertyFileURL();
+ if (url.getProtocol().equalsIgnoreCase("file")){
+ try {
+ properties.store(new FileOutputStream(url.getPath()), Calendar.getInstance().toString());
+ } catch (Exception e) {
+ throw new ApplicationSettingsStoreException(url.getPath(), e);
+ }
+ }else{
+ logger.warn("Properties cannot be updated to location "+url.toString());
+ }
+ }
+
+ private void validateSuccessfulPropertyFileLoad() throws ApplicationSettingsException{
+ if (propertyLoadException!=null){
+ throw new ApplicationSettingsLoadException(propertyLoadException);
+ }
+ }
+
+ /**
+ * Returns the configuration value relevant for the given key.
+ * If configuration value contains references to other configuration values they will also
+ * be replaced. E.g :- If configuration key reads http://${ip}:${port}/axis2/services/RegistryService?wsdl,
+ * the variables ip and port will get replaced by their appropriated values in the configuration.
+ * @param key The configuration key to read value of
+ * @return The configuration value. For above example caller will get a value like
+ * http://192.2.33.12:8080/axis2/services/RegistryService?wsdl
+ * @throws ApplicationSettingsException If an error occurred while reading configurations.
+ * @deprecated use #getSetting(String) instead
+ */
+ public String getAbsoluteSetting(String key) throws ApplicationSettingsException {
+
+ String configurationValueWithVariables = ApplicationSettings.getSetting(key);
+
+ List<String> variableList
+ = getAllMatches(configurationValueWithVariables, REGULAR_EXPRESSION);
+
+ if (variableList == null || variableList.isEmpty()) {
+ return configurationValueWithVariables;
+ }
+
+ for(String variableIdentifier : variableList) {
+ String variableName = getVariableNameOnly(variableIdentifier);
+ String value = getAbsoluteSetting(variableName);
+
+ configurationValueWithVariables = configurationValueWithVariables.replace(variableIdentifier, value);
+ }
+
+ return configurationValueWithVariables;
+
+ }
+
+ private static String getVariableNameOnly(String variableWithIdentifiers) {
+ return variableWithIdentifiers.substring(2, (variableWithIdentifiers.length() - 1));
+ }
+
+ private static List<String> getAllMatches(String text, String regex) {
+ List<String> matches = new ArrayList<String>();
+ Matcher m = Pattern.compile("(?=(" + regex + "))").matcher(text);
+ while(m.find()) {
+ matches.add(m.group(1));
+ }
+ return matches;
+ }
+
+ public String getSettingImpl(String key) throws ApplicationSettingsException{
+ String rawValue=null;
+ if (System.getProperties().containsKey(key)){
+ rawValue=System.getProperties().getProperty(key);
+ }else{
+ validateSuccessfulPropertyFileLoad();
+ if (properties.containsKey(key)){
+ rawValue=properties.getProperty(key);
+ }else{
+ throw new UnspecifiedApplicationSettingsException(key);
+ }
+ }
+ return deriveAbsoluteValueImpl(rawValue);
+ }
+
+ public String getSettingImpl(String key, String defaultValue){
+ try {
+ return getSettingImpl(key);
+ } catch (ApplicationSettingsException e) {
+ //we'll ignore this error since a default value is provided
+ }
+ return defaultValue;
+ }
+
+ private String deriveAbsoluteValueImpl(String property){
+ if (property!=null){
+ Map<Integer, String> containedParameters = StringUtil.getContainedParameters(property);
+ List<String> parametersAlreadyProcessed=new ArrayList<String>();
+ for (String parameter : containedParameters.values()) {
+ if (!parametersAlreadyProcessed.contains(parameter)) {
+ String parameterName = parameter.substring(2,parameter.length() - 1);
+ String parameterValue = getSetting(parameterName,parameter);
+ property = property.replaceAll(Pattern.quote(parameter), parameterValue);
+ parametersAlreadyProcessed.add(parameter);
+ }
+ }
+ }
+ return property;
+ }
+
+ public void setSettingImpl(String key, String value) throws ApplicationSettingsException{
+ properties.setProperty(key, value);
+ saveProperties();
+ }
+
+ public boolean isSettingDefinedImpl(String key) throws ApplicationSettingsException{
+ validateSuccessfulPropertyFileLoad();
+ return properties.containsKey(key);
+ }
+
+ public String getTrustStorePathImpl() throws ApplicationSettingsException {
+ return getSetting(TRUST_STORE_PATH);
+ }
+
+ public String getTrustStorePasswordImpl() throws ApplicationSettingsException {
+ return getSetting(TRUST_STORE_PASSWORD);
+ }
+
+ public String getCredentialStoreKeyStorePathImpl() throws ApplicationSettingsException {
+ return getSetting("credential.store.keystore.url");
+ }
+
+ public String getCredentialStoreKeyAliasImpl() throws ApplicationSettingsException {
+ return getSetting("credential.store.keystore.alias");
+ }
+
+ public String getCredentialStoreKeyStorePasswordImpl() throws ApplicationSettingsException {
+ return getSetting("credential.store.keystore.password");
+ }
+
+ public String getCredentialStoreNotifierEnabledImpl() throws ApplicationSettingsException {
+ return getSetting("notifier.enabled");
+ }
+
+ public String getCredentialStoreNotifierDurationImpl() throws ApplicationSettingsException {
+ return getSetting("notifier.duration");
+ }
+
+ public String getCredentialStoreEmailServerImpl() throws ApplicationSettingsException {
+ return getSetting("email.server");
+ }
+
+ public String getCredentialStoreEmailServerPortImpl() throws ApplicationSettingsException {
+ return getSetting("email.server.port");
+ }
+
+ public String getCredentialStoreEmailUserImpl() throws ApplicationSettingsException {
+ return getSetting("email.user");
+ }
+
+ public String getCredentialStoreEmailPasswordImpl() throws ApplicationSettingsException {
+ return getSetting("email.password");
+ }
+
+ public String getCredentialStoreEmailSSLConnectImpl() throws ApplicationSettingsException {
+ return getSetting("email.ssl");
+ }
+
+ public String getCredentialStoreEmailFromEmailImpl() throws ApplicationSettingsException {
+ return getSetting("email.from");
+ }
+
+ /**
+ * @deprecated use {{@link #getSetting(String)}}
+ * @return
+ */
+ public Properties getPropertiesImpl() {
+ return properties;
+ }
+
+ public void mergeSettingsImpl(Map<String,String> props){
+ properties.putAll(props);
+ }
+
+ public void mergeSettingsImpl(InputStream stream) throws IOException{
+ Properties tmpProp = new Properties();
+ tmpProp.load(stream);
+ properties.putAll(tmpProp);
+ }
+
+ public void mergeSettingsCommandLineArgsImpl(String[] args){
+ properties.putAll(StringUtil.parseCommandLineOptions(args));
+ }
+
+ public ShutdownStrategy getShutdownStrategyImpl() throws Exception{
+ String strategy = null;
+ try {
+ strategy = getSetting(SHUTDOWN_STATEGY_STRING, ShutdownStrategy.SELF_TERMINATE.toString());
+ return ShutdownStrategy.valueOf(strategy);
+ } catch (Exception e) {
+ //if the string mentioned in config is invalid
+ throw new Exception("Invalid shutdown strategy configured : "+strategy);
+ }
+ }
+
+ /*
+ * Static methods which will be used by the users
+ */
+
+ public static String getSetting(String key) throws ApplicationSettingsException{
+ return getInstance().getSettingImpl(key);
+ }
+
+ public static String getSetting(String key, String defaultValue){
+ return getInstance().getSettingImpl(key,defaultValue);
+
+ }
+
+ public static void setSetting(String key, String value) throws ApplicationSettingsException{
+ getInstance().properties.setProperty(key, value);
+ getInstance().saveProperties();
+ }
+
+ public static boolean isSettingDefined(String key) throws ApplicationSettingsException{
+ return getInstance().properties.containsKey(key);
+ }
+
+ public static String getTrustStorePath() throws ApplicationSettingsException {
+ return getSetting(TRUST_STORE_PATH);
+ }
+
+ public static String getTrustStorePassword() throws ApplicationSettingsException {
+ return getSetting(TRUST_STORE_PASSWORD);
+ }
+
+ public static void initializeTrustStore() throws ApplicationSettingsException {
+ SecurityUtil.setTrustStoreParameters(getTrustStorePath(), getTrustStorePassword());
+ }
+
+ public static String getCredentialStoreKeyStorePath() throws ApplicationSettingsException {
+ return getSetting("credential.store.keystore.url");
+ }
+
+ public static String getCredentialStoreThriftServerKeyStorePath() throws ApplicationSettingsException {
+ return getSetting("credential.store.thrift.server.keystore");
+ }
+
+ public static boolean isCredentialStoreStartEnabled() throws ApplicationSettingsException {
+ String enableCredentialStore = getSetting("start.credential.store");
+ if (enableCredentialStore.equals("true")){
+ return true;
+ }
+ return false;
+ }
+
+ public static String getCredentialStoreKeyAlias() throws ApplicationSettingsException {
+ return getSetting("credential.store.keystore.alias");
+ }
+
+ public static String getCredentialStoreKeyStorePassword() throws ApplicationSettingsException {
+ return getSetting("credential.store.keystore.password");
+ }
+
+ public static String getCredentialStoreThriftServerKeyStorePassword() throws ApplicationSettingsException {
+ return getSetting("credential.store.thrift.server.keystore.password");
+ }
+
+ public static String getCredentialStoreServerHost() throws ApplicationSettingsException {
+ return getSetting("credential.store.server.host");
+ }
+
+ public static String getCredentialStoreServerPort() throws ApplicationSettingsException {
+ return getSetting("credential.store.server.port");
+ }
+ public static String getCredentialStoreNotifierEnabled() throws ApplicationSettingsException {
+ return getSetting("notifier.enabled");
+ }
+
+ public static String getCredentialStoreNotifierDuration() throws ApplicationSettingsException {
+ return getSetting("notifier.duration");
+ }
+
+ public static String getCredentialStoreEmailServer() throws ApplicationSettingsException {
+ return getSetting("email.server");
+ }
+
+ public static String getCredentialStoreEmailServerPort() throws ApplicationSettingsException {
+ return getSetting("email.server.port");
+ }
+
+ public static String getCredentialStoreEmailUser() throws ApplicationSettingsException {
+ return getSetting("email.user");
+ }
+
+ public static String getCredentialStoreEmailPassword() throws ApplicationSettingsException {
+ return getSetting("email.password");
+ }
+
+ public static String getCredentialStoreEmailSSLConnect() throws ApplicationSettingsException {
+ return getSetting("email.ssl");
+ }
+
+ public static String getCredentialStoreEmailFromEmail() throws ApplicationSettingsException {
+ return getSetting("email.from");
+ }
+
+ /**
+ * @deprecated use {{@link #getSetting(String)}}
+ * @return
+ * @throws ApplicationSettingsException
+ */
+ public static Properties getProperties() throws ApplicationSettingsException {
+ return getInstance().properties;
+ }
+
+ public static void mergeSettings(Map<String,String> props) {
+ getInstance().mergeSettingsImpl(props);
+ }
+
+ public static void mergeSettings(InputStream stream) throws IOException{
+ getInstance().mergeSettingsImpl(stream);
+ }
+
+ public static void mergeSettingsCommandLineArgs(String[] args){
+ getInstance().mergeSettingsCommandLineArgsImpl(args);
+ }
+
+ public static ShutdownStrategy getShutdownStrategy() throws Exception{
+ return getInstance().getShutdownStrategyImpl();
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/BrowserLauncher.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/BrowserLauncher.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/BrowserLauncher.java
new file mode 100644
index 0000000..8946aa3
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/BrowserLauncher.java
@@ -0,0 +1,98 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+
+import org.apache.airavata.common.exception.UtilsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Opens URLs with the OS-specific browser.
+ */
+public class BrowserLauncher {
+
+ private static final String ERROR_MESSAGE = "Error while attempting to launch web browser";
+
+ private static Logger logger = LoggerFactory.getLogger(BrowserLauncher.class);
+
+ /**
+ * Opens a specified URL with the browser.
+ *
+ * @param url
+ * The specified URL.
+ * @throws UtilsException
+ */
+ public static void openURL(URL url) throws UtilsException {
+ openURL(url.toString());
+ }
+
+ /**
+ * Opens a specified URL with the browser.
+ *
+ * @param url
+ * The specified URL.
+ * @throws UtilsException
+ */
+ public static void openURL(String url) throws UtilsException {
+ logger.debug("Enter:" + url);
+ String osName = System.getProperty("os.name");
+ try {
+ if (osName.startsWith("Mac OS")) {
+ Class macUtils = Class.forName("com.apple.mrj.MRJFileUtils");
+ Method openURL = macUtils.getDeclaredMethod("openURL", new Class[] { String.class });
+ openURL.invoke(null, new Object[] { url });
+ } else if (osName.startsWith("Windows"))
+ Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
+ else { // assume Unix or Linux
+ String[] browsers = { "firefox", "mozilla", "netscape", "opera", "konqueror" };
+ String browser = null;
+ for (int count = 0; count < browsers.length && browser == null; count++)
+ if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0)
+ browser = browsers[count];
+ if (browser == null) {
+ throw new UtilsException("Could not find web browser.");
+ } else {
+ Runtime.getRuntime().exec(new String[] { browser, url });
+ }
+ }
+ } catch (ClassNotFoundException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ } catch (NoSuchMethodException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ } catch (IllegalAccessException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ } catch (InvocationTargetException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ } catch (IOException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ } catch (InterruptedException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ } catch (RuntimeException e) {
+ throw new UtilsException(ERROR_MESSAGE, e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/ClientSettings.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ClientSettings.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ClientSettings.java
new file mode 100644
index 0000000..5373772
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ClientSettings.java
@@ -0,0 +1,27 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+
+public class ClientSettings extends ApplicationSettings {
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/Constants.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/Constants.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/Constants.java
new file mode 100644
index 0000000..6855a8e
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/Constants.java
@@ -0,0 +1,66 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+/**
+ * Constants used in Airavata should go here.
+ */
+public final class Constants {
+
+ public static final String USER_IN_SESSION = "userName";
+// public static final String GATEWAY_NAME = "gateway_id";
+ public static final String GFAC_CONFIG_XML = "gfac-config.xml";
+ public static final String PUSH = "push";
+ public static final String PULL = "pull";
+ public static final String API_SERVER_PORT = "apiserver.server.port";
+ public static final String API_SERVER_HOST = "apiserver.server.host";
+ public static final String REGISTRY_JDBC_URL = "registry.jdbc.url";
+ public static final String APPCATALOG_JDBC_URL = "appcatalog.jdbc.url";
+ public static final String RABBITMQ_BROKER_URL = "rabbitmq.broker.url";
+ public static final String RABBITMQ_EXCHANGE = "rabbitmq.exchange.name";
+ public static final String ORCHESTRATOR_SERVER_HOST = "orchestrator.server.host";
+ public static final String ORCHESTRATOR_SERVER_PORT = "orchestrator.server.port";
+ public static final String GFAC_SERVER_HOST = "gfac.server.host";
+ public static final String GFAC_SERVER_PORT = "gfac.server.port";
+ public static final String CREDENTIAL_SERVER_HOST = "credential.store.server.host";
+ public static final String CREDENTIAL_SERVER_PORT = "credential.store.server.port";
+ public static final String ZOOKEEPER_EXPERIMENT_CATALOG = "experiment-catalog";
+ public static final String ZOOKEEPER_APPCATALOG = "app-catalog";
+ public static final String ZOOKEEPER_RABBITMQ = "rabbit-mq";
+ public static final String ZOOKEEPER_SERVER_HOST = "zookeeper.server.host";
+ public static final String ZOOKEEPER_SERVER_PORT = "zookeeper.server.port";
+ public static final String ZOOKEEPER_API_SERVER_NODE = "airavata-server";
+ public static final String ZOOKEEPER_ORCHESTRATOR_SERVER_NODE = "orchestrator-server";
+ public static final String ZOOKEEPER_GFAC_SERVER_NODE = "gfac-server";
+ public static final String ZOOKEEPER_GFAC_EXPERIMENT_NODE = "gfac-experiments";
+ public static final String ZOOKEEPER_GFAC_SERVER_NAME = "gfac-server-name";
+ public static final String ZOOKEEPER_ORCHESTRATOR_SERVER_NAME = "orchestrator-server-name";
+ public static final String ZOOKEEPER_API_SERVER_NAME = "api-server-name";
+ public static final String STAT = "stat";
+ public static final String JOB = "job";
+ public static final String ZOOKEEPER_TIMEOUT = "zookeeper.timeout";
+ //API security relates property names
+ public static final String IS_API_SECURED = "api.secured";
+ public static final String REMOTE_OAUTH_SERVER_URL = "remote.oauth.authorization.server";
+ public static final String ADMIN_USERNAME = "admin.user.name";
+ public static final String ADMIN_PASSWORD = "admin.password";
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/DBUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/DBUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/DBUtil.java
new file mode 100644
index 0000000..bb2ff1d
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/DBUtil.java
@@ -0,0 +1,334 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.commons.dbcp.BasicDataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.sql.DataSource;
+import java.sql.*;
+import java.util.Properties;
+
+/**
+ * Database lookup. Abstracts out JDBC operations.
+ */
+public class DBUtil {
+
+ private String jdbcUrl;
+ private String databaseUserName;
+ private String databasePassword;
+ private String driverName;
+
+ protected static Logger log = LoggerFactory.getLogger(DBUtil.class);
+
+ private Properties properties;
+
+ public DBUtil(String jdbcUrl, String userName, String password, String driver) throws InstantiationException,
+ IllegalAccessException, ClassNotFoundException {
+
+ this.jdbcUrl = jdbcUrl;
+ this.databaseUserName = userName;
+ this.databasePassword = password;
+ this.driverName = driver;
+
+ init();
+ }
+
+ /**
+ * Initializes and load driver. Must be called this before calling anyother method.
+ *
+ * @throws ClassNotFoundException
+ * If DB driver is not found.
+ * @throws InstantiationException
+ * If unable to create driver class.
+ * @throws IllegalAccessException
+ * If security does not allow users to instantiate driver object.
+ */
+ private void init() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
+ properties = new Properties();
+
+ properties.put("user", databaseUserName);
+ properties.put("password", databasePassword);
+ properties.put("characterEncoding", "ISO-8859-1");
+ properties.put("useUnicode", "true");
+
+ loadDriver();
+ }
+
+ /**
+ * Generic method to query values in the database.
+ *
+ * @param tableName
+ * Table name to query
+ * @param selectColumn
+ * The column selecting
+ * @param whereValue
+ * The condition query
+ * @return The value appropriate to the query.
+ * @throws SQLException
+ * If an error occurred while querying
+ */
+ public String getMatchingColumnValue(String tableName, String selectColumn, String whereValue) throws SQLException {
+ return getMatchingColumnValue(tableName, selectColumn, selectColumn, whereValue);
+ }
+
+ /**
+ * Generic method to query values in the database.
+ *
+ * @param tableName
+ * Table name to query
+ * @param selectColumn
+ * The column selecting
+ * @param whereColumn
+ * The column which condition should apply
+ * @param whereValue
+ * The condition query
+ * @return The value appropriate to the query.
+ * @throws SQLException
+ * If an error occurred while querying
+ */
+ public String getMatchingColumnValue(String tableName, String selectColumn, String whereColumn, String whereValue)
+ throws SQLException {
+
+ StringBuilder stringBuilder = new StringBuilder();
+
+ stringBuilder.append("SELECT ").append(selectColumn).append(" FROM ").append(tableName).append(" WHERE ")
+ .append(whereColumn).append(" = ?");
+
+ String sql = stringBuilder.toString();
+
+ Connection connection = getConnection();
+
+ PreparedStatement ps = connection.prepareStatement(sql);
+ ResultSet rs = null;
+
+ try {
+ ps.setString(1, whereValue);
+ rs = ps.executeQuery();
+
+ if (rs.next()) {
+ return rs.getString(1);
+ }
+
+ } finally {
+ try {
+ if (rs != null) {
+ rs.close();
+ }
+
+ ps.close();
+ connection.close();
+
+ } catch (Exception ignore) {
+ log.error("An error occurred while closing database connections ", ignore);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Create table utility method.
+ *
+ * @param sql
+ * SQL to be executed.
+ * @throws SQLException
+ * If an error occurred while creating the table.
+ */
+ public void executeSQL(String sql) throws SQLException {
+
+ Connection connection = getConnection();
+
+ PreparedStatement ps = connection.prepareStatement(sql);
+
+ try {
+ ps.executeUpdate();
+ connection.commit();
+ } finally {
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+
+ connection.close();
+
+ } catch (Exception ignore) {
+ log.error("An error occurred while closing database connections ", ignore);
+ }
+ }
+
+ }
+
+ private void loadDriver() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
+ Class.forName(driverName).newInstance();
+ }
+
+ /**
+ * Gets a new DBCP data source.
+ *
+ * @return A new data source.
+ */
+ public DataSource getDataSource() {
+ BasicDataSource ds = new BasicDataSource();
+ ds.setDriverClassName(this.driverName);
+ ds.setUsername(this.databaseUserName);
+ ds.setPassword(this.databasePassword);
+ ds.setUrl(this.jdbcUrl);
+
+ return ds;
+ }
+
+ /**
+ * Creates a new JDBC connections based on provided DBCP properties.
+ *
+ * @return A new DB connection.
+ * @throws SQLException
+ * If an error occurred while creating the connection.
+ */
+ public Connection getConnection() throws SQLException {
+ Connection connection = DriverManager.getConnection(jdbcUrl, properties);
+ connection.setAutoCommit(false);
+ return connection;
+ }
+
+ /**
+ * Utility method to close statements and connections.
+ *
+ * @param preparedStatement
+ * The prepared statement to close.
+ * @param connection
+ * The connection to close.
+ */
+ public static void cleanup(PreparedStatement preparedStatement, Connection connection) {
+ if (preparedStatement != null) {
+ try {
+ preparedStatement.close();
+ } catch (SQLException e) {
+ log.error("Error closing prepared statement.", e);
+ }
+ }
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ log.error("Error closing database connection.", e);
+ }
+ }
+ }
+
+ /**
+ * Utility method to close statements and connections.
+ *
+ * @param preparedStatement
+ * The prepared statement to close.
+ */
+ public static void cleanup(PreparedStatement preparedStatement) {
+ if (preparedStatement != null) {
+ try {
+ preparedStatement.close();
+ } catch (SQLException e) {
+ log.error("Error closing prepared statement.", e);
+ }
+ }
+ }
+
+ /**
+ * Utility method to close statements and connections.
+ *
+ * @param preparedStatement
+ * The prepared statement to close.
+ */
+ public static void cleanup(PreparedStatement preparedStatement, ResultSet resultSet) {
+ if (resultSet != null) {
+ try {
+ resultSet.close();
+ } catch (SQLException e) {
+ log.error("Error closing prepared statement.", e);
+ }
+ }
+
+ cleanup(preparedStatement);
+ }
+
+ /**
+ * Cleanup the connection.
+ * @param connection The connection to close.
+ */
+ public static void cleanup(Connection connection) {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ log.debug("Error closing connection.", e);
+ log.warn("Error closing connection.");
+ }
+ }
+ }
+
+ /**
+ * Mainly useful for tests.
+ *
+ * @param tableName
+ * The table name.
+ * @param connection
+ * The connection to be used.
+ */
+ public static void truncate(String tableName, Connection connection) throws SQLException {
+
+ String sql = "delete from " + tableName;
+
+ PreparedStatement preparedStatement = connection.prepareStatement(sql);
+ preparedStatement.executeUpdate();
+
+ connection.commit();
+
+ }
+
+ /**
+ * Creates a DBUtil object based on servlet context configurations.
+ *
+ * @return DBUtil object.
+ * @throws Exception
+ * If an error occurred while reading configurations or while creating database object.
+ */
+ public static DBUtil getCredentialStoreDBUtil() throws ApplicationSettingsException, IllegalAccessException,
+ ClassNotFoundException, InstantiationException {
+ String jdbcUrl = ServerSettings.getCredentialStoreDBURL();
+ String userName = ServerSettings.getCredentialStoreDBUser();
+ String password = ServerSettings.getCredentialStoreDBPassword();
+ String driverName = ServerSettings.getCredentialStoreDBDriver();
+
+ StringBuilder stringBuilder = new StringBuilder("Starting credential store, connecting to database - ");
+ stringBuilder.append(jdbcUrl).append(" DB user - ").append(userName).append(" driver name - ")
+ .append(driverName);
+
+ log.debug(stringBuilder.toString());
+
+ DBUtil dbUtil = new DBUtil(jdbcUrl, userName, password, driverName);
+ dbUtil.init();
+
+ return dbUtil;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/DatabaseTestCases.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/DatabaseTestCases.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/DatabaseTestCases.java
new file mode 100644
index 0000000..6ff528d
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/DatabaseTestCases.java
@@ -0,0 +1,123 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * An abstraction for database specific test classes. This will create a database and provides methods to execute SQLs.
+ */
+public class DatabaseTestCases {
+
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseTestCases.class);
+
+ protected static String hostAddress = "localhost";
+ protected static int port = 20000;
+ protected static String userName = "admin";
+ protected static String password = "admin";
+ protected static String driver = "org.apache.derby.jdbc.ClientDriver";
+
+ public static String getHostAddress() {
+ return hostAddress;
+ }
+
+ public static int getPort() {
+ return port;
+ }
+
+ public static String getUserName() {
+ return userName;
+ }
+
+ public static String getPassword() {
+ return password;
+ }
+
+ public static String getDriver() {
+ return driver;
+ }
+
+ public static String getJDBCUrl() {
+ return new StringBuilder().append("jdbc:derby://").append(getHostAddress()).append(":").append(getPort())
+ .append("/experiment_catalog;create=true;user=").append(getUserName()).append(";password=")
+ .append(getPassword()).toString();
+ }
+
+ public static void waitTillServerStarts() {
+ DBUtil dbUtil = null;
+
+ try {
+ dbUtil = new DBUtil(getJDBCUrl(), getUserName(), getPassword(), getDriver());
+ } catch (Exception e) {
+ // ignore
+ }
+
+ Connection connection = null;
+ try {
+ if (dbUtil != null) {
+ connection = dbUtil.getConnection();
+ }
+ } catch (Throwable e) {
+ // ignore
+ }
+
+ while (connection == null) {
+ try {
+ Thread.sleep(1000);
+ try {
+ if (dbUtil != null) {
+ connection = dbUtil.getConnection();
+ }
+ } catch (SQLException e) {
+ // ignore
+ }
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+
+ }
+
+ public static void executeSQL(String sql) throws Exception {
+ DBUtil dbUtil = new DBUtil(getJDBCUrl(), getUserName(), getPassword(), getDriver());
+ dbUtil.executeSQL(sql);
+ }
+
+ public DBUtil getDbUtil () throws Exception {
+ return new DBUtil(getJDBCUrl(), getUserName(), getPassword(), getDriver());
+
+ }
+
+ public Connection getConnection() throws Exception {
+
+ DBUtil dbUtil = getDbUtil ();
+ Connection connection = dbUtil.getConnection();
+ connection.setAutoCommit(true);
+ return connection;
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/DefaultKeyStorePasswordCallback.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/DefaultKeyStorePasswordCallback.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/DefaultKeyStorePasswordCallback.java
new file mode 100644
index 0000000..fc7792b
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/DefaultKeyStorePasswordCallback.java
@@ -0,0 +1,55 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+
+/**
+ * User: AmilaJ (amilaj@apache.org)
+ * Date: 12/29/13
+ * Time: 12:10 PM
+ */
+
+public class DefaultKeyStorePasswordCallback implements KeyStorePasswordCallback {
+
+ public DefaultKeyStorePasswordCallback(){
+
+ }
+
+ @Override
+ public char[] getStorePassword() {
+ try {
+ return ApplicationSettings.getCredentialStoreKeyStorePassword().toCharArray();
+ } catch (ApplicationSettingsException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public char[] getSecretKeyPassPhrase(String keyAlias) {
+ try {
+ return ApplicationSettings.getCredentialStoreKeyStorePassword().toCharArray();
+ } catch (ApplicationSettingsException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/DerbyUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/DerbyUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/DerbyUtil.java
new file mode 100644
index 0000000..4fb35b9
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/DerbyUtil.java
@@ -0,0 +1,114 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.InetAddress;
+import java.sql.DriverManager;
+import org.apache.derby.drda.NetworkServerControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.SQLException;
+
+/**
+ * This class includes methods to start stop Derby database. Mainly user for tests.
+ */
+public class DerbyUtil {
+
+ private static NetworkServerControl server;
+
+ private static final Logger logger = LoggerFactory.getLogger(DerbyUtil.class);
+
+ public static final String DERBY_SERVER_MODE_SYS_PROPERTY = "derby.drda.startNetworkServer";
+
+ /**
+ * Starts new derby server instance with given configurations.
+ *
+ * @param hostAddress
+ * The host address start the server.
+ * @param port
+ * The port number which server is starting.
+ * @param user
+ * JDBC user name.
+ * @param password
+ * JDBC password.
+ * @throws Exception
+ * If an error occurred while starting the server.
+ */
+ public static void startDerbyInServerMode(String hostAddress, int port, String user, String password)
+ throws Exception {
+ PrintWriter consoleWriter = null;
+
+ try {
+ System.setProperty(DERBY_SERVER_MODE_SYS_PROPERTY, "true");
+ server = new NetworkServerControl(InetAddress.getByName(hostAddress), port, user, password);
+ consoleWriter = new PrintWriter(System.out, true);
+ server.start(consoleWriter);
+
+ } catch (IOException e) {
+ logger.error("Unable to start Apache derby in the server mode! Check whether "
+ + "specified port is available", e);
+ throw e;
+ } catch (Exception e) {
+ logger.error("Unable to start Apache derby in the server mode! Check whether "
+ + "specified port is available", e);
+ throw e;
+ } finally {
+
+ if (consoleWriter != null) {
+ consoleWriter.close();
+ }
+
+ }
+
+ }
+
+ /**
+ * Starts derby server in embedded mode.
+ *
+ * @throws ClassNotFoundException
+ * If specified driver not found in the class path.
+ * @throws SQLException
+ * If an error occurred while creat
+ */
+ public static void startDerbyInEmbeddedMode() throws ClassNotFoundException, SQLException {
+ Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+ DriverManager.getConnection("jdbc:derby:memory:unit-testing-jpa;create=true").close();
+ }
+
+ /**
+ * Shuts down the server.
+ *
+ * @throws Exception
+ * If an error occurred while shutting down.
+ */
+ public static void stopDerbyServer() throws Exception {
+ try {
+ server.shutdown();
+ } catch (Exception e) {
+ logger.error("Error shutting down derby server.", e);
+ throw e;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/ExecutionMode.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ExecutionMode.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ExecutionMode.java
new file mode 100644
index 0000000..cf17ef0
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ExecutionMode.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+public enum ExecutionMode {
+ CLIENT,
+ SERVER,
+ UNKNOWN
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/IOUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/IOUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/IOUtil.java
new file mode 100644
index 0000000..9d1d7dd
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/IOUtil.java
@@ -0,0 +1,209 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.Writer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IOUtil {
+
+ private static final Logger logger = LoggerFactory.getLogger(IOUtil.class);
+
+ /**
+ * @param path
+ * @param content
+ * @throws IOException
+ */
+ public static void writeToFile(String content, String path) throws IOException {
+ logger.debug("Path:" + path + " Content:" + content);
+
+ FileWriter fw = new FileWriter(path);
+ writeToWriter(content, fw);
+ }
+
+ /**
+ * @param content
+ * @param file
+ * @throws IOException
+ */
+ public static void writeToFile(String content, File file) throws IOException {
+ FileWriter fw = new FileWriter(file);
+ writeToWriter(content, fw);
+ }
+
+ /**
+ * @param inputStream
+ * @param file
+ * @throws IOException
+ */
+ public static void writeToFile(InputStream inputStream, File file) throws IOException {
+ FileOutputStream outputStream = new FileOutputStream(file);
+ byte[] bytes = new byte[1024];
+ int len;
+ while ((len = inputStream.read(bytes)) != -1) {
+ outputStream.write(bytes, 0, len);
+ }
+ outputStream.close();
+ }
+
+ /**
+ * Writes a specified String to a specified Writer.
+ *
+ * @param content
+ * The content to write
+ * @param writer
+ * The specified Writer
+ *
+ * @throws IOException
+ */
+ public static void writeToWriter(String content, Writer writer) throws IOException {
+ writer.write(content);
+ writer.close();
+ }
+
+ /**
+ * Returns the content of a specified file as a String.
+ *
+ * @param path
+ * @return the content of a specified file as a String
+ * @throws IOException
+ */
+ public static String readFileToString(String path) throws IOException {
+ FileReader read = new FileReader(path);
+ return readToString(read);
+ }
+
+ /**
+ * Returns the content of a specified file as a String.
+ *
+ * @param file
+ * @return the content of a specified file as a String
+ * @throws IOException
+ */
+ public static String readFileToString(File file) throws IOException {
+ FileReader reader = new FileReader(file);
+ return readToString(reader);
+ }
+
+ /**
+ * Returns a String read from a specified InputStream.
+ *
+ * @param stream
+ * The specified InputStream
+ * @return The String read from the specified InputStream
+ * @throws IOException
+ */
+ public static String readToString(InputStream stream) throws IOException {
+ return readToString(new InputStreamReader(stream));
+ }
+
+ /**
+ * Returns a String read from a specified Reader.
+ *
+ * @param reader
+ * The specified Reader
+ * @return The String read from the specified Reader
+ * @throws IOException
+ */
+ public static String readToString(Reader reader) throws IOException {
+ char[] cbuf = new char[1024];
+ StringBuilder sbuf = new StringBuilder();
+ int len;
+ while ((len = reader.read(cbuf)) != -1) {
+ sbuf.append(cbuf, 0, len);
+ }
+ return sbuf.toString();
+ }
+
+ /**
+ * @param file
+ * @return The byte array
+ * @throws IOException
+ */
+ public static byte[] readToByteArray(File file) throws IOException {
+ return readToByteArray(new FileInputStream(file));
+ }
+
+ /**
+ * @param inputStream
+ * @return The byte array.
+ * @throws IOException
+ */
+ public static byte[] readToByteArray(InputStream inputStream) throws IOException {
+ byte[] buf = new byte[1024];
+ ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
+ int len;
+ while ((len = inputStream.read(buf)) != -1) {
+ byteArrayStream.write(buf, 0, len);
+ }
+ return byteArrayStream.toByteArray();
+ }
+
+ /**
+ * @param path
+ * @return <code>true</code> if and only if the file or directory is successfully deleted; <code>false</code>
+ * otherwise
+ */
+ public static boolean deleteDirectory(File path) {
+ if (path.exists()) {
+ File[] files = path.listFiles();
+ for (File file : files) {
+ if (file.isDirectory()) {
+ deleteDirectory(file);
+ } else {
+ file.delete();
+ }
+ }
+ }
+ return path.delete();
+ }
+
+ /**
+ * Gets the extension of a specified file.
+ *
+ * @param file
+ * the specified file.
+ * @return the extension of the file in lower case if there is an extension; null otherwise
+ */
+ public static String getExtension(File file) {
+ String ext = null;
+ String name = file.getName();
+
+ int index = name.lastIndexOf('.');
+ if (index > 0 && index < name.length() - 1) {
+ ext = name.substring(index + 1).toLowerCase();
+ }
+ return ext;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/IServer.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/IServer.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/IServer.java
new file mode 100644
index 0000000..867eb45
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/IServer.java
@@ -0,0 +1,51 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public interface IServer {
+ public enum ServerStatus{
+ STOPING,
+ STOPPED,
+ STARTING,
+ STARTED,
+ FAILED;
+ public void updateTime(){
+ now=Calendar.getInstance().getTime();
+ }
+ private Date now;
+ public Date getTime(){
+ return now;
+ }
+ }
+ public String getName();
+ public String getVersion();
+ public void start() throws Exception;
+ public void stop() throws Exception;
+ public void restart() throws Exception;
+ public void configure() throws Exception;
+ public ServerStatus getStatus() throws Exception;
+// public void waitForServerToStart() throws Exception;
+// public void waitForServerToStop() throws Exception;
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/JSONUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/JSONUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/JSONUtil.java
new file mode 100644
index 0000000..222e5a2
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/JSONUtil.java
@@ -0,0 +1,158 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.stream.JsonReader;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Map;
+import java.util.Set;
+
+public class JSONUtil {
+
+
+ public static void saveJSON(JsonElement jsonElement, File file) throws IOException {
+ IOUtil.writeToFile(jsonElementToString(jsonElement), file);
+ }
+
+ public static JsonObject stringToJSONObject(String workflowString) {
+ JsonParser parser = new JsonParser();
+ return (JsonObject) parser.parse(workflowString);
+ }
+
+ public static JsonObject loadJSON(File file) throws IOException {
+ return loadJSON(new FileReader(file));
+ }
+
+ public static JsonObject loadJSON(Reader reader) throws IOException {
+ JsonParser parser = new JsonParser();
+ JsonElement jsonElement = parser.parse(reader);
+ if (jsonElement instanceof JsonObject) {
+ return (JsonObject) jsonElement;
+ } else {
+ throw new RuntimeException("Error while loading Json from file");
+ }
+
+ }
+
+ public static String jsonElementToString(JsonElement jsonElement) {
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ return gson.toJson(jsonElement);
+ }
+
+ public static boolean isEqual(JsonObject originalJsonObject, JsonObject newJsonObject) {
+ // TODO - Implement this method
+ if (originalJsonObject == null && newJsonObject == null) {
+ return true;
+ }else if (originalJsonObject == null || newJsonObject == null) {
+ return false;
+ } else {
+ // check the number of childs
+ Set<Map.Entry<String , JsonElement>> entrySetOfOriginalJson = originalJsonObject.entrySet();
+ Set<Map.Entry<String , JsonElement>> entrySetOfNewJson = newJsonObject.entrySet();
+ if (entrySetOfOriginalJson.size() != entrySetOfNewJson.size()) {
+ return false;
+ }
+
+ for (Map.Entry<String, JsonElement> keyString : entrySetOfOriginalJson) {
+ JsonElement valueOrig = keyString.getValue();
+ JsonElement valueNew = newJsonObject.get(keyString.getKey());
+ if (valueOrig instanceof JsonObject && valueNew instanceof JsonObject &&
+ !isEqual((JsonObject) valueOrig, (JsonObject) valueNew)) {
+ return false;
+ }else if (valueOrig instanceof JsonArray && valueNew instanceof JsonArray &&
+ !isEqual((JsonArray) valueOrig, (JsonArray) valueNew)) {
+ return false;
+ }else if (valueOrig instanceof JsonPrimitive && valueNew instanceof JsonPrimitive &&
+ !isEqual((JsonPrimitive) valueOrig, (JsonPrimitive) valueNew)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ private static boolean isEqual(JsonArray arrayOriginal, JsonArray arrayNew) {
+ if (arrayOriginal == null && arrayNew == null) {
+ return true;
+ }else if (arrayOriginal == null || arrayNew == null) {
+ return false;
+ }else {
+ // check the number of element
+ if (arrayOriginal.size() != arrayNew.size()) {
+ return false;
+ }else if (arrayOriginal.size() == 0) {
+ return true;
+ } else {
+ for (int i = 0; i < arrayOriginal.size(); i++) {
+ JsonElement valueOrig = arrayOriginal.get(i);
+ JsonElement valueNew = arrayNew.get(i);
+ if (valueOrig instanceof JsonObject && valueNew instanceof JsonObject) {
+ if (!isEqual((JsonObject) valueOrig, (JsonObject) valueNew)) {
+ return false;
+ }
+ }else if (valueOrig instanceof JsonPrimitive && valueNew instanceof JsonPrimitive) {
+ if (!isEqual((JsonPrimitive) valueOrig, (JsonPrimitive) valueNew)) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ private static boolean isEqual(JsonPrimitive primitiveOrig, JsonPrimitive primitiveNew) {
+ if (primitiveOrig == null && primitiveNew == null) {
+ return true;
+ }else if (primitiveOrig == null || primitiveNew == null) {
+ return false;
+ } else {
+ if (primitiveOrig.isString() && primitiveNew.isString()){
+ if(!primitiveOrig.getAsString().equals(primitiveNew.getAsString())) {
+ return false;
+ }
+ }else if (primitiveOrig.isBoolean() && primitiveNew.isBoolean()) {
+ if ((Boolean.valueOf(primitiveOrig.getAsBoolean()).compareTo(primitiveNew.getAsBoolean()) != 0)) {
+ return false;
+ }
+ }else if (primitiveOrig.isNumber() && primitiveNew.isNumber() ) {
+ if (new Double(primitiveOrig.getAsDouble()).compareTo(primitiveNew.getAsDouble()) != 0) {
+ return false;
+ }
+ }else {
+ return primitiveOrig.isJsonNull() && primitiveNew.isJsonNull();
+ }
+ }
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/KeyStorePasswordCallback.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/KeyStorePasswordCallback.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/KeyStorePasswordCallback.java
new file mode 100644
index 0000000..bafaff3
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/KeyStorePasswordCallback.java
@@ -0,0 +1,50 @@
+package org.apache.airavata.common.utils;/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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.
+ *
+ */
+
+/**
+ * User: AmilaJ (amilaj@apache.org)
+ * Date: 10/11/13
+ * Time: 11:30 AM
+ */
+
+/**
+ * An interface to get keystore password in a form of a callback.
+ */
+public interface KeyStorePasswordCallback {
+
+ /**
+ * Caller should implement the interface. Should return the password for
+ * the keystore. This should return the keystore password. i.e. password used to open the keystore.
+ * Instead of the actual file.
+ * @return The password to open the keystore.
+ */
+ char[] getStorePassword() throws RuntimeException;
+
+ /**
+ * Caller should implement the interface. Should return the pass phrase for
+ * the secret key.
+ * Instead of the actual file.
+ * @param keyAlias The alias of the key
+ * @return The pass phrase for the secret key.
+ */
+ char[] getSecretKeyPassPhrase(String keyAlias);
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/MonitorPublisher.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/MonitorPublisher.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/MonitorPublisher.java
new file mode 100644
index 0000000..7f64e86
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/MonitorPublisher.java
@@ -0,0 +1,47 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import com.google.common.eventbus.EventBus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MonitorPublisher{
+ private final static Logger logger = LoggerFactory.getLogger(MonitorPublisher.class);
+ private EventBus eventBus;
+
+ public MonitorPublisher(EventBus eventBus) {
+ this.eventBus = eventBus;
+ }
+
+ public void registerListener(Object listener) {
+ eventBus.register(listener);
+ }
+
+ public void unregisterListener(Object listener) {
+ eventBus.unregister(listener);
+ }
+
+ public void publish(Object o) {
+ eventBus.post(o);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/NameValidator.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/NameValidator.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/NameValidator.java
new file mode 100644
index 0000000..98530cf
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/NameValidator.java
@@ -0,0 +1,70 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class NameValidator {
+
+ /**
+ * @param name
+ * @return Is it valid name?
+ */
+ public static boolean validate(String name) {
+ // Set the name pattern string
+ Pattern p = Pattern.compile("([a-zA-Z]){1,}([0-9]|_|\\.|[a-zA-Z]){0,}$");
+
+ // Match the given string with the pattern
+ Matcher m = p.matcher(name);
+
+ // Check whether match is found
+ boolean matchFound = m.matches();
+
+ return matchFound;
+ }
+
+ /**
+ * @param args
+ * @Description some quick tests
+ */
+ public static void main(String[] args) {
+ System.out.println(validate("abc90_90abc")); // true
+
+ System.out.println(validate("abc_abc_123")); // true
+
+ System.out.println(validate("abc_abc_")); // true
+
+ System.out.println(validate("abc_abc")); // true
+
+ System.out.println(validate("abc.abc")); // true
+
+ System.out.println(validate("9abc_abc")); // false, name cannot start with number
+
+ System.out.println(validate("_abc_abc")); // false, name cannot start with "_"
+
+ System.out.println(validate("\\abc_abc")); // false, name cannot start with "\"
+
+ System.out.println(validate("abc\\_abc")); // false, name cannot contain "\"
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/Pair.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/Pair.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/Pair.java
new file mode 100644
index 0000000..ee24360
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/Pair.java
@@ -0,0 +1,79 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License 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 org.apache.airavata.common.utils;
+
+public class Pair<L, R> {
+
+ private L left;
+
+ private R right;
+
+ /**
+ * Constructs a Pair.
+ *
+ * @param left
+ * @param right
+ */
+ public Pair(L left, R right) {
+ this.left = left;
+ this.right = right;
+ }
+
+ /**
+ * Returns the left.
+ *
+ * @return The left
+ */
+ public L getLeft() {
+ return this.left;
+ }
+
+ /**
+ * Sets left.
+ *
+ * @param left
+ * The left to set.
+ */
+ public void setLeft(L left) {
+ this.left = left;
+ }
+
+ /**
+ * Returns the right.
+ *
+ * @return The right
+ */
+ public R getRight() {
+ return this.right;
+ }
+
+ /**
+ * Sets right.
+ *
+ * @param right
+ * The right to set.
+ */
+ public void setRight(R right) {
+ this.right = right;
+ }
+
+}
\ No newline at end of file