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:47 UTC
[6/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/SecurityUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/SecurityUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/SecurityUtil.java
new file mode 100644
index 0000000..845a040
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/SecurityUtil.java
@@ -0,0 +1,180 @@
+/*
+ *
+ * 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 javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import java.io.*;
+import java.security.*;
+import java.security.cert.CertificateException;
+
+/**
+ * Class which includes security utilities.
+ */
+public class SecurityUtil {
+
+ public static final String PASSWORD_HASH_METHOD_PLAINTEXT = "PLAINTEXT";
+
+ public static final String CHARSET_ENCODING = "UTF-8";
+ public static final String ENCRYPTION_ALGORITHM = "AES";
+ public static final String PADDING_MECHANISM = "AES/CBC/PKCS5Padding";
+
+ private static final Logger logger = LoggerFactory.getLogger(SecurityUtil.class);
+
+ /**
+ * Creates a hash of given string with the given hash algorithm.
+ *
+ * @param stringToDigest
+ * The string to digest.
+ * @param digestingAlgorithm
+ * Hash algorithm.
+ * @return The digested string.
+ * @throws NoSuchAlgorithmException
+ * If given hash algorithm doesnt exists.
+ */
+ public static String digestString(String stringToDigest, String digestingAlgorithm) throws NoSuchAlgorithmException {
+
+ if (digestingAlgorithm == null || digestingAlgorithm.equals(PASSWORD_HASH_METHOD_PLAINTEXT)) {
+ return stringToDigest;
+ }
+
+ MessageDigest messageDigest = MessageDigest.getInstance(digestingAlgorithm);
+ try {
+ return new String(messageDigest.digest(stringToDigest.getBytes("UTF-8")));
+ } catch (UnsupportedEncodingException e) {
+ logger.error("Error encoding password string when creating digest", e);
+ throw new RuntimeException("Error encoding password string when creating digest", e);
+ }
+ }
+
+ /**
+ * Sets the truststore for application. Useful when communicating over HTTPS.
+ *
+ * @param trustStoreFilePath
+ * Where trust store is located.
+ * @param trustStorePassword
+ * The trust store password.
+ */
+ public static void setTrustStoreParameters(String trustStoreFilePath, String trustStorePassword) {
+
+ if (System.getProperty("javax.net.ssl.trustStrore") == null) {
+ logger.info("Setting Java trust store to " + trustStoreFilePath);
+ System.setProperty("javax.net.ssl.trustStrore", trustStoreFilePath);
+ }
+
+ if (System.getProperty("javax.net.ssl.trustStorePassword") == null) {
+ System.setProperty("javax.net.ssl.trustStorePassword", trustStoreFilePath);
+ }
+
+ }
+
+ public static byte[] encryptString(String keyStorePath, String keyAlias,
+ KeyStorePasswordCallback passwordCallback, String value)
+ throws GeneralSecurityException, IOException {
+ return encrypt(keyStorePath, keyAlias, passwordCallback, value.getBytes(CHARSET_ENCODING));
+ }
+
+ public static byte[] encrypt(String keyStorePath, String keyAlias,
+ KeyStorePasswordCallback passwordCallback, byte[] value)
+ throws GeneralSecurityException, IOException {
+
+ Key secretKey = getSymmetricKey(keyStorePath, keyAlias, passwordCallback);
+
+ Cipher cipher = Cipher.getInstance(PADDING_MECHANISM);
+ cipher.init(Cipher.ENCRYPT_MODE, secretKey,
+ new IvParameterSpec(new byte[16]));
+ return cipher.doFinal(value);
+ }
+
+ private static Key getSymmetricKey(String keyStorePath, String keyAlias,
+ KeyStorePasswordCallback passwordCallback)
+ throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException,
+ UnrecoverableKeyException {
+
+ KeyStore ks = SecurityUtil.loadKeyStore(keyStorePath, "jceks", passwordCallback);
+
+ if (ks == null) {
+ throw new IOException("Unable to load Java keystore " + keyStorePath);
+ }
+
+ return ks.getKey(keyAlias, passwordCallback.getSecretKeyPassPhrase(keyAlias));
+
+ }
+
+ public static byte[] decrypt(String keyStorePath, String keyAlias,
+ KeyStorePasswordCallback passwordCallback, byte[] encrypted)
+ throws GeneralSecurityException, IOException {
+
+ Key secretKey = getSymmetricKey(keyStorePath, keyAlias, passwordCallback);
+
+ Cipher cipher = Cipher.getInstance(PADDING_MECHANISM);
+ cipher.init(Cipher.DECRYPT_MODE, secretKey,
+ new IvParameterSpec(new byte[16]));
+
+ return cipher.doFinal(encrypted);
+ }
+
+ public static String decryptString(String keyStorePath, String keyAlias,
+ KeyStorePasswordCallback passwordCallback, byte[] encrypted)
+ throws GeneralSecurityException, IOException {
+
+ byte[] decrypted = decrypt(keyStorePath, keyAlias, passwordCallback, encrypted);
+ return new String(decrypted, CHARSET_ENCODING);
+ }
+
+ public static KeyStore loadKeyStore(String keyStoreFilePath, String keyStoreType,
+ KeyStorePasswordCallback passwordCallback)
+ throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
+
+ java.io.FileInputStream fis = null;
+ try {
+ fis = new java.io.FileInputStream(keyStoreFilePath);
+ return loadKeyStore(fis, keyStoreType, passwordCallback);
+ } finally {
+ if (fis != null) {
+ fis.close();
+ }
+ }
+ }
+
+ public static KeyStore loadKeyStore(InputStream inputStream, String keyStoreType,
+ KeyStorePasswordCallback passwordCallback)
+ throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
+
+ if (keyStoreType == null) {
+ keyStoreType = KeyStore.getDefaultType();
+ }
+
+ KeyStore ks = KeyStore.getInstance(keyStoreType);
+ ks.load(inputStream, passwordCallback.getStorePassword());
+
+ return ks;
+ }
+
+
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
new file mode 100644
index 0000000..8370e40
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
@@ -0,0 +1,270 @@
+/*
+ *
+ * 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.net.InetAddress;
+import java.net.UnknownHostException;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+
+public class ServerSettings extends ApplicationSettings {
+
+ private static final String DEFAULT_USER = "default.registry.user";
+ private static final String DEFAULT_USER_PASSWORD = "default.registry.password";
+ private static final String DEFAULT_USER_GATEWAY = "default.registry.gateway";
+
+ private static final String SERVER_CONTEXT_ROOT = "server.context-root";
+ public static final String EMBEDDED_ZK = "embedded.zk";
+ public static final String IP = "ip";
+
+ private static final String CREDENTIAL_STORE_DB_URL = "credential.store.jdbc.url";
+ private static final String CREDENTIAL_STORE_DB_USER = "credential.store.jdbc.user";
+ private static final String CREDENTIAL_STORE_DB_PASSWORD = "credential.store.jdbc.password";
+ private static final String CREDENTIAL_STORE_DB_DRIVER = "credential.store.jdbc.driver";
+
+ private static final String REGISTRY_DB_URL = "registry.jdbc.url";
+ private static final String REGISTRY_DB_USER = "registry.jdbc.user";
+ private static final String REGISTRY_DB_PASSWORD = "registry.jdbc.password";
+ private static final String REGISTRY_DB_DRIVER = "registry.jdbc.driver";
+ private static final String ENABLE_HTTPS = "enable.https";
+ private static final String HOST_SCHEDULER = "host.scheduler";
+ private static final String MY_PROXY_SERVER = "myproxy.server";
+ private static final String MY_PROXY_USER = "myproxy.user";
+ private static final String MY_PROXY_PASSWORD = "myproxy.password";
+ private static final String MY_PROXY_LIFETIME = "myproxy.life";
+ private static final String STATUS_PUBLISHER = "status.publisher";
+ private static final String TASK_LAUNCH_PUBLISHER = "task.launch.publisher";
+ private static final String ACTIVITY_LISTENERS = "activity.listeners";
+ public static final String JOB_NOTIFICATION_ENABLE = "job.notification.enable";
+ public static final String JOB_NOTIFICATION_EMAILIDS = "job.notification.emailids";
+ public static final String JOB_NOTIFICATION_FLAGS = "job.notification.flags";
+ public static final String GFAC_PASSIVE = "gfac.passive"; // by default this is desabled
+ public static final String LAUNCH_QUEUE_NAME = "launch.queue.name";
+ public static final String CANCEL_QUEUE_NAME = "cancel.queue.name";
+
+
+ // Workflow Enactment Service component configuration.
+ private static final String ENACTMENT_THREAD_POOL_SIZE = "enactment.thread.pool.size";
+ private static final int DEFAULT_ENACTMENT_THREAD_POOL_SIZE = 10;
+ private static final String WORKFLOW_PARSER = "workflow.parser";
+
+ // email based monitoring configurations
+ private static final String EMAIL_BASED_MONITORING_PERIOD = "email.based.monitoring.period";
+ private static final String EMAIL_BASED_MONITOR_HOST = "email.based.monitor.host";
+ private static final String EMAIL_BASED_MONITOR_ADDRESS = "email.based.monitor.address";
+ private static final String EMAIL_BASED_MONITOR_PASSWORD = "email.based.monitor.password";
+ private static final String EMAIL_BASED_MONITOR_FOLDER_NAME = "email.based.monitor.folder.name";
+ private static final String EMAIL_BASED_MONITOR_STORE_PROTOCOL = "email.based.monitor.store.protocol";
+ private static final String ENABLE_EMAIL_BASED_MONITORING = "enable.email.based.monitoring";
+
+ private static boolean stopAllThreads = false;
+ private static boolean emailBaseNotificationEnable;
+
+ public static String getDefaultUser() throws ApplicationSettingsException {
+ return getSetting(DEFAULT_USER);
+ }
+
+ public static String getLaunchQueueName() {
+ return getSetting(LAUNCH_QUEUE_NAME, "launch.queue");
+ }
+
+
+ public static String getCancelQueueName() {
+ return getSetting(CANCEL_QUEUE_NAME, "cancel.queue");
+ }
+
+ public static String getDefaultUserPassword() throws ApplicationSettingsException {
+ return getSetting(DEFAULT_USER_PASSWORD);
+ }
+
+ public static String getDefaultUserGateway() throws ApplicationSettingsException {
+ return getSetting(DEFAULT_USER_GATEWAY);
+ }
+
+ public static String getServerContextRoot() {
+ return getSetting(SERVER_CONTEXT_ROOT, "axis2");
+ }
+
+ public static String getCredentialStoreDBUser() throws ApplicationSettingsException {
+ try {
+ return getSetting(CREDENTIAL_STORE_DB_USER);
+ } catch (ApplicationSettingsException e) {
+ return getSetting(REGISTRY_DB_USER);
+ }
+ }
+
+ public static String getCredentialStoreDBPassword() throws ApplicationSettingsException {
+ try {
+ return getSetting(CREDENTIAL_STORE_DB_PASSWORD);
+ } catch (ApplicationSettingsException e) {
+ return getSetting(REGISTRY_DB_PASSWORD);
+ }
+ }
+
+ public static String getCredentialStoreDBDriver() throws ApplicationSettingsException {
+ try {
+ return getSetting(CREDENTIAL_STORE_DB_DRIVER);
+ } catch (ApplicationSettingsException e) {
+ return getSetting(REGISTRY_DB_DRIVER);
+ }
+ }
+
+ public static String getCredentialStoreDBURL() throws ApplicationSettingsException {
+ try {
+ return getSetting(CREDENTIAL_STORE_DB_URL);
+ } catch (ApplicationSettingsException e) {
+ return getSetting(REGISTRY_DB_URL);
+ }
+
+ }
+
+ public static boolean isEnableHttps() {
+ try {
+ return Boolean.parseBoolean(getSetting(ENABLE_HTTPS));
+ } catch (ApplicationSettingsException e) {
+ return false;
+ }
+ }
+
+
+ public static String getHostScheduler() throws ApplicationSettingsException {
+ return getSetting(HOST_SCHEDULER);
+ }
+
+ public static boolean isStopAllThreads() {
+ return stopAllThreads;
+ }
+
+ public static void setStopAllThreads(boolean stopAllThreads) {
+ ServerSettings.stopAllThreads = stopAllThreads;
+ }
+
+ public static String getMyProxyServer() throws ApplicationSettingsException {
+ return getSetting(MY_PROXY_SERVER);
+ }
+
+ public static String getMyProxyUser() throws ApplicationSettingsException {
+ return getSetting(MY_PROXY_USER);
+ }
+
+ public static String getMyProxyPassword() throws ApplicationSettingsException {
+ return getSetting(MY_PROXY_PASSWORD);
+ }
+
+ public static int getMyProxyLifetime() throws ApplicationSettingsException {
+ return Integer.parseInt(getSetting(MY_PROXY_LIFETIME));
+ }
+
+ public static String[] getActivityListeners() throws ApplicationSettingsException {
+ return getSetting(ACTIVITY_LISTENERS).split(",");
+ }
+
+ public static String getStatusPublisher() throws ApplicationSettingsException {
+ return getSetting(STATUS_PUBLISHER);
+ }
+
+ public static String getTaskLaunchPublisher() throws ApplicationSettingsException {
+ return getSetting(TASK_LAUNCH_PUBLISHER);
+ }
+
+ public static boolean isGFacPassiveMode()throws ApplicationSettingsException {
+ String setting = getSetting(GFAC_PASSIVE);
+ return Boolean.parseBoolean(setting);
+ }
+
+ public static boolean isEmbeddedZK() {
+ return Boolean.parseBoolean(getSetting(EMBEDDED_ZK, "true"));
+ }
+
+ public static String getIp() {
+ try {
+ return getSetting(IP);
+ } catch (ApplicationSettingsException e) {
+ try {
+ return InetAddress.getLocalHost().getHostAddress();
+ } catch (UnknownHostException e1) {
+ e1.printStackTrace();
+ }
+ }
+ return null;
+ }
+
+ public static int getEnactmentThreadPoolSize() {
+ String threadPoolSize = null;
+ try {
+ threadPoolSize = getSetting(ENACTMENT_THREAD_POOL_SIZE);
+ } catch (ApplicationSettingsException e) {
+ return DEFAULT_ENACTMENT_THREAD_POOL_SIZE;
+ }
+ return Integer.valueOf(threadPoolSize);
+ }
+
+ public static String getWorkflowParser() throws ApplicationSettingsException {
+ return getSetting(WORKFLOW_PARSER);
+ }
+
+
+ public static int getEmailMonitorPeriod() throws ApplicationSettingsException {
+ return Integer.valueOf(getSetting(EMAIL_BASED_MONITORING_PERIOD, "100000"));
+
+ }
+
+ public static String getEmailBasedMonitorHost() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_HOST);
+ }
+
+ public static String getEmailBasedMonitorAddress() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_ADDRESS);
+ }
+
+ public static String getEmailBasedMonitorPassword() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_PASSWORD);
+ }
+
+ public static String getEmailBasedMonitorFolderName() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_FOLDER_NAME);
+ }
+
+ public static String getEmailBasedMonitorStoreProtocol() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_STORE_PROTOCOL);
+ }
+
+ public static boolean isEmailBasedNotificationEnable() {
+ return Boolean.valueOf(getSetting(ENABLE_EMAIL_BASED_MONITORING, "false"));
+ }
+
+ public static boolean isAPISecured() throws ApplicationSettingsException {
+ return Boolean.valueOf(getSetting(Constants.IS_API_SECURED));
+ }
+
+ public static String getRemoteOauthServerUrl() throws ApplicationSettingsException {
+ return getSetting(Constants.REMOTE_OAUTH_SERVER_URL);
+ }
+
+ public static String getAdminUsername() throws ApplicationSettingsException {
+ return getSetting(Constants.ADMIN_USERNAME);
+ }
+
+ public static String getAdminPassword() throws ApplicationSettingsException {
+ return getSetting(Constants.ADMIN_PASSWORD);
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/ServiceUtils.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ServiceUtils.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServiceUtils.java
new file mode 100644
index 0000000..0c54053
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServiceUtils.java
@@ -0,0 +1,93 @@
+///*
+// *
+// * 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.net.SocketException;
+//
+//import org.apache.airavata.common.exception.ApplicationSettingsException;
+//import org.apache.axis2.context.ConfigurationContext;
+//import org.apache.axis2.description.TransportInDescription;
+//import org.apache.axis2.util.Utils;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//
+//public class ServiceUtils {
+// private static final Logger log = LoggerFactory.getLogger(ServiceUtils.class);
+//// private static final String REPOSITORY_PROPERTIES = "airavata-server.properties";
+// public static final String IP = "ip";
+// public static final String PORT = "port";
+//
+// public static String generateServiceURLFromConfigurationContext(
+// ConfigurationContext context, String serviceName) throws IOException, ApplicationSettingsException {
+//// URL url = ServiceUtils.class.getClassLoader()
+//// .getResource(REPOSITORY_PROPERTIES);
+// String localAddress = null;
+// String port = null;
+//// Properties properties = new Properties();
+// try {
+// localAddress = ServerSettings.getSetting(IP);
+// } catch (ApplicationSettingsException e) {
+// //we will ignore this exception since the properties file will not contain the values
+// //when it is ok to retrieve them from the axis2 context
+// }
+// if(localAddress == null){
+// try {
+// localAddress = Utils.getIpAddress(context
+// .getAxisConfiguration());
+// } catch (SocketException e) {
+// e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+// }
+// }
+// String protocol="http";
+// if(ServerSettings.isEnableHttps()){
+// protocol="https";
+// }
+//
+// try {
+// port = ServerSettings.getTomcatPort(protocol);
+// } catch (ApplicationSettingsException e) {
+// //we will ignore this exception since the properties file will not contain the values
+// //when it is ok to retrieve them from the axis2 context
+// }
+// if (port == null) {
+// TransportInDescription transportInDescription = context
+// .getAxisConfiguration().getTransportsIn()
+// .get(protocol);
+// if (transportInDescription != null
+// && transportInDescription.getParameter(PORT) != null) {
+// port = (String) transportInDescription
+// .getParameter(PORT).getValue();
+// }
+// }
+// localAddress = protocol+"://" + localAddress + ":" + port;
+// localAddress = localAddress + "/"
+// //We are not using axis2 config context to get the context root because it is invalid
+// //+ context.getContextRoot() + "/"
+// //FIXME: the context root will be correct after updating the web.xml
+// + ServerSettings.getServerContextRoot() + "/"
+// + context.getServicePath() + "/"
+// + serviceName;
+// log.debug("Service Address Configured:" + localAddress);
+// return localAddress;
+// }
+//}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/StringUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/StringUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/StringUtil.java
new file mode 100644
index 0000000..3ce5cda
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/StringUtil.java
@@ -0,0 +1,480 @@
+/*
+ *
+ * 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.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+
+public class StringUtil {
+ public static final String DELIMETER=",";
+ public static final String QUOTE="\"";
+
+ public static Map<Integer, String> getContainedParameters(String s) {
+ Map<Integer,String> parameterMap=new HashMap<Integer,String>();
+ int i=0;
+ for(i=0;i<s.length();i++){
+ if (s.charAt(i)=='$' && (i+1)<s.length() && s.charAt(i+1)=='{'){
+ int i2=s.indexOf('{', i+2);
+ int e=s.indexOf('}', i+2);
+ if (e!=-1){
+ if (i2==-1 || e<i2){
+ parameterMap.put(i, s.substring(i,e+1));
+ i=e;
+ }
+ }
+ }
+ }
+ return parameterMap;
+ }
+
+ // Merits for the following function should go to
+ // http://blog.houen.net/java-get-url-from-string/
+ public static List<String> getURLS(String text) {
+ List<String> links = new ArrayList<String>();
+ String regex = "\\(?\\b((http|https|ftp)://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
+ Pattern p = Pattern.compile(regex);
+ Matcher m = p.matcher(text);
+ while (m.find()) {
+ String urlStr = m.group();
+ if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
+ urlStr = urlStr.substring(1, urlStr.length() - 1);
+ }
+ if (!links.contains(urlStr)) {
+ links.add(urlStr);
+ }
+ }
+ return links;
+ }
+
+ public static String createHTMLUrlTaggedString2(String value, List<String> pullLinks) {
+ for (String url : pullLinks) {
+ String hyperlinkString="<a href='"+url+"'>"+url+"</a>";
+ value=value.replaceAll(Pattern.quote(url), hyperlinkString);
+ }
+ return value;
+ }
+ public static String createHTMLUrlTaggedString(String value) {
+ String urledString = "";
+ int lastIndex=0,index=0;
+ while(index!=-1){
+ index=value.toLowerCase().indexOf("://",lastIndex);
+ if (index!=-1){
+ int beginIndex=value.lastIndexOf(" ",index);
+ urledString+=value.substring(lastIndex,beginIndex+1);
+ int endIndex=value.indexOf(" ",index);
+ if (beginIndex==-1){
+ beginIndex=0;
+ }else{
+ beginIndex++;
+ }
+ if (endIndex==-1){
+ endIndex=value.length();
+ }
+ String url=value.substring(beginIndex, endIndex);
+ urledString+="<a href='"+url+"'>"+url+"</a>";
+ lastIndex=endIndex;
+ }
+ }
+ urledString+=value.substring(lastIndex, value.length());
+ return urledString;
+ }
+
+ private static boolean isQuoted(String s, String delimiter){
+ //Check if we need quotes
+ if (s.contains(delimiter)){
+ //Check if its already quoted
+ s=s.replaceAll("\"\"", "");
+ return (s.substring(0,1).equals(QUOTE) && s.subSequence(s.length()-1, s.length()).equals(QUOTE));
+ }
+ //no delimiters present, so already in proper form
+ return true;
+ }
+
+ private static boolean isQuoted(String s){
+ return isQuoted(s, DELIMETER);
+ }
+
+ /**
+ * Create a delimiter separated string out of a list
+ * @param list
+ * @return
+ */
+ public static String createDelimiteredString(String[] list) {
+ return createDelimiteredString(list, DELIMETER);
+ }
+
+
+ /**
+ * Create a delimiter separated string out of a list
+ * @param list
+ * @return
+ */
+ public static String createDelimiteredString(String[] list,String delimiter){
+ String s=null;
+ for (String ss : list) {
+ ss=quoteString(ss, delimiter);
+ if (s==null){
+ s=ss;
+ }else{
+ s+=delimiter +ss;
+ }
+ }
+ return s;
+ }
+
+ /**
+ * Return a proper quoted string if the string contains the delimiter character
+ * @param s
+ * @return
+ */
+ public static String quoteString(String s) {
+ return quoteString(s, DELIMETER);
+ }
+
+
+ /**
+ * Return a proper quoted string if the string contains the delimiter character
+ * @param s
+ * @return
+ */
+ public static String quoteString(String s,String delimiter){
+ if (isQuoted(s,delimiter)){
+ return s;
+ }else{
+ return QUOTE+s.replaceAll(QUOTE, QUOTE+QUOTE)+QUOTE;
+ }
+ }
+
+ /**
+ * Parse the delimitered string and return elements as a string array
+ * @param s
+ * @return
+ */
+ public static String[] getElementsFromString(String s, String delimeter, String quote) {
+ List<String> list=new ArrayList<String>();
+ String currentItem="";
+ String previousChar=null;
+ boolean insideQuote=false;
+ for(int i=0;i<s.length();i++){
+ String c=s.substring(i,i+1);
+ if (c.equals(delimeter)){
+ //if not inside a quoted string ignore the delimiter character
+ if (insideQuote) {
+ currentItem+=c;
+ }else{
+ list.add(currentItem);
+ currentItem = "";
+ }
+ }else if (c.equals(quote)){
+ if (quote.equals(previousChar)){
+ //which means previousChar was an escape character, not a quote for the string
+ currentItem+=quote;
+ if (insideQuote){
+ //mistakenly thought previous char was opening quote char, thus need to make this false
+ insideQuote=false;
+ }else{
+ //mistakenly thought previous char was closing quote char, thus need to make this true
+ insideQuote=true;
+ }
+ } else{
+ if (insideQuote){
+ //quote ended
+ insideQuote=false;
+ }else{
+ //quote beginning
+ insideQuote=true;
+ }
+ }
+ }else{
+ currentItem+=c;
+ }
+ previousChar=c;
+ }
+ list.add(currentItem);
+ return list.toArray(new String[]{});
+ }
+
+ /**
+ * Parse the delimitered string and return elements as a string array
+ * @param s
+ * @return
+ */
+ public static String[] getElementsFromString(String s) {
+ return getElementsFromString(s, DELIMETER, QUOTE);
+ }
+
+ /**
+ * Converts object to String without worrying about null check.
+ *
+ * @param object
+ * @return The object.toString if object is not null; "" otherwise.
+ */
+ public static String toString(Object object) {
+ if (object == null) {
+ return "";
+ } else {
+ return object.toString();
+ }
+ }
+
+ /**
+ * Trims a specified string, and makes it null if the result is empty string.
+ *
+ * @param string
+ * @return the string processed
+ */
+ public static String trimAndNullify(String string) {
+ if (string != null) {
+ string = string.trim();
+ if (string.equals("")) {
+ string = null;
+ }
+ }
+ return string;
+ }
+
+ /**
+ * @param oldName
+ * @return Trimmed String
+ */
+ public static String trimSpaceInString(String oldName) {
+ if (oldName == null) {
+ return "";
+ }
+ return oldName.replace(" ", "");
+ }
+
+ /**
+ * Converts a specified string to a Java identifier.
+ *
+ * @param name
+ * @return the Java identifier
+ */
+ public static String convertToJavaIdentifier(String name) {
+
+ final char REPLACE_CHAR = '_';
+
+ if (name == null || name.length() == 0) {
+ return "" + REPLACE_CHAR;
+ }
+
+ StringBuilder buf = new StringBuilder();
+
+ char c = name.charAt(0);
+ if (!Character.isJavaIdentifierStart(c)) {
+ // Add _ at the beggining instead of replacing it to _. This is
+ // more readable if the name is like 3D_Model.
+ buf.append(REPLACE_CHAR);
+ }
+
+ for (int i = 0; i < name.length(); i++) {
+ c = name.charAt(i);
+ if (Character.isJavaIdentifierPart(c)) {
+ buf.append(c);
+ } else {
+ buf.append(REPLACE_CHAR);
+ }
+ }
+
+ return buf.toString();
+ }
+
+ /**
+ * Creates a new name by incrementing the number after the underscore at the end of the old name. If there is no
+ * underscore and number at the end, put "_2" at the end.
+ *
+ * @param oldName
+ * @return the new name
+ */
+ public static String incrementName(String oldName) {
+
+ final char PREFIX = '_';
+
+ String newName;
+ if (oldName == null || oldName.length() == 0) {
+ newName = "noName";
+ } else {
+ int lastDashIndex = oldName.lastIndexOf(PREFIX);
+ if (lastDashIndex < 0) {
+ newName = oldName + PREFIX + 2;
+ } else {
+ String suffix = oldName.substring(lastDashIndex + 1);
+ try {
+ int number = Integer.parseInt(suffix);
+ int newNumber = number + 1;
+ newName = oldName.substring(0, lastDashIndex + 1) + newNumber;
+ } catch (RuntimeException e) {
+ // It was not a number
+ newName = oldName + PREFIX + 2;
+ }
+ }
+ }
+ return newName;
+ }
+
+ /**
+ * Returns the local class name of a specified class.
+ *
+ * @param klass
+ * The specified class
+ * @return The local class name
+ */
+ public static String getClassName(Class klass) {
+ String fullName = klass.getName();
+ int index = fullName.lastIndexOf(".");
+ if (index < 0) {
+ return fullName;
+ } else {
+ return fullName.substring(index + 1);
+ }
+ }
+
+ /**
+ * @param throwable
+ * @return The stackTrace in String
+ */
+ public static String getStackTraceInString(Throwable throwable) {
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ PrintStream printStream = new PrintStream(byteArrayOutputStream);
+ throwable.printStackTrace(printStream);
+ printStream.flush();
+ return byteArrayOutputStream.toString();
+ }
+
+ private static Options deriveCommandLineOptions(String[] args){
+ Options options = new Options();
+ String[] argCopy = getChangedList(args);
+ int i=0;
+ for (String arg : argCopy) {
+ if (arg.startsWith("--")){
+ arg=arg.substring(2);
+ int pos = arg.indexOf('=');
+ String opt;
+ boolean hasArgs=true;
+ if (pos==-1){ //if not of the form --arg=value
+ if (i==argCopy.length-1 || argCopy[i+1].startsWith("-")){ // no value specified
+ hasArgs=false;
+ }
+ opt=arg;
+ }else{
+ opt=arg.substring(0, pos);
+ }
+ options.addOption(opt, hasArgs, "");
+ }
+ i++;
+ }
+ return options;
+ }
+
+ public static Map<String, String> parseCommandLineOptions(String[] args) {
+ Map<String,String> commandLineOptions=new HashMap<String,String>();
+ try {
+ CommandLineParameters cmdParameters = getCommandLineParser(args);
+ Map<String, String> parameters = cmdParameters.getParameters();
+ for (String s : parameters.keySet()) {
+ commandLineOptions.put(s, parameters.get(s)==null? "":parameters.get(s));
+ }
+ } catch (ParseException e1) {
+ e1.printStackTrace();
+ }
+ return commandLineOptions;
+ }
+
+ public static CommandLineParameters getCommandLineParser(String[] args)
+ throws ParseException {
+ String[] argCopy = getChangedList(args);
+ CommandLineParser parser = new DynamicOptionPosixParser();
+ CommandLine cmdLine = parser.parse(deriveCommandLineOptions(argCopy), argCopy);
+ return new CommandLineParameters(cmdLine);
+ }
+
+
+ //commons-cli does not support arg names having the period (".")
+ private static final String ARG_DOT_REPLACE="dot_replacement_value";
+
+ private static String[] getChangedList(String[] args) {
+ String[] argCopy = Arrays.asList(args).toArray(new String []{});
+ for (int i=0;i<argCopy.length; i++) {
+ argCopy[i]=changeOption(argCopy[i]);
+ }
+ return argCopy;
+ }
+
+ private static String revertOption(String option){
+ return option==null? option : option.replaceAll(Pattern.quote(ARG_DOT_REPLACE), ".");
+ }
+
+ private static String changeOption(String option){
+ return option==null? option : option.replaceAll(Pattern.quote("."), ARG_DOT_REPLACE);
+ }
+
+ private static class DynamicOptionPosixParser extends PosixParser{
+ @Override
+ protected void processOption(String arg0, @SuppressWarnings("rawtypes") ListIterator arg1)
+ throws ParseException {
+ if (getOptions().hasOption(arg0)){
+ super.processOption(arg0, arg1);
+ }
+ }
+ }
+
+ public static class CommandLineParameters{
+ private Map<String,String> parameters=new HashMap<String, String>();
+ private List<String> arguments=new ArrayList<String>();
+ protected CommandLineParameters(CommandLine cmd){
+ for(Option opt:cmd.getOptions()){
+ parameters.put(revertOption(opt.getOpt()), revertOption(opt.getValue()));
+ }
+ for(String arg:cmd.getArgs()){
+ arguments.add(revertOption(arg));
+ }
+ }
+ public List<String> getArguments() {
+ return arguments;
+ }
+ public void setArguments(List<String> arguments) {
+ this.arguments = arguments;
+ }
+ public Map<String,String> getParameters() {
+ return parameters;
+ }
+ public void setParameters(Map<String,String> parameters) {
+ this.parameters = parameters;
+ }
+ }
+
+}
\ 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/SwingUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/SwingUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/SwingUtil.java
new file mode 100644
index 0000000..dc9a7e2
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/SwingUtil.java
@@ -0,0 +1,358 @@
+/*
+ *
+ * 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.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Image;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.net.URL;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JTextField;
+import javax.swing.Spring;
+import javax.swing.SpringLayout;
+
+public class SwingUtil {
+
+ /**
+ * Minimum size, zero.
+ */
+ public static final Dimension MINIMUM_SIZE = new Dimension(0, 0);
+
+ /**
+ * The default distance between components.
+ */
+ public static final int PAD = 6;
+
+ /**
+ * Default cursor.
+ */
+ public static final Cursor DEFAULT_CURSOR = new Cursor(Cursor.DEFAULT_CURSOR);
+
+ /**
+ * Hand cursor.
+ */
+ public static final Cursor HAND_CURSOR = new Cursor(Cursor.HAND_CURSOR);
+
+ /**
+ * Cross hair cursor.
+ */
+ public static final Cursor CROSSHAIR_CURSOR = new Cursor(Cursor.CROSSHAIR_CURSOR);
+
+ /**
+ * Move cursor.
+ */
+ public static final Cursor MOVE_CURSOR = new Cursor(Cursor.MOVE_CURSOR);
+
+ /**
+ * Wait cursor.
+ */
+ public static final Cursor WAIT_CURSOR = new Cursor(Cursor.WAIT_CURSOR);
+
+ /**
+ * Creates an icon from an image contained in the "images" directory.
+ *
+ * @param filename
+ * @return the ImageIcon created
+ */
+ public static ImageIcon createImageIcon(String filename) {
+ ImageIcon icon = null;
+ URL imgURL = getImageURL(filename);
+ if (imgURL != null) {
+ icon = new ImageIcon(imgURL);
+ }
+ return icon;
+ }
+
+ /**
+ * Creates an image from an image contained in the "images" directory.
+ *
+ * @param filename
+ * @return the Image created
+ */
+ public static Image createImage(String filename) {
+ Image icon = null;
+ URL imgURL = getImageURL(filename);
+ if (imgURL != null) {
+ icon = Toolkit.getDefaultToolkit().getImage(imgURL);
+ }
+ return icon;
+ }
+
+ public static URL getImageURL(String filename) {
+ String path = "/images/" + filename;
+ URL imgURL = SwingUtil.class.getResource(path);
+ return imgURL;
+ }
+
+ /**
+ * Return the Frame of a specified component if any.
+ *
+ * @param component
+ * the specified component
+ *
+ * @return the Frame of a specified component if any; otherwise null
+ */
+ public static Frame getFrame(Component component) {
+ Frame frame;
+ Component parent;
+ while ((parent = component.getParent()) != null) {
+ component = parent;
+ }
+ if (component instanceof Frame) {
+ frame = (Frame) component;
+ } else {
+ frame = null;
+ }
+ return frame;
+ }
+
+ /**
+ * Wight none of rows or eolumns. Used by layoutToGrid().
+ */
+ public final static int WEIGHT_NONE = -1;
+
+ /**
+ * Weight all rows or columns equally. Used by layoutToGrid().
+ */
+ public final static int WEIGHT_EQUALLY = -2;
+
+ /**
+ * Layouts the child components of a specified parent component using GridBagLayout.
+ *
+ * @param parent
+ * The specified parent component
+ * @param numRow
+ * The number of rows
+ * @param numColumn
+ * The number of columns
+ * @param weightedRow
+ * The row to weight
+ * @param weightedColumn
+ * The column to weight
+ */
+ public static void layoutToGrid(Container parent, int numRow, int numColumn, int weightedRow, int weightedColumn) {
+ GridBagLayout layout = new GridBagLayout();
+ parent.setLayout(layout);
+ GridBagConstraints constraints = new GridBagConstraints();
+
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.insets = new Insets(SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD);
+
+ for (int row = 0; row < numRow; row++) {
+ constraints.gridy = row;
+ if (weightedRow == WEIGHT_EQUALLY) {
+ constraints.weighty = 1;
+ } else if (row == weightedRow) {
+ constraints.weighty = 1;
+ } else {
+ constraints.weighty = 0;
+ }
+ for (int column = 0; column < numColumn; column++) {
+ constraints.gridx = column;
+ if (weightedColumn == WEIGHT_EQUALLY) {
+ constraints.weightx = 1;
+ } else if (column == weightedColumn) {
+ constraints.weightx = 1;
+ } else {
+ constraints.weightx = 0;
+ }
+ Component component = parent.getComponent(row * numColumn + column);
+ layout.setConstraints(component, constraints);
+ }
+ }
+ }
+
+ /**
+ * @param parent
+ * @param rowWeights
+ * @param columnWeights
+ */
+ public static void layoutToGrid(Container parent, double[] rowWeights, double[] columnWeights) {
+ GridBagLayout layout = new GridBagLayout();
+ parent.setLayout(layout);
+ GridBagConstraints constraints = new GridBagConstraints();
+
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.insets = new Insets(SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD);
+
+ for (int row = 0; row < rowWeights.length; row++) {
+ constraints.gridy = row;
+ constraints.weighty = rowWeights[row];
+ for (int column = 0; column < columnWeights.length; column++) {
+ constraints.gridx = column;
+ constraints.weightx = columnWeights[column];
+ Component component = parent.getComponent(row * columnWeights.length + column);
+ layout.setConstraints(component, constraints);
+ }
+ }
+ }
+
+ /**
+ * @param parent
+ * @param rowWeights
+ * @param columnWeights
+ */
+ @SuppressWarnings("boxing")
+ public static void layoutToGrid(Container parent, List<Double> rowWeights, List<Double> columnWeights) {
+ GridBagLayout layout = new GridBagLayout();
+ parent.setLayout(layout);
+ GridBagConstraints constraints = new GridBagConstraints();
+
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.insets = new Insets(SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD, SwingUtil.PAD);
+
+ for (int row = 0; row < rowWeights.size(); row++) {
+ constraints.gridy = row;
+ constraints.weighty = rowWeights.get(row);
+ for (int column = 0; column < columnWeights.size(); column++) {
+ constraints.gridx = column;
+ constraints.weightx = columnWeights.get(column);
+ Component component = parent.getComponent(row * columnWeights.size() + column);
+ layout.setConstraints(component, constraints);
+ }
+ }
+ }
+
+ /**
+ * Aligns the first <code>rows</code> * <code>cols</code> components of <code>parent</code> in a grid. Each
+ * component in a column is as wide as the maximum preferred width of the components in that column; height is
+ * similarly determined for each row. The parent is made just big enough to fit them all.
+ *
+ * @param parent
+ *
+ * @param rows
+ * number of rows
+ * @param cols
+ * number of columns
+ */
+ public static void makeSpringCompactGrid(Container parent, int rows, int cols) {
+ makeSpringCompactGrid(parent, rows, cols, PAD, PAD, PAD, PAD);
+ }
+
+ /**
+ * Aligns the first <code>rows</code> * <code>cols</code> components of <code>parent</code> in a grid. Each
+ * component in a column is as wide as the maximum preferred width of the components in that column; height is
+ * similarly determined for each row. The parent is made just big enough to fit them all.
+ *
+ * @param parent
+ *
+ * @param rows
+ * number of rows
+ * @param cols
+ * number of columns
+ * @param initialX
+ * x location to start the grid at
+ * @param initialY
+ * y location to start the grid at
+ * @param xPad
+ * x padding between cells
+ * @param yPad
+ * y padding between cells
+ */
+ private static void makeSpringCompactGrid(Container parent, int rows, int cols, int initialX, int initialY,
+ int xPad, int yPad) {
+
+ SpringLayout layout = new SpringLayout();
+ parent.setLayout(layout);
+
+ // Align all cells in each column and make them the same width.
+ Spring x = Spring.constant(initialX);
+ for (int c = 0; c < cols; c++) {
+ Spring width = Spring.constant(0);
+ for (int r = 0; r < rows; r++) {
+ width = Spring.max(width, getConstraintsForCell(r, c, parent, cols).getWidth());
+ }
+ for (int r = 0; r < rows; r++) {
+ SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols);
+ constraints.setX(x);
+ constraints.setWidth(width);
+ }
+ x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));
+ }
+
+ // Align all cells in each row and make them the same height.
+ Spring y = Spring.constant(initialY);
+ for (int r = 0; r < rows; r++) {
+ Spring height = Spring.constant(0);
+ for (int c = 0; c < cols; c++) {
+ height = Spring.max(height, getConstraintsForCell(r, c, parent, cols).getHeight());
+ }
+ for (int c = 0; c < cols; c++) {
+ SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols);
+ constraints.setY(y);
+ constraints.setHeight(height);
+ }
+ y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));
+ }
+
+ // Set the parent's size.
+ SpringLayout.Constraints pCons = layout.getConstraints(parent);
+ pCons.setConstraint(SpringLayout.SOUTH, y);
+ pCons.setConstraint(SpringLayout.EAST, x);
+ }
+
+ /* Used by makeCompactGrid. */
+ private static SpringLayout.Constraints getConstraintsForCell(int row, int col, Container parent, int cols) {
+ SpringLayout layout = (SpringLayout) parent.getLayout();
+ Component c = parent.getComponent(row * cols + col);
+ return layout.getConstraints(c);
+ }
+
+ public static void addPlaceHolder(final JTextField field,final String placeHolderText){
+ field.addFocusListener(new FocusListener(){
+ private Color fontColor=field.getForeground();
+// private String previousText=field.getText();
+
+ public void focusGained(FocusEvent arg0) {
+ if (field.getText().equals(placeHolderText)){
+ field.setText("");
+ }
+ field.setForeground(fontColor);
+ }
+
+ public void focusLost(FocusEvent arg0) {
+ if (field.getText().trim().equals("")){
+ fontColor=field.getForeground();
+ field.setForeground(Color.GRAY);
+ field.setText(placeHolderText);
+ }
+ }
+ });
+ if (field.getText().trim().equals("")){
+ field.setText(placeHolderText);
+ field.setForeground(Color.GRAY);
+ }
+ }
+
+}
\ 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/ThriftUtils.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ThriftUtils.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ThriftUtils.java
new file mode 100644
index 0000000..ee86f74
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ThriftUtils.java
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.thrift.TBase;
+import org.apache.thrift.TDeserializer;
+import org.apache.thrift.TException;
+import org.apache.thrift.TSerializer;
+
+public class ThriftUtils {
+ public static byte[] serializeThriftObject(TBase object) throws TException {
+ return new TSerializer().serialize(object);
+ }
+
+ public static void createThriftFromBytes(byte []bytes, TBase object) throws TException {
+ new TDeserializer().deserialize(object, bytes);
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/Version.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/Version.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/Version.java
new file mode 100644
index 0000000..fe34bb1
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/Version.java
@@ -0,0 +1,120 @@
+/*
+ *
+ * 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 javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement
+public class Version {
+ public String PROJECT_NAME;
+ private Integer majorVersion=0;
+ private Integer minorVersion=0;
+ private Integer maintenanceVersion;
+ private String versionData;
+ private BuildType buildType;
+
+ public static enum BuildType{
+ ALPHA,
+ BETA,
+ RC
+ }
+
+ public Version() {
+ }
+
+ public Version(String PROJECT_NAME,Integer majorVersion,Integer minorVersion,Integer maintenanceVersion,String versionData,BuildType buildType) {
+ this.PROJECT_NAME=PROJECT_NAME;
+ this.majorVersion=majorVersion;
+ this.minorVersion=minorVersion;
+ this.maintenanceVersion=maintenanceVersion;
+ this.versionData=versionData;
+ this.buildType=buildType;
+ }
+
+ public Integer getMajorVersion() {
+ return majorVersion;
+ }
+
+ public Integer getMinorVersion() {
+ return minorVersion;
+ }
+
+ public Integer getMaintenanceVersion() {
+ return maintenanceVersion;
+ }
+
+ public String getVersionData() {
+ return versionData;
+ }
+
+ public BuildType getBuildType() {
+ return buildType;
+ }
+
+ public String getVersion(){
+ String version = getBaseVersion();
+ version = attachVersionData(version);
+ return version;
+ }
+
+ private String attachVersionData(String version) {
+ if (getVersionData()!=null){
+ version+="-"+getVersionData();
+ }
+ return version;
+ }
+
+ public String getBaseVersion() {
+ String version=getMajorVersion().toString()+"."+getMinorVersion();
+ return version;
+ }
+
+ public String getFullVersion(){
+ String version = getBaseVersion();
+ version = attachMaintainanceVersion(version);
+ version = attachVersionData(version);
+ version = attachBuildType(version);
+ return version;
+ }
+
+ private String attachMaintainanceVersion(String version) {
+ if (getMaintenanceVersion()!=null){
+ version+="."+getMaintenanceVersion();
+ }
+ return version;
+ }
+
+ private String attachBuildType(String version) {
+ if (getBuildType()!=null){
+ version+="-"+getBuildType().name();
+ }
+ return version;
+ }
+
+ @Override
+ public String toString() {
+ return getVersion();
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/8d16d0ec/modules/commons/src/main/java/org/apache/airavata/common/utils/WSConstants.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/WSConstants.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/WSConstants.java
new file mode 100644
index 0000000..9737ac4
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/WSConstants.java
@@ -0,0 +1,187 @@
+/*
+ *
+ * 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 javax.xml.namespace.QName;
+
+import org.xmlpull.infoset.XmlNamespace;
+
+public interface WSConstants {
+
+ /**
+ * xmlns
+ */
+ public final static String XMLNS = "xmlns";
+
+ /**
+ * XML Schema prefix, xsd
+ */
+ public static final String XSD_NS_PREFIX = "xsd";
+
+ /**
+ * XML Schema URI.
+ */
+ public static final String XSD_NS_URI = "http://www.w3.org/2001/XMLSchema";
+
+// /**
+// * XML Schema Namespace
+// */
+// public static final XmlNamespace XSD_NS = XmlConstants.BUILDER.newNamespace(XSD_NS_PREFIX, XSD_NS_URI);
+
+ /**
+ * The any type.
+ */
+ public static final QName XSD_ANY_TYPE = new QName(XSD_NS_URI, "any", XSD_NS_PREFIX);
+
+ /**
+ * xsd:anyURI
+ */
+ public static final QName XSD_ANY_URI = new QName(XSD_NS_URI, "anyURI", XSD_NS_PREFIX);
+
+ /**
+ * tns
+ */
+ public static final String TARGET_NS_PREFIX = "tns";
+
+ /**
+ * typens
+ */
+ public static final String TYPE_NS_PREFIX = "typens";
+
+ /**
+ * schema
+ */
+ public static final String SCHEMA_TAG = "schema";
+
+ /**
+ * Element name for annotation, annotation
+ */
+ public static final String ANNOTATION_TAG = "annotation";
+
+ /**
+ * Element name for documentation, documentation
+ */
+ public static final String DOCUMENTATION_TAG = "documentation";
+
+ /**
+ * appinfo
+ */
+ public static final String APPINFO_TAG = "appinfo";
+
+ /**
+ * element
+ */
+ public static final String ELEMENT_TAG = "element";
+
+ /**
+ * sequence
+ */
+ public static final String SEQUENCE_TAG = "sequence";
+
+ /**
+ * complexType
+ */
+ public static final String COMPLEX_TYPE_TAG = "complexType";
+
+ /**
+ * simpleType
+ */
+ public static final String SIMPLE_TYPE_TAG = "simpleType";
+
+ /**
+ * name
+ */
+ public static final String NAME_ATTRIBUTE = "name";
+
+ /**
+ * type
+ */
+ public static final String TYPE_ATTRIBUTE = "type";
+
+ /**
+ * targetNamespace
+ */
+ public static final String TARGET_NAMESPACE_ATTRIBUTE = "targetNamespace";
+
+ /**
+ * elementFormDefault
+ */
+ public final static String ELEMENT_FORM_DEFAULT_ATTRIBUTE = "elementFormDefault";
+
+ /**
+ * unqualified
+ */
+ public final static String UNQUALIFIED_VALUE = "unqualified";
+
+ /**
+ * default
+ */
+ public static final String DEFAULT_ATTRIBUTE = "default";
+
+ /**
+ * UsingAddressing
+ */
+ public static final String USING_ADDRESSING_TAG = "UsingAddressing";
+
+ /**
+ * <appinfo xmlns="http://www.w3.org/2001/XMLSchema">
+ *
+ * </appinfo>
+ */
+// public static final String EMPTY_APPINFO = "<appinfo xmlns=\"http://www.w3.org/2001/XMLSchema\">\n\n</appinfo>";
+ public static final String EMPTY_APPINFO = "{'appinfo': '' }";
+
+ /**
+ * minOccurs
+ */
+ public static final String MIN_OCCURS_ATTRIBUTE = "minOccurs";
+
+ /**
+ * maxOccurs
+ */
+ public static final String MAX_OCCURS_ATTRIBUTE = "maxOccurs";
+
+ /**
+ * unbounded
+ */
+ public static final String UNBOUNDED_VALUE = "unbounded";
+
+ /**
+ * import
+ */
+ public static final String IMPORT_TAG = "import";
+
+ /**
+ * schemaLocation
+ */
+ public static final String SCHEMA_LOCATION_ATTRIBUTE = "schemaLocation";
+
+ public static final String LEAD_NS_URI = "http://www.extreme.indiana.edu/lead";
+
+ /**
+ * The any type.
+ */
+ public static final QName LEAD_ANY_TYPE = new QName(LEAD_NS_URI, "any",
+ XSD_NS_PREFIX);
+
+
+}
\ 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/WSDLUtil.java
----------------------------------------------------------------------
diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/WSDLUtil.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/WSDLUtil.java
new file mode 100644
index 0000000..81c8d93
--- /dev/null
+++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/WSDLUtil.java
@@ -0,0 +1,546 @@
+/*
+ *
+ * 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.net.URI;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.airavata.common.exception.UtilsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.infoset.XmlAttribute;
+import org.xmlpull.infoset.XmlBuilderException;
+import org.xmlpull.infoset.XmlElement;
+import org.xmlpull.infoset.XmlNamespace;
+
+//import xsul.XmlConstants;
+//import xsul5.wsdl.WsdlBinding;
+//import xsul5.wsdl.WsdlDefinitions;
+//import xsul5.wsdl.WsdlPortType;
+//import xsul5.wsdl.WsdlPortTypeOperation;
+//import xsul5.wsdl.WsdlUtil;
+
+public class WSDLUtil {
+
+ private static final Logger logger = LoggerFactory.getLogger(WSDLUtil.class);
+
+// /**
+// * @param wsdlString
+// * @return The WSDL
+// * @throws UtilsException
+// */
+// public static WsdlDefinitions stringToWSDL(String wsdlString) throws UtilsException {
+// try {
+// XmlElement wsdlElement = XMLUtil.stringToXmlElement(wsdlString);
+// WsdlDefinitions definitions = new WsdlDefinitions(wsdlElement);
+// return definitions;
+// } catch (RuntimeException e) {
+// throw new UtilsException(e);
+// }
+// }
+//
+// /**
+// * @param definitions3
+// * @return The WsdlDefinitions (XSUL5)
+// */
+// public static xsul5.wsdl.WsdlDefinitions wsdlDefinitions3ToWsdlDefintions5(xsul.wsdl.WsdlDefinitions definitions3) {
+//
+// return new xsul5.wsdl.WsdlDefinitions(XMLUtil.xmlElement3ToXmlElement5(definitions3));
+// }
+//
+// /**
+// * @param definitions5
+// * @return The WsdlDefinitions (XSUL3)
+// */
+// public static xsul.wsdl.WsdlDefinitions wsdlDefinitions5ToWsdlDefintions3(xsul5.wsdl.WsdlDefinitions definitions5) {
+//
+// return new xsul.wsdl.WsdlDefinitions(XMLUtil.xmlElement5ToXmlElement3(definitions5.xml()));
+// }
+//
+// /**
+// * @param definitions
+// * @return The name of the WSDL.
+// */
+// public static String getWSDLName(WsdlDefinitions definitions) {
+// String wsdlName = definitions.xml().attributeValue(WSConstants.NAME_ATTRIBUTE);
+// if (wsdlName == null) {
+// // name is optional.
+// wsdlName = "";
+// }
+// return wsdlName;
+// }
+//
+// /**
+// * @param definitions
+// * @return The QName of the WSDL.
+// */
+// public static QName getWSDLQName(WsdlDefinitions definitions) {
+// String targetNamespace = definitions.getTargetNamespace();
+// String wsdlName = getWSDLName(definitions);
+// return new QName(targetNamespace, wsdlName);
+// }
+//
+// /**
+// * @param definitions
+// * @return The first portType
+// * @throws UtilsException
+// */
+// public static WsdlPortType getFirstPortType(WsdlDefinitions definitions) throws UtilsException {
+// for (WsdlPortType portType : definitions.portTypes()) {
+// return portType;
+// }
+// throw new UtilsException("No portType is defined in WSDL");
+// }
+//
+// public static WsdlPortTypeOperation getFirstOperation(WsdlDefinitions definitions) throws UtilsException {
+// for (WsdlPortTypeOperation operation : getFirstPortType(definitions).operations()) {
+// return operation;
+// }
+// throw new UtilsException("No portType is defined in WSDL");
+// }
+//
+// /**
+// * @param definitions
+// * @return The QName of the first portType.
+// * @throws UtilsException
+// */
+// public static QName getFirstPortTypeQName(WsdlDefinitions definitions) throws UtilsException {
+// String targetNamespace = definitions.getTargetNamespace();
+// for (WsdlPortType portType : definitions.portTypes()) {
+// String portTypeName = portType.getName();
+// QName portTypeQName = new QName(targetNamespace, portTypeName);
+// return portTypeQName;
+// }
+// throw new UtilsException("No portType is defined.");
+// }
+//
+// /**
+// * @param definitions
+// * @param portTypeQName
+// * @return The name of the first operation in a given portType.
+// * @throws UtilsException
+// */
+// public static String getFirstOperationName(WsdlDefinitions definitions, QName portTypeQName) throws UtilsException {
+// WsdlPortType portType = definitions.getPortType(portTypeQName.getLocalPart());
+// for (WsdlPortTypeOperation operation : portType.operations()) {
+// String operationName = operation.getOperationName();
+//
+// // XXX Temporary solution to skip some GFac specific operations.
+// if ("Shutdown".equals(operationName)) {
+// continue;
+// } else if ("Kill".equals(operationName)) {
+// continue;
+// } else if ("Ping".equals(operationName)) {
+// continue;
+// }
+//
+// return operationName;
+// }
+// throw new UtilsException("No operation is defined");
+// }
+//
+// /**
+// * @param definitions
+// * @return The cloned WsdlDefinitions
+// */
+// public static WsdlDefinitions deepClone(WsdlDefinitions definitions) throws UtilsException {
+// return new WsdlDefinitions(XMLUtil.deepClone(definitions.xml()));
+// }
+//
+// /**
+// * @param definitions
+// * @param paramType
+// * @return The schema that includes the type definition
+// */
+// public static XmlElement getSchema(WsdlDefinitions definitions, QName paramType) throws UtilsException {
+// XmlElement types = definitions.getTypes();
+//
+// Iterable<XmlElement> schemas = types.elements(WSConstants.XSD_NS, WSConstants.SCHEMA_TAG);
+// for (XmlElement schema : schemas) {
+// if (isTypeDefinedInSchema(paramType, schema)) {
+// return schema;
+// }
+// }
+//
+// // ok we didnt find the type in the schema in first level
+// // now we try try to see if it exist in schema imports.
+// // we loop in two step because its better to avoid the network
+// // connection if possible
+// for (XmlElement schema : schemas) {
+// Iterable<XmlElement> imports = schema.elements(WSConstants.XSD_NS, WSConstants.IMPORT_TAG);
+// for (XmlElement importEle : imports) {
+// String schemaLocation = importEle.attributeValue(WSConstants.SCHEMA_LOCATION_ATTRIBUTE);
+// if (null != schemaLocation && !"".equals(schemaLocation)) {
+// try {
+// // connect using a url connection
+// URL url = new URL(schemaLocation);
+// URLConnection connection = url.openConnection();
+// connection.connect();
+// XmlElement importedSchema = xsul5.XmlConstants.BUILDER.parseFragmentFromInputStream(connection
+// .getInputStream());
+// if (isTypeDefinedInSchema(paramType, importedSchema)) {
+// // still return the parent schema
+// return schema;
+// }
+// } catch (MalformedURLException e) {
+// throw new UtilsException(e);
+// } catch (XmlBuilderException e) {
+// throw new UtilsException(e);
+// } catch (IOException e) {
+// throw new UtilsException(e);
+// }
+// }
+// }
+// }
+//
+// return null;
+// }
+//
+// private static boolean isTypeDefinedInSchema(QName paramType, XmlElement schema) {
+// String schemaTargetNamespace = schema.attributeValue(WSConstants.TARGET_NAMESPACE_ATTRIBUTE);
+// if (schemaTargetNamespace.equals(paramType.getNamespaceURI())) {
+// for (XmlElement complexType : schema.elements(WSConstants.XSD_NS, WSConstants.COMPLEX_TYPE_TAG)) {
+// String complexTypeName = complexType.attributeValue(WSConstants.NAME_ATTRIBUTE);
+// if (complexTypeName.equals(paramType.getLocalPart())) {
+// return true;
+// }
+// }
+// for (XmlElement simpleType : schema.elements(WSConstants.XSD_NS, WSConstants.SIMPLE_TYPE_TAG)) {
+// String simpleTypeName = simpleType.attributeValue(WSConstants.NAME_ATTRIBUTE);
+// if (simpleTypeName.equals(paramType.getLocalPart())) {
+// return true;
+// }
+// }
+// }
+// return false;
+// }
+//
+// /**
+// * @param definitions
+// * @param paramType
+// * @return The type definition
+// */
+// public static XmlElement getTypeDefinition(WsdlDefinitions definitions, QName paramType) throws UtilsException {
+// XmlElement types = definitions.getTypes();
+// XmlElement returnType = null;
+// types.element(null, WSConstants.SCHEMA_TAG);
+// Iterable<XmlElement> schemas = types.elements(null, WSConstants.SCHEMA_TAG);
+// for (XmlElement schema : schemas) {
+//
+// returnType = findTypeInSchema(paramType, schema);
+// if (returnType != null) {
+// return returnType;
+// }
+// }
+// // ok we didnt find the type in the schemas
+// // try to find it in the schema imports.
+//
+// // if not found it will return null so we would return null
+// return findTypeDefinitionInImports(definitions, paramType);
+//
+// }
+//
+// /**
+// *
+// * @param definitions
+// * @param paramType
+// * @return
+// */
+//
+// public static XmlElement getImportContainingTypeDefinition(WsdlDefinitions definitions, QName paramType)
+// throws UtilsException {
+// XmlElement types = definitions.getTypes();
+// XmlElement returnType = null;
+// Iterable<XmlElement> schemas = types.elements(WSConstants.XSD_NS, WSConstants.SCHEMA_TAG);
+// for (XmlElement schema : schemas) {
+// Iterable<XmlElement> imports = schema.elements(WSConstants.XSD_NS, WSConstants.IMPORT_TAG);
+// for (XmlElement importEle : imports) {
+// String schemaLocation = importEle.attributeValue(WSConstants.SCHEMA_LOCATION_ATTRIBUTE);
+// if (null != schemaLocation && !"".equals(schemaLocation)) {
+// try {
+// // connect using a url connection
+// URL url = new URL(schemaLocation);
+// URLConnection connection = url.openConnection();
+// connection.connect();
+// XmlElement importedSchema = xsul5.XmlConstants.BUILDER.parseFragmentFromInputStream(connection
+// .getInputStream());
+// returnType = findTypeInSchema(paramType, importedSchema);
+// if (returnType != null) {
+// return importEle;
+// }
+//
+// } catch (MalformedURLException e) {
+// throw new UtilsException(e);
+// } catch (XmlBuilderException e) {
+// throw new UtilsException(e);
+// } catch (IOException e) {
+// throw new UtilsException(e);
+// }
+// }
+// }
+// }
+// return null;
+// }
+//
+// /**
+// *
+// * @param definitions
+// * @param paramType
+// * @return
+// */
+//
+// public static XmlElement findTypeDefinitionInImports(WsdlDefinitions definitions, QName paramType)
+// throws UtilsException {
+// XmlElement types = definitions.getTypes();
+// XmlElement returnType = null;
+// Iterable<XmlElement> schemas = types.elements(null, WSConstants.SCHEMA_TAG);
+// for (XmlElement schema : schemas) {
+// Iterable<XmlElement> imports = schema.elements(WSConstants.XSD_NS, WSConstants.IMPORT_TAG);
+// for (XmlElement importEle : imports) {
+// String schemaLocation = importEle.attributeValue(WSConstants.SCHEMA_LOCATION_ATTRIBUTE);
+// if (null != schemaLocation && !"".equals(schemaLocation)) {
+// try {
+// // connect using a url connection
+// URL url = new URL(schemaLocation);
+// URLConnection connection = url.openConnection();
+// connection.connect();
+// XmlElement importedSchema = xsul5.XmlConstants.BUILDER.parseFragmentFromInputStream(connection
+// .getInputStream());
+// returnType = findTypeInSchema(paramType, importedSchema);
+// if (returnType != null) {
+// return returnType;
+// }
+//
+// } catch (MalformedURLException e) {
+// throw new UtilsException(e);
+// } catch (XmlBuilderException e) {
+// throw new UtilsException(e);
+// } catch (IOException e) {
+// throw new UtilsException(e);
+// }
+// }
+// }
+// }
+// return null;
+//
+// }
+//
+// private static XmlElement findTypeInSchema(QName paramType, XmlElement schema) {
+// String schemaTargetNamespace = schema.attributeValue(WSConstants.TARGET_NAMESPACE_ATTRIBUTE);
+// if (null != schemaTargetNamespace && schemaTargetNamespace.equals(paramType.getNamespaceURI())) {
+// for (XmlElement complexType : schema.elements(WSConstants.XSD_NS, WSConstants.COMPLEX_TYPE_TAG)) {
+// String complexTypeName = complexType.attributeValue(WSConstants.NAME_ATTRIBUTE);
+// if (complexTypeName.equals(paramType.getLocalPart())) {
+// return complexType;
+//
+// }
+// }
+// for (XmlElement simpleType : schema.elements(WSConstants.XSD_NS, WSConstants.SIMPLE_TYPE_TAG)) {
+// String simpleTypeName = simpleType.attributeValue(WSConstants.NAME_ATTRIBUTE);
+// if (simpleTypeName.equals(paramType.getLocalPart())) {
+// return simpleType;
+// }
+// }
+// }
+// return null;
+// }
+//
+// /**
+// * @param wsdl
+// * @return true if the WSDL is AWSDL; false otherwise.
+// */
+// public static boolean isAWSDL(WsdlDefinitions wsdl) {
+// if (wsdl.services().iterator().hasNext()) {
+// return false;
+// }
+// return true;
+// }
+//
+// /**
+// * @param definitions
+// * @return true if the service supports asynchronous invocation; false otherwise;
+// */
+// public static boolean isAsynchronousSupported(WsdlDefinitions definitions) {
+// for (WsdlBinding binding : definitions.bindings()) {
+// XmlElement element = binding.xml().element(WSConstants.USING_ADDRESSING_TAG);
+// if (element != null) {
+// return true;
+// }
+// }
+// return false;
+// }
+//
+// /**
+// * Converts a specified AWSDL to CWSDL using DSC URI.
+// *
+// * @param definitions
+// * The specified AWSDL. This will be modified.
+// * @param url
+// * The URL of the service
+// * @return The CWSDL converted.
+// */
+// public static WsdlDefinitions convertToCWSDL(WsdlDefinitions definitions, URI url) {
+// for (WsdlPortType portType : definitions.portTypes()) {
+// WsdlUtil.createCWSDL(definitions, portType, url);
+// }
+// return definitions;
+// }
+
+ /**
+ * @param uri
+ * @return The URI with "?wsdl" at the end.
+ */
+ public static String appendWSDLQuary(String uri) {
+ URI wsdlURI = appendWSDLQuary(URI.create(uri));
+ return wsdlURI.toString();
+ }
+
+ public static List<XmlNamespace> getNamespaces(XmlElement element) {
+ LinkedList<XmlNamespace> namespaces = new LinkedList<XmlNamespace>();
+ namespaces.add(element.getNamespace());
+ Iterable<XmlAttribute> attributes = element.attributes();
+ for (XmlAttribute xmlAttribute : attributes) {
+ if (xmlAttribute.getNamespace() != null && !namespaces.contains(xmlAttribute.getNamespace())) {
+ namespaces.add(xmlAttribute.getNamespace());
+ }
+ int index = xmlAttribute.getValue().indexOf(':');
+ if (-1 != index) {
+ String prefix = xmlAttribute.getValue().substring(0, index);
+ if (element.lookupNamespaceByPrefix(prefix) != null) {
+ namespaces.add(element.lookupNamespaceByPrefix(prefix));
+ }
+ }
+ }
+ Iterable children = element.children();
+ for (Object object : children) {
+ if (object instanceof XmlElement) {
+ List<XmlNamespace> newNSs = getNamespaces((XmlElement) object);
+ for (XmlNamespace xmlNamespace : newNSs) {
+ if (!namespaces.contains(xmlNamespace)) {
+ namespaces.add(xmlNamespace);
+ }
+ }
+ }
+ }
+ return namespaces;
+ }
+
+ /**
+ * @param uri
+ * @return The URI with "?wsdl" at the end.
+ */
+ public static URI appendWSDLQuary(URI uri) {
+ if (uri.toString().endsWith("?wsdl")) {
+ logger.warn("URL already has ?wsdl at the end: " + uri.toString());
+ // Don't throw exception to be more error tolerant.
+ return uri;
+ }
+ String path = uri.getPath();
+ if (path == null || path.length() == 0) {
+ uri = uri.resolve("/");
+ }
+ uri = URI.create(uri.toString() + "?wsdl");
+ return uri;
+ }
+
+// /**
+// * @param valueElement
+// * @return
+// */
+// public static org.xmlpull.v1.builder.XmlElement xmlElement5ToXmlElementv1(XmlElement valueElement) {
+//
+// return XmlConstants.BUILDER.parseFragmentFromReader(new StringReader(xsul5.XmlConstants.BUILDER
+// .serializeToStringPretty(valueElement)));
+// }
+
+ /**
+ *
+ * @param vals
+ * @param <T>
+ * @return
+ */
+ public static <T extends Object> T getfirst(Iterable<T> vals) {
+ for (T class1 : vals) {
+ return class1;
+ }
+ throw new RuntimeException("Iterator empty");
+
+ }
+
+// /**
+// * @param serviceSchema
+// */
+// public static void print(XmlElement serviceSchema) {
+// System.out.println(xsul5.XmlConstants.BUILDER.serializeToStringPretty(serviceSchema));
+// }
+
+ /**
+ * @param workflowID
+ * @return
+ */
+ public static String findWorkflowName(URI workflowID) {
+ String[] splits = workflowID.toString().split("/");
+ return splits[splits.length - 1];
+
+ }
+
+ /**
+ *
+ * @param element
+ * @param name
+ * @param oldValue
+ * @param newValue
+ */
+ public static void replaceAttributeValue(XmlElement element, String name, String oldValue, String newValue) {
+ XmlAttribute attribute = element.attribute(name);
+ if (null != attribute && oldValue.equals(attribute.getValue())) {
+ element.removeAttribute(attribute);
+ element.setAttributeValue(name, newValue);
+ }
+ Iterable iterator = element.children();
+ for (Object object : iterator) {
+ if (object instanceof XmlElement) {
+ replaceAttributeValue((XmlElement) object, name, oldValue, newValue);
+ }
+ }
+
+ }
+
+ public static boolean attributeExist(XmlElement element, String name, String value) {
+ XmlAttribute attribute = element.attribute(name);
+ if (null != attribute && value.equals(attribute.getValue())) {
+ return true;
+ }
+ Iterable iterator = element.children();
+ boolean ret = false;
+ for (Object object : iterator) {
+ if (object instanceof XmlElement) {
+ ret = ret || attributeExist((XmlElement) object, name, value);
+ }
+ }
+ return ret;
+
+ }
+
+
+}
\ No newline at end of file