Author: lahiru
Date: Thu Feb 21 15:37:25 2013
New Revision: 1448683

URL: http://svn.apache.org/r1448683
Log:
committing shabhaz's patch, thanks for the contribution.

Added:
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLUtils.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSRequirement.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSType.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ProcessorRequirement.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/RangeValueType.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ResourceRequirement.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/URIUtils.java

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLGenerator.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,418 @@
+/*
+ *
+ * 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.gfac.provider.utils;
+
+import java.io.File;
+import java.net.URI;
+import java.util.Map;
+
+import org.apache.airavata.commons.gfac.type.ActualParameter;
+import org.apache.airavata.gfac.context.JobExecutionContext;
+import org.apache.airavata.gfac.utils.GFacUtils;
+import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType;
+import org.apache.airavata.schemas.gfac.JobTypeType;
+import org.apache.airavata.schemas.gfac.NameValuePairType;
+import org.apache.airavata.schemas.gfac.StdErrParameterType;
+import org.apache.airavata.schemas.gfac.StdOutParameterType;
+import org.apache.airavata.schemas.gfac.StringArrayType;
+import org.apache.airavata.schemas.gfac.StringParameterType;
+import org.apache.airavata.schemas.gfac.URIArrayType;
+import org.apache.airavata.schemas.gfac.URIParameterType;
+import org.apache.airavata.schemas.gfac.UnicoreHostType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.ApplicationType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.EnvironmentType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.FileNameType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.POSIXApplicationType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * Utility class generates a JSDL instance from JobExecutionContext instance
+ * @author shahbaz memon
+ * 
+ * */
+
+public class JSDLGenerator {
+       
+       protected final Logger log = LoggerFactory.getLogger(this.getClass());
+
+       public synchronized static JobDefinitionDocument 
buildJSDLInstance(JobExecutionContext context) throws Exception {
+
+               JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory
+                               .newInstance();
+               JobDefinitionType value = jobDefDoc.addNewJobDefinition();
+               
+               
+               HpcApplicationDeploymentType appDepType = 
(HpcApplicationDeploymentType) context
+                               
.getApplicationContext().getApplicationDeploymentDescription()
+                               .getType();
+               
+               
+               // TODO: here need to create spmd element
+               if (appDepType.getJobType() != null) {
+                       // TODO set data output directory
+                       int status = appDepType.getJobType().intValue();
+
+                       switch (status) {
+                       // TODO: this check should be done outside this class
+                       case JobTypeType.INT_MPI:
+                               // use spmd:openmpi
+                               break;
+
+                       case JobTypeType.INT_OPEN_MP:
+                               // use spmd:openmp
+                               break;
+
+                       case JobTypeType.INT_SERIAL:
+                               break;
+
+                       case JobTypeType.INT_SINGLE:
+                               break;
+
+                       default:
+                               break;
+                       }
+               }
+
+               
+               
+               if( appDepType.getProjectAccount() != null ){
+                       
+                       if 
(appDepType.getProjectAccount().getProjectAccountNumber() != null)
+                               JSDLUtils.addProjectName(value, 
appDepType.getProjectAccount()
+                                               .getProjectAccountNumber());
+
+                       if 
(appDepType.getProjectAccount().getProjectAccountDescription() != null)
+                               
JSDLUtils.getOrCreateJobIdentification(value).setDescription(
+                                               appDepType.getProjectAccount()
+                                                               
.getProjectAccountDescription());
+               }
+               
+               
+               ApplicationType appType = 
JSDLUtils.getOrCreateApplication(value);
+               
+               String gridftpEndpoint = ((UnicoreHostType) 
context.getApplicationContext().getHostDescription().getType())
+                               .getGridFTPEndPointArray()[0];
+
+
+               String stdout = null, stderr = null;
+               
+               POSIXApplicationType posixType = JSDLUtils 
.getOrCreatePOSIXApplication(value);
+               
+               
+               
+               // TODO: here need to create spmd element
+               if (appDepType.getJobType() != null) {
+                       // TODO set data output directory
+                       int status = appDepType.getJobType().intValue();
+
+                       switch (status) {
+                       // TODO: this check should be done outside this class
+                       case JobTypeType.INT_MPI:
+                               // use spmd:openmpi
+                               break;
+
+                       case JobTypeType.INT_OPEN_MP:
+                               // use spmd:openmp
+                               break;
+
+                       case JobTypeType.INT_SERIAL:
+                               break;
+
+                       case JobTypeType.INT_SINGLE:
+                               break;
+
+                       default:
+                               break;
+                       }
+               }
+               
+               if(appDepType.getStandardOutput() != null) {
+                       stdout = new 
File(appDepType.getStandardOutput()).getName();
+                       createStdOut(value, stdout);
+               }
+               
+               if(appDepType.getStandardError() != null) {
+                       stderr = new 
File(appDepType.getStandardError()).getName();
+                       createStdErr(value, stderr);
+               }
+
+               if (appDepType.getApplicationName() != null) {
+                       String appName = appDepType.getApplicationName()
+                                       .getStringValue();
+                       appType.setApplicationName(appName);
+                       
JSDLUtils.getOrCreateJobIdentification(value).setJobName(appName);
+               }
+
+               if (appDepType.getExecutableLocation() != null) {
+                       FileNameType fNameType = 
FileNameType.Factory.newInstance();
+                       
fNameType.setStringValue(appDepType.getExecutableLocation());
+                       posixType.setExecutable(fNameType);
+
+               }
+
+               if (appDepType.getMaxWallTime() > 0) {
+                       RangeValueType rangeType = new RangeValueType();
+                       rangeType.setLowerBound(appDepType.getMaxWallTime());
+                       rangeType.setIncludeLowerBound(true);
+                       JSDLUtils.setIndividualCPUTimeRequirements(value, 
rangeType);
+               }
+
+               if (appDepType.getCpuCount() > 0) {
+                       RangeValueType rangeType = new RangeValueType();
+                       rangeType.setLowerBound(Double.NaN);
+                       rangeType.setUpperBound(Double.NaN);
+                       rangeType.setExact(appDepType.getCpuCount());
+                       JSDLUtils.setTotalCPUCountRequirements(value, 
rangeType);
+               }
+
+               if (appDepType.getMinMemory() > 0 && appDepType.getMaxMemory() 
> 0) {
+                       RangeValueType rangeType = new RangeValueType();
+                       rangeType.setLowerBound(appDepType.getMinMemory());
+                       rangeType.setUpperBound(appDepType.getMaxMemory());
+                       
JSDLUtils.setIndividualPhysicalMemoryRequirements(value, rangeType);
+               }
+
+               if (appDepType.getMinMemory() > 0) {
+                       // TODO set Wall time
+               }
+
+               if (appDepType.getProcessorsPerNode() > 0) {
+                       RangeValueType rangeType = new RangeValueType();
+                       rangeType.setLowerBound(Double.NaN);
+                       rangeType.setUpperBound(Double.NaN);
+                       rangeType.setExact(appDepType.getProcessorsPerNode());
+                       JSDLUtils.setIndividualCPUCountRequirements(value, 
rangeType);
+               }
+
+               if (appDepType.getApplicationEnvironmentArray().length > 0) {
+                       createApplicationEnvironment(value,
+                                       
appDepType.getApplicationEnvironmentArray());
+               }
+
+               if (context.getInMessageContext().getParameters().size() > 0) {
+                       buildFromInputContext(context, value, gridftpEndpoint, 
appDepType);
+               }
+
+               if (context.getOutMessageContext().getParameters().size() > 0) {
+                       buildFromOutputContext(context, value, gridftpEndpoint, 
appDepType);
+               }
+
+               createStdOutURIs(value, appDepType, gridftpEndpoint, stdout, 
stderr, isUnicoreEndpoint(context));
+               
+               return jobDefDoc;
+       }
+
+       private static void createStdOut(JobDefinitionType value, String 
stdout) {
+               FileNameType fName = FileNameType.Factory.newInstance();
+               fName.setStringValue(stdout);
+               JSDLUtils.getOrCreatePOSIXApplication(value).setOutput(fName);
+       }
+
+       private static void createStdErr(JobDefinitionType value, String 
stderr) {
+               FileNameType fName = FileNameType.Factory.newInstance();
+               fName.setStringValue(stderr);
+               JSDLUtils.getOrCreatePOSIXApplication(value).setError(fName);
+
+       }
+
+       private static void createApplicationEnvironment(JobDefinitionType 
value,
+                       NameValuePairType[] nameValuePairs) {
+               for (NameValuePairType nv : nameValuePairs) {
+                       EnvironmentType envType = 
JSDLUtils.getPOSIXApplication(value)
+                                       .addNewEnvironment();
+                       envType.setName(nv.getName());
+                       envType.setStringValue(nv.getValue());
+               }
+
+       }
+
+       private static void createInURIElement(JobDefinitionType value,
+                       String endpoint, String inputDir, ActualParameter 
inParam)
+                       throws Exception {
+
+               String uri = ((URIParameterType) inParam.getType()).getValue();
+               String fileName = new File(uri).getName();
+               if (uri.startsWith("file")) {
+                       URI gridFTPInputDirURI = 
GFacUtils.createGsiftpURI(endpoint,
+                                       inputDir);
+                       String filePath = gridFTPInputDirURI.toString() + 
File.separator
+                                       + fileName;
+                       JSDLUtils
+                                       .addDataStagingSourceElement(value, 
filePath, null, fileName);
+               } else if (uri.startsWith("gsiftp") || uri.startsWith("http")
+                               || uri.startsWith("rns")) {
+                       // no need to stage-in those files to the input
+                       // directory
+                       JSDLUtils.addDataStagingSourceElement(value, uri, null, 
fileName);
+               }
+
+       }
+
+       private static void createStdOutURIs(JobDefinitionType value,
+                       HpcApplicationDeploymentType appDeptype, String 
endpoint,
+                       String stdout, String stderr, boolean isUnicore) throws 
Exception {
+
+               URI remoteOutputDir = GFacUtils.createGsiftpURI(endpoint,
+                               appDeptype.getOutputDataDirectory());
+
+               String stdoutFileName = (stdout == null || stdout.equals("")) ? 
"stdout"
+                               : stdout;
+               String stdoutURI = GFacUtils.createGsiftpURIAsString(
+                               remoteOutputDir.toString(), stdoutFileName);
+               JSDLUtils.addDataStagingTargetElement(value, null, 
stdoutFileName,
+                               stdoutURI);
+
+               String stderrFileName = (stdout == null || stderr.equals("")) ? 
"stderr"
+                               : stderr;
+               String stderrURI = GFacUtils.createGsiftpURIAsString(
+                               remoteOutputDir.toString(), stderrFileName);
+               JSDLUtils.addDataStagingTargetElement(value, null, 
stderrFileName,
+                               stderrURI);
+               
+               if(isUnicore) {
+                       String scriptExitCodeFName = "UNICORE_SCRIPT_EXIT_CODE";
+                       String scriptExitCode = 
GFacUtils.createGsiftpURIAsString(
+                                       remoteOutputDir.toString(), 
scriptExitCodeFName);
+                       JSDLUtils.addDataStagingTargetElement(value, null,
+                                       scriptExitCodeFName, 
scriptExitCode.toString());
+               }
+
+       }
+
+       
+       private static void createOutStringElements(JobDefinitionType value,
+                       HpcApplicationDeploymentType appDeptype, String 
endpoint, String prmValue) throws Exception {
+               
+               String outputUri = GFacUtils.createGsiftpURIAsString(endpoint, 
appDeptype.getOutputDataDirectory());
+               
+               URI finalOutputUri = GFacUtils.createGsiftpURI(outputUri, 
prmValue);
+               JSDLUtils.addDataStagingTargetElement(value, null, prmValue,    
finalOutputUri.toString());
+       }
+
+       
+       private static void createOutURIElement(JobDefinitionType value,
+                       String prmValue) throws Exception {
+               String fileName = new File(prmValue.toString()).getName();
+               JSDLUtils.addDataStagingTargetElement(value, null, fileName, 
prmValue);
+       }
+
+       
+       private static JobDefinitionType 
buildFromOutputContext(JobExecutionContext context,
+                       JobDefinitionType value, String gridftpEndpoint,
+                       HpcApplicationDeploymentType appDepType) throws 
Exception {
+               
+               Map<String, Object> outputParams = 
context.getOutMessageContext()
+                               .getParameters();
+
+               for (String paramKey : outputParams.keySet()) {
+
+                       ActualParameter outParam = (ActualParameter) 
outputParams
+                                       .get(paramKey);
+
+                       // if single urls then convert each url into jsdl source
+                       // elements,
+                       // that are formed by concat of 
gridftpurl+inputdir+filename
+
+                       String paramDataType = 
outParam.getType().getType().toString();
+
+                       if ("URI".equals(paramDataType)) {
+                               String uriPrm = ((URIParameterType) 
outParam.getType())
+                                               .getValue();
+                               createOutURIElement(value, uriPrm);
+                       }
+
+                       // string params are converted into the job arguments
+
+                       else if (("URIArray").equals(paramDataType)) {
+                               String[] uriArray = ((URIArrayType) 
outParam.getType())
+                                               .getValueArray();
+                               for (String u : uriArray) {
+                                       createOutURIElement(value, u);
+                               }
+
+                       }
+                       else if ("String".equals(paramDataType)) {
+                               String stringPrm = ((StringParameterType) 
outParam
+                                               .getType()).getValue();
+                               createOutStringElements(value, appDepType, 
gridftpEndpoint, stringPrm);
+                       }
+
+                       else if ("StringArray".equals(paramDataType)) {
+                               String[] valueArray = ((StringArrayType) 
outParam.getType())
+                                               .getValueArray();
+                               for (String v : valueArray) {
+                                       createOutStringElements(value, 
appDepType, gridftpEndpoint, v);
+                               }
+                       }
+               }
+               
+               return value;
+       }
+
+       
+       private static void buildFromInputContext(JobExecutionContext context, 
JobDefinitionType value, String gridftpEndpoint, HpcApplicationDeploymentType 
appDepType) 
+                       throws Exception {
+               
+               // TODO set data directory
+               Map<String, Object> inputParams = context.getInMessageContext()
+                               .getParameters();
+
+               for (String paramKey : inputParams.keySet()) {
+
+                       ActualParameter inParam = (ActualParameter) inputParams
+                                       .get(paramKey);
+
+                       // if single urls then convert each url into jsdl source
+                       // elements,
+                       // that are formed by concat of 
gridftpurl+inputdir+filename
+
+                       String paramDataType = 
inParam.getType().getType().toString();
+
+                       if ("URI".equals(paramDataType)) {
+                               createInURIElement(value, gridftpEndpoint,
+                                               
appDepType.getInputDataDirectory(), inParam);
+                       }
+
+                       // string params are converted into the job arguments
+
+                       else if ("String".equals(paramDataType)) {
+                               String stringPrm = ((StringParameterType) 
inParam.getType())
+                                               .getValue();
+
+                               JSDLUtils.getOrCreatePOSIXApplication(value)
+                                               
.addNewArgument().setStringValue(stringPrm);
+
+                       }
+               }
+               
+       }
+       
+
+       
+       public static boolean isUnicoreEndpoint(JobExecutionContext context) {
+               return ( 
(context.getApplicationContext().getHostDescription().getType() instanceof 
UnicoreHostType)?true:false );
+       }
+       
+}

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLUtils.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLUtils.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLUtils.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/JSDLUtils.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,467 @@
+package org.apache.airavata.gfac.provider.utils;
+
+
+import javax.xml.namespace.QName;
+
+import org.apache.commons.httpclient.URIException;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.ApplicationType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.BoundaryType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.CPUArchitectureType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.CandidateHostsType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.CreationFlagEnumeration;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.DataStagingType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.ExactType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDescriptionType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobIdentificationType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.OperatingSystemType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.OperatingSystemTypeEnumeration;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.OperatingSystemTypeType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.ProcessorArchitectureEnumeration;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.ResourcesType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.SourceTargetType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.EnvironmentType;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.POSIXApplicationDocument;
+import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.POSIXApplicationType;
+import org.ggf.schemas.jsdl.x2006.x07.jsdlHpcpa.HPCProfileApplicationDocument;
+import org.ggf.schemas.jsdl.x2006.x07.jsdlHpcpa.HPCProfileApplicationType;
+
+
+/**
+ * 
+ * @author shahbaz memon, bastian demuth
+ *
+ */
+public class JSDLUtils
+{
+
+       public static final int FLAG_OVERWRITE = 1;
+       public static final int FLAG_APPEND = 2;
+       public static final int FLAG_DELETE_ON_TERMINATE = 32;
+
+       public static final QName 
POSIX_APPLICATION=POSIXApplicationDocument.type.getDocumentElementName();
+       
+       public static final QName 
HPC_PROFILE_APPLICATION=HPCProfileApplicationDocument.type.getDocumentElementName();
+       
+       public static EnvironmentType addEnvVariable(JobDefinitionType 
def,String name, String value) {
+               POSIXApplicationType posixApp = 
getOrCreatePOSIXApplication(def);
+               EnvironmentType newEnv = posixApp.addNewEnvironment();
+               newEnv.setName(name);
+               newEnv.setStringValue(value);
+               return newEnv;
+       }
+
+       public static void setApplicationName(JobDefinitionType value, String 
applicationName) {
+               
getOrCreateApplication(value).setApplicationName(applicationName);
+       }
+
+       public static void setApplicationVersion(JobDefinitionType value, 
String applicationVersion) {
+               
getOrCreateApplication(value).setApplicationVersion(applicationVersion);
+       }
+
+       public static void addProjectName(JobDefinitionType value, String 
projectName) {
+               
getOrCreateJobIdentification(value).addNewJobProject().setStringValue(projectName);
+       }
+       
+       public static void addMultipleProjectNames(JobDefinitionType value, 
String[] projectNames) {
+               for (String name : projectNames) {
+                       
getOrCreateJobIdentification(value).addNewJobProject().setStringValue(name);
+               }
+       }
+
+       public static void addCandidateHost(JobDefinitionType value, String 
host) {
+               getOrCreateCandidateHosts(value).addHostName(host);
+
+       }
+       public static void addDataStagingTargetElement(JobDefinitionType value, 
String fileSystem, String file, String uri) {
+               addDataStagingTargetElement(value,fileSystem, file, uri, 0);
+       }
+
+       public static void addDataStagingTargetElement(JobDefinitionType value, 
String fileSystem, String file, String uri, int flags) {
+               JobDescriptionType jobDescr = getOrCreateJobDescription(value);
+               DataStagingType newDS = jobDescr.addNewDataStaging();
+               CreationFlagEnumeration.Enum creationFlag = 
CreationFlagEnumeration.DONT_OVERWRITE;
+               if((flags & FLAG_OVERWRITE) != 0) creationFlag = 
CreationFlagEnumeration.OVERWRITE;
+               if((flags & FLAG_APPEND) != 0) creationFlag = 
CreationFlagEnumeration.APPEND;
+               boolean deleteOnTerminate = (flags & FLAG_DELETE_ON_TERMINATE) 
!= 0;
+               newDS.setCreationFlag(creationFlag);
+               newDS.setDeleteOnTermination(deleteOnTerminate);
+               SourceTargetType target = newDS.addNewTarget();
+
+               try {
+                       uri = (uri == null) ? null : URIUtils.encodeAll(uri);
+               } catch (URIException e) {
+               }
+               target.setURI(uri);
+               newDS.setFileName(file);
+               if (fileSystem != null && !fileSystem.equals("Work")) {  
//$NON-NLS-1$
+                       newDS.setFilesystemName(fileSystem);
+               }
+       }
+
+       public static void addDataStagingSourceElement(JobDefinitionType value, 
String uri, String fileSystem, String file) {
+               addDataStagingSourceElement(value, uri, fileSystem, file, 0);
+       }
+
+       public static void addDataStagingSourceElement(JobDefinitionType value, 
String uri, String fileSystem, String file, int flags) {
+               JobDescriptionType jobDescr = getOrCreateJobDescription(value);
+
+               try {
+                       uri = (uri == null) ? null : URIUtils.encodeAll(uri);
+               } catch (URIException e) {
+               }
+               DataStagingType newDS = jobDescr.addNewDataStaging();
+               CreationFlagEnumeration.Enum creationFlag = 
CreationFlagEnumeration.DONT_OVERWRITE;
+               if((flags & FLAG_OVERWRITE) != 0) creationFlag = 
CreationFlagEnumeration.OVERWRITE;
+               if((flags & FLAG_APPEND) != 0) creationFlag = 
CreationFlagEnumeration.APPEND;
+               boolean deleteOnTerminate = (flags & FLAG_DELETE_ON_TERMINATE) 
!= 0;
+               newDS.setCreationFlag(creationFlag);
+               newDS.setDeleteOnTermination(deleteOnTerminate);
+               SourceTargetType source = newDS.addNewSource();
+               source.setURI(uri);
+               newDS.setFileName(file);
+               if (fileSystem != null && !fileSystem.equals("Work")) {  
//$NON-NLS-1$
+                       newDS.setFilesystemName(fileSystem);
+               }
+       }
+
+
+       public static ApplicationType getOrCreateApplication(JobDefinitionType 
value) {
+               JobDescriptionType jobDescr = getOrCreateJobDescription(value);
+               if (!jobDescr.isSetApplication()) {
+                       jobDescr.addNewApplication();
+               }
+               return jobDescr.getApplication();
+       }
+
+       public static CandidateHostsType 
getOrCreateCandidateHosts(JobDefinitionType value) {
+               ResourcesType resources = getOrCreateResources(value);
+               if (!resources.isSetCandidateHosts()) {
+                       resources.addNewCandidateHosts();
+               }
+               return resources.getCandidateHosts();
+       }
+
+       public static CPUArchitectureType 
getOrCreateCPUArchitecture(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if (!jobResources.isSetCPUArchitecture()) {
+                       jobResources.addNewCPUArchitecture();
+               }
+               return jobResources.getCPUArchitecture();
+       }
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateIndividualCPUCount(JobDefinitionType value) {        
+               ResourcesType jobResources = getOrCreateResources(value);
+               if (!jobResources.isSetIndividualCPUCount()) {
+                       jobResources.addNewIndividualCPUCount();
+               }
+               return jobResources.getIndividualCPUCount();
+       }
+
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateIndividualCPUSpeed(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if (!jobResources.isSetIndividualCPUSpeed()) {
+                       jobResources.addNewIndividualCPUSpeed();
+               }
+               return jobResources.getIndividualCPUSpeed();
+       }
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateIndividualCPUTime(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if ( !jobResources.isSetIndividualCPUTime() ) {
+                       jobResources.addNewIndividualCPUTime();
+               }
+               return jobResources.getIndividualCPUTime();
+       }
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateIndividualDiskSpace(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if (!jobResources.isSetIndividualDiskSpace()) {
+                       jobResources.addNewIndividualDiskSpace();
+               }
+               return jobResources.getIndividualDiskSpace();
+       }
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateIndividualPhysicalMemory(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if (!jobResources.isSetIndividualPhysicalMemory()) {
+                       jobResources.addNewIndividualPhysicalMemory();
+               }
+               return jobResources.getIndividualPhysicalMemory();
+       }
+
+       public static JobDescriptionType 
getOrCreateJobDescription(JobDefinitionType value) {
+               if (value.getJobDescription() == null) {
+                       return value.addNewJobDescription();
+               }
+               return value.getJobDescription();
+       }
+
+       public static JobIdentificationType 
getOrCreateJobIdentification(JobDefinitionType value) {
+               JobDescriptionType descr = getOrCreateJobDescription(value);
+               if (descr.getJobIdentification() == null) {
+                       return descr.addNewJobIdentification();
+               }
+               return descr.getJobIdentification();
+       }
+
+       public static OperatingSystemType 
getOrCreateOperatingSystem(JobDefinitionType value)
+       {
+               ResourcesType jobResources = getOrCreateResources(value);       
 
+               if(!jobResources.isSetOperatingSystem()) {
+                       jobResources.addNewOperatingSystem();
+               }
+               return jobResources.getOperatingSystem();
+       }
+
+       public static ResourcesType getOrCreateResources(JobDefinitionType 
value) {
+               JobDescriptionType jobDescr = getOrCreateJobDescription(value);
+               if (!jobDescr.isSetResources()) {
+                       jobDescr.addNewResources();
+               }
+               return jobDescr.getResources();
+       }
+
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateTotalCPUCount(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if ( !jobResources.isSetTotalCPUCount() ) {
+                       jobResources.addNewTotalCPUCount();
+               }
+               return jobResources.getTotalCPUCount();
+       }
+
+
+       public static org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
getOrCreateTotalResourceCount(JobDefinitionType value) {
+
+               ResourcesType jobResources = getOrCreateResources(value);
+               if ( !jobResources.isSetTotalResourceCount())
+               {
+                       jobResources.addNewTotalResourceCount();
+               }
+               return jobResources.getTotalResourceCount();
+       }
+
+       public static POSIXApplicationType 
getOrCreatePOSIXApplication(JobDefinitionType value) {
+               
+               ApplicationType application = getOrCreateApplication(value);
+               
+               if(getHPCProfileApplication(value) != null){
+                       //TODO handle: not creating POSIX element if HPCProfile 
already exists
+                       return getPOSIXApplication(value);
+               }
+               
+               if (getPOSIXApplication(value) == null) {
+                       XmlCursor acursor = application.newCursor();
+                       acursor.toEndToken();
+                       acursor.insertElement(POSIX_APPLICATION);
+                       acursor.dispose();
+               }
+               return getPOSIXApplication(value);
+       }
+
+       public static POSIXApplicationType 
getPOSIXApplication(JobDefinitionType value) {
+               if (value != null &&
+                               value.getJobDescription() != null && 
+                               value.getJobDescription().isSetApplication() ) {
+                       XmlCursor acursor = 
value.getJobDescription().getApplication().newCursor();
+                       if (acursor.toFirstChild()) {
+                               do {
+                                       
if(acursor.getName().equals(POSIX_APPLICATION)) {
+                                               XmlObject result = 
acursor.getObject();
+                                               acursor.dispose();
+                                               return (POSIXApplicationType) 
result;
+                                       }
+                               } while (acursor.toNextSibling());
+                               acursor.dispose();
+                               return null;
+                       } else {
+                               acursor.dispose();                              
 
+                               return null;
+                       }
+               } else {
+                       return null;
+               }
+       }
+       
+       public static HPCProfileApplicationType 
getOrCreateHPCProfileApplication(JobDefinitionType value) {
+
+               ApplicationType application = getOrCreateApplication(value);
+               
+               if(getPOSIXApplication(value) != null){
+                       //TODO handle: creating HPC element if POSIX already 
exists
+                       return getHPCProfileApplication(value);
+               }
+               
+               if (getHPCProfileApplication(value) == null) {
+                       XmlCursor acursor = application.newCursor();
+                       acursor.toEndToken();
+                       acursor.insertElement(HPC_PROFILE_APPLICATION);
+                       acursor.dispose();
+               }
+               return getHPCProfileApplication(value);
+       }
+
+       
+       public static HPCProfileApplicationType 
getHPCProfileApplication(JobDefinitionType value) {
+               if (value != null &&
+                               value.getJobDescription() != null && 
+                               value.getJobDescription().isSetApplication() ) {
+                       XmlCursor acursor = 
value.getJobDescription().getApplication().newCursor();
+                       if (acursor.toFirstChild()) {
+                               do {
+                                       
if(acursor.getName().equals(HPC_PROFILE_APPLICATION)) {
+                                               XmlObject result = 
acursor.getObject();
+                                               acursor.dispose();
+                                               return 
(HPCProfileApplicationType) result;
+                                       }
+                               } while (acursor.toNextSibling());
+                               acursor.dispose();
+                               return null;
+                       } else {
+                               acursor.dispose();                              
 
+                               return null;
+                       }
+               } else {
+                       return null;
+               }
+       }
+
+       
+       
+
+       public static RangeValueType 
getTotalCPUCountRequirements(JobDefinitionType value) {
+               if(value != null && value.getJobDescription() != null && 
value.getJobDescription().isSetResources() && 
+                               
value.getJobDescription().getResources().isSetTotalCPUCount()){
+                       return 
toU6RangeValue(value.getJobDescription().getResources().getTotalCPUCount());
+               }
+               else
+                       return null;
+       }
+
+       public static RangeValueType 
getTotalResourceCountRequirements(JobDefinitionType value) {
+               if(value != null && value.getJobDescription() != null && 
value.getJobDescription().isSetResources() && 
+                               
value.getJobDescription().getResources().isSetTotalResourceCount()){
+                       return 
toU6RangeValue(value.getJobDescription().getResources().getTotalResourceCount());
+               }
+               else
+                       return null;
+       }
+
+
+       public static RangeValueType 
toU6RangeValue(org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType jsdlType) {
+               RangeValueType result = new RangeValueType();
+               if(jsdlType.getExactArray().length > 0){
+                       
result.setExact(jsdlType.getExactArray(0).getDoubleValue());                
+               }
+               if(jsdlType.isSetLowerBoundedRange()){
+                       
result.setLowerBound(jsdlType.getLowerBoundedRange().getDoubleValue());         
       
+               }
+               if(jsdlType.isSetUpperBoundedRange()){
+                       
result.setUpperBound(jsdlType.getUpperBoundedRange().getDoubleValue());         
       
+               }
+               return result;
+       }
+
+
+
+       public static void setCPUArchitectureRequirements(JobDefinitionType 
value, ProcessorRequirement cpuArchitecture) { 
+               if(cpuArchitecture == null || cpuArchitecture.getValue() == 
null) return;
+               CPUArchitectureType cpuArch = getOrCreateCPUArchitecture(value);
+               
cpuArch.setCPUArchitectureName(ProcessorArchitectureEnumeration.Enum.forString(cpuArchitecture.getValue()));
        
+       }
+
+       public static void setIndividualCPUCountRequirements(JobDefinitionType 
value, RangeValueType cpuCount) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
individualCPUCount = getOrCreateIndividualCPUCount(value);
+               setRangeValue(cpuCount, individualCPUCount);
+       }
+
+       public static void setIndividualCPUSpeedRequirements(JobDefinitionType 
value, RangeValueType cpuSpeed) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
individualCPUSpeed = getOrCreateIndividualCPUSpeed(value);
+               setRangeValue(cpuSpeed, individualCPUSpeed);
+       }
+
+       public static void setIndividualCPUTimeRequirements(JobDefinitionType 
value, RangeValueType cpuTime) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
cpuIndividualTime = getOrCreateIndividualCPUTime(value);       
+               setRangeValue(cpuTime, cpuIndividualTime);
+       }
+
+       public static void setIndividualDiskSpaceRequirements(JobDefinitionType 
value, RangeValueType diskSpace) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
individualDiskSpace = getOrCreateIndividualDiskSpace(value);
+               setRangeValue(diskSpace, individualDiskSpace);
+       }
+
+       public static void 
setIndividualPhysicalMemoryRequirements(JobDefinitionType value, RangeValueType 
physicalMemory) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
individualPhysicalMemory = getOrCreateIndividualPhysicalMemory(value);
+               setRangeValue(physicalMemory, individualPhysicalMemory);
+       }
+
+
+       public static void setName(JobDefinitionType value, String name) {
+               getOrCreateJobIdentification(value).setJobName(name);
+       }
+
+       public static void setOperatingSystemRequirements(JobDefinitionType 
value, OSRequirement osType) {
+               if(osType == null || osType.getOSType() == null) return;
+               OperatingSystemType os_Type = getOrCreateOperatingSystem(value);
+               OperatingSystemTypeType ostt = 
os_Type.addNewOperatingSystemType();
+               
ostt.setOperatingSystemName(OperatingSystemTypeEnumeration.Enum.forString(osType.getOSType().getValue()));
+               if(osType.getOSVersion() != null) 
+               {
+                       
os_Type.setOperatingSystemVersion(osType.getOSVersion());
+               }
+       }
+
+       public static void setRangeValue(RangeValueType u6Type, 
org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType jsdlType) {
+               Double exact = u6Type.getExact();
+               Double epsilon = u6Type.getEpsilon();
+               Double lower = u6Type.getLowerBound();
+               Double upper = u6Type.getUpperBound();
+
+
+               if(lower.isNaN() && upper.isNaN())
+               {
+                       ExactType exactType = jsdlType.getExactArray().length > 
0 ? jsdlType.getExactArray(0) : jsdlType.addNewExact();
+                       exactType.setDoubleValue(exact);
+                       if(!epsilon.isNaN() && epsilon != 0)
+                       {
+                               exactType.setEpsilon(epsilon);
+                       }
+               }
+               else
+               {
+                       if(!lower.isNaN())
+                       {
+                               BoundaryType lowerBound = 
jsdlType.isSetLowerBoundedRange() ? jsdlType.getLowerBoundedRange() : 
jsdlType.addNewLowerBoundedRange(); 
+                               lowerBound.setDoubleValue(lower);
+                               
lowerBound.setExclusiveBound(!u6Type.isIncludeLowerBound());
+                       }
+
+                       if(!upper.isNaN())
+                       {
+                               BoundaryType upperBound = 
jsdlType.isSetUpperBoundedRange() ? jsdlType.getUpperBoundedRange() : 
jsdlType.addNewUpperBoundedRange();
+                               upperBound.setDoubleValue(upper);
+                               
upperBound.setExclusiveBound(!u6Type.isIncludeUpperBound());
+                       }
+               }
+       }
+
+       public static void setTotalCPUCountRequirements(JobDefinitionType 
value, RangeValueType cpuCount) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType 
cpuTotalCount = getOrCreateTotalCPUCount(value);        
+               setRangeValue(cpuCount, cpuTotalCount);
+       }
+
+       public static void setTotalResourceCountRequirements(JobDefinitionType 
value, RangeValueType resourceCount) {
+               org.ggf.schemas.jsdl.x2005.x11.jsdl.RangeValueType totalCount = 
getOrCreateTotalResourceCount(value);   
+               setRangeValue(resourceCount, totalCount);
+       }
+}

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSRequirement.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSRequirement.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSRequirement.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSRequirement.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,94 @@
+package org.apache.airavata.gfac.provider.utils;
+
+
+/**
+ * 
+ * The requirements for target operating system.
+ * 
+ * @author Alexei Baklushin
+ * @version $Id: OperatingSystemRequirementsType.java,v 1.7 2006/08/28 
07:49:07 baklushin Exp $
+ * 
+ */
+public class OSRequirement implements ResourceRequirement{
+    private OSType osType;
+    private String version;
+    protected boolean enabled;
+    
+    
+    public OSRequirement() {
+    }
+
+    /**
+     * 
+     * @param type -
+     *            the type of the O/S
+     * @param version -
+     *            the version of the O/S
+     */
+    public OSRequirement(OSType osType, String osVersion) {
+        setOSType(osType);
+        setOSVersion(osVersion);
+    }
+
+    /**
+     * Set the type of the O/S
+     * 
+     * @param type -
+     *            the type of the O/S
+     */
+    public void setOSType(OSType osType) {
+        this.osType = osType;
+    }
+
+    /**
+     * Get the type of the O/S
+     * 
+     * @return the type of the O/S
+     */
+    public OSType getOSType() {
+        return osType;
+    }
+
+    /**
+     * Set the version of the O/S
+     * 
+     * @param version -
+     *            the version of the O/S
+     */
+    public void setOSVersion(String version) {
+        this.version = version;
+    }
+
+    /**
+     * Get the version of the O/S
+     * 
+     * @return the version of the O/S
+     */
+    public String getOSVersion() {
+        return version;
+    }
+
+    /**
+     * 
+     * equals this instance of class with another instance
+     */
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj==null || getClass() != obj.getClass()) return false;
+        final OSRequirement other = (OSRequirement) obj;
+        boolean typeEqual = osType == null ? other.osType == null : 
osType.equals(other.osType);
+        boolean versionEqual = version == null ? other.version == null : 
version.equals(other.version);
+        return typeEqual && versionEqual && isEnabled() == other.isEnabled();
+    }
+
+
+
+       public boolean isEnabled() {
+               return enabled;
+       }
+
+       public void setEnabled(boolean enabled) {
+               this.enabled = enabled;
+       }
+}
\ No newline at end of file

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSType.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSType.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSType.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/OSType.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,109 @@
+package org.apache.airavata.gfac.provider.utils;
+
+
+/**
+ * @version $Id: OSType.java,v 1.2 2006/07/21 11:28:56 baklushin Exp $
+ * @author Alexei Baklushin
+ */
+
+public enum OSType {
+
+       unknown("Unknown"), //$NON-NLS-1$
+       linux("LINUX"), //$NON-NLS-1$
+       mac_os("MACOS"), //$NON-NLS-1$
+       win95("WIN95"), //$NON-NLS-1$
+       win98("WIN98"), //$NON-NLS-1$
+       windows_R_Me("Windows_R_Me"), //$NON-NLS-1$
+       winNT("WINNT"), //$NON-NLS-1$
+       windows_2000("Windows_2000"), //$NON-NLS-1$
+       windows_XP("Windows_XP"), //$NON-NLS-1$
+       msdos("MSDOS"), //$NON-NLS-1$
+       solaris("Solaris"), //$NON-NLS-1$
+       sunOS("SunOS"), //$NON-NLS-1$
+       freeBSD("FreeBSD"), //$NON-NLS-1$
+       netBSD("NetBSD"), //$NON-NLS-1$
+       openBSD("OpenBSD"), //$NON-NLS-1$
+       bsdunix("BSDUNIX"), //$NON-NLS-1$
+       aix("AIX"), //$NON-NLS-1$
+       z_OS("z_OS"), //$NON-NLS-1$
+       os_2("OS_2"), //$NON-NLS-1$
+       os9("OS9"), //$NON-NLS-1$
+       netWare("NetWare"), //$NON-NLS-1$
+       tru64_unix("Tru64_UNIX"), //$NON-NLS-1$
+       irix("IRIX"), //$NON-NLS-1$
+       osf("OSF"), //$NON-NLS-1$
+
+       mvs("MVS"), //$NON-NLS-1$
+       os400("OS400"), //$NON-NLS-1$
+       javaVM("JavaVM"), //$NON-NLS-1$
+       win3x("WIN3x"), //$NON-NLS-1$
+       winCE("WINCE"), //$NON-NLS-1$
+       NCR3000("NCR3000"), //$NON-NLS-1$
+       dc_os("DC_OS"), //$NON-NLS-1$
+       reliant_unix("Reliant_UNIX"), //$NON-NLS-1$
+       sco_unixWare("SCO_UnixWare"), //$NON-NLS-1$
+       sco_openServer("SCO_OpenServer"), //$NON-NLS-1$
+       sequent("Sequent"), //$NON-NLS-1$
+       u6000("U6000"), //$NON-NLS-1$
+       aseries("ASERIES"), //$NON-NLS-1$
+       tandemNSK("TandemNSK"), //$NON-NLS-1$
+       tandemNT("TandemNT"), //$NON-NLS-1$
+       bs2000("BS2000"), //$NON-NLS-1$
+       lynx("Lynx"), //$NON-NLS-1$
+       xenix("XENIX"), //$NON-NLS-1$
+       vm("VM"), //$NON-NLS-1$
+       interactive_unix("Interactive_UNIX"), //$NON-NLS-1$
+       gnu_hurd("GNU_Hurd"), //$NON-NLS-1$
+       mach_kernel("MACH_Kernel"), //$NON-NLS-1$
+       inferno("Inferno"), //$NON-NLS-1$
+       qnx("QNX"), //$NON-NLS-1$
+       epoc("EPOC"), //$NON-NLS-1$
+       ixWorks("IxWorks"), //$NON-NLS-1$
+       vxWorks("VxWorks"), //$NON-NLS-1$
+       mint("MiNT"), //$NON-NLS-1$
+       beOS("BeOS"), //$NON-NLS-1$
+       hp_mpe("HP_MPE"), //$NON-NLS-1$
+       nextStep("NextStep"), //$NON-NLS-1$
+       palmPilot("PalmPilot"), //$NON-NLS-1$
+       rhapsody("Rhapsody"), //$NON-NLS-1$
+       dedicated("Dedicated"), //$NON-NLS-1$
+       os_390("OS_390"), //$NON-NLS-1$
+       vse("VSE"), //$NON-NLS-1$
+       tpf("TPF"), //$NON-NLS-1$
+       caldera_open_unix("Caldera_Open_UNIX"), //$NON-NLS-1$
+       attunix("ATTUNIX"), //$NON-NLS-1$
+       dgux("DGUX"), //$NON-NLS-1$
+       decnt("DECNT"), //$NON-NLS-1$
+       openVMS("OpenVMS"), //$NON-NLS-1$
+       hpux("HPUX"), //$NON-NLS-1$
+       other("other"); //$NON-NLS-1$
+
+
+       private OSType(String value) { 
+               this.value = value;
+       }
+
+       private final String value;
+
+       public String getValue() { 
+               return value;
+       }
+
+       public static OSType fromString(String value)
+       {
+               for(OSType type : values())
+               {
+                       if(type.value.equals(value))
+                       {
+                               return type;
+                       }
+               }
+               return null;
+       }
+       
+       public String toString()
+       {
+               return value;
+       }
+
+}

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ProcessorRequirement.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ProcessorRequirement.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ProcessorRequirement.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ProcessorRequirement.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,45 @@
+package org.apache.airavata.gfac.provider.utils;
+
+/**
+ * @version $Id: ProcessorType.java,v 1.2 2006/07/25 10:43:39 baklushin Exp $
+ * @author Alexei Baklushin
+ */
+public enum ProcessorRequirement{
+       sparc("sparc"), //$NON-NLS-1$
+       powerpc("powerpc"), //$NON-NLS-1$
+       x86("x86"), //$NON-NLS-1$
+       x86_32("x86_32"), //$NON-NLS-1$
+       x86_64("x86_64"), //$NON-NLS-1$
+       parisc("parisc"), //$NON-NLS-1$
+       mips("mips"), //$NON-NLS-1$
+       ia64("ia64"), //$NON-NLS-1$
+       arm("arm"), //$NON-NLS-1$
+       other("other"); //$NON-NLS-1$
+
+
+       ProcessorRequirement(String value) {
+               this.value = value; 
+       }
+
+       private final String value;
+
+       public String getValue() { 
+               return value; 
+       }
+
+       public static ProcessorRequirement fromString(String value)
+       {
+               for (ProcessorRequirement type : values()) {
+                       if (type.value.equals(value)) {
+                               return type;
+                       }
+               }
+               return other;
+       }
+       
+       public String toString()
+       {
+               return value;
+       }
+
+}

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/RangeValueType.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/RangeValueType.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/RangeValueType.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/RangeValueType.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,260 @@
+package org.apache.airavata.gfac.provider.utils;
+
+
+/**
+ * The representation of range requirement types in JSDL.
+ * 
+ * @author Alexei Baklushin
+ * @version $Id: RangeValueType.java,v 1.4 2008/06/06 11:15:01 hohmannc Exp $
+ * @version $Id: RangeValueType.java,v 1.3 2006/08/10 09:31:54 lukichev Exp $
+ * 
+ */
+public class RangeValueType implements ResourceRequirement {
+       
+
+    private double exact = Double.NaN;
+    private double lowerBound = Double.NEGATIVE_INFINITY;
+    private double upperBound = Double.POSITIVE_INFINITY;
+    
+    private double epsilon = Double.NaN;
+    private boolean includeLowerBound = true;
+    private boolean includeUpperBound = true;
+    
+    private boolean enabled = false;
+    
+    
+    public RangeValueType(double exact, double epsilon, double lowerBound, 
boolean includeLowerBound, double upperBound, boolean includeUpperBound, 
boolean enabled) {
+        this.exact = exact;
+       this.epsilon = epsilon;
+       this.lowerBound = lowerBound;
+        this.includeLowerBound = includeLowerBound;
+        this.upperBound = upperBound;
+        this.includeUpperBound = includeUpperBound;
+        this.enabled = enabled;
+    }
+   
+    
+    
+    /**
+        * Create the range requirements
+        * 
+        * @param exact -
+        *            the exact value
+        * @param lowerBound -
+        *            the lower bound
+        * @param upperBound -
+        *            the upper bound
+        * @param includelowerBound -
+        *            true, if lowerBound should be included in range
+        * @param includeUpperBound -
+        *            true, if upperBound should be included in range
+        * 
+        */
+    public RangeValueType(double exact, double epsilon, double lowerBound, 
boolean includeLowerBound, double upperBound, boolean includeUpperBound) {
+       
this(exact,epsilon,lowerBound,includeLowerBound,upperBound,includeUpperBound,false);
+        
+    }
+    
+    
+    /**
+        * Create the range requirements
+        * 
+        * @param exact -
+        *            the exact value
+        * @param lowerBound -
+        *            the lower bound
+        * @param upperBound -
+        *            the upper bound
+        */
+    public RangeValueType(double exact, double epsilon, double lowerBound, 
double upperBound) {
+       this(exact,epsilon,lowerBound,true,upperBound,true);
+    }
+    
+    
+    public RangeValueType(double exact, double lowerBound, double upperBound) {
+       this(exact,Double.NaN,lowerBound,true,upperBound,true);
+    }
+
+    /**
+        * Create the exact requirements
+        * 
+        * @param exact -
+        *            the exact value
+        * @param epsilon -
+        *            the epsilon arround exact
+        * 
+        */
+    public RangeValueType(double exact, double epsilon) {
+        this(exact,epsilon,Double.NaN,Double.NaN);
+    }
+
+    
+    /**
+        * Create the exact requirements
+        * 
+        * @param exact -
+        *            the exact value
+        */
+    public RangeValueType(double exact) {
+        this(exact,Double.NaN);
+    }
+
+    public RangeValueType() {
+    }
+
+    /**
+        * Get exact requirements
+        * 
+        * @return the exact requirements
+        */
+    public double getExact() {
+        return exact;
+    }
+
+    /**
+        * Set exact requirements
+        * 
+        * @param exact -
+        *            the exact requirements
+        */
+    public void setExact(double exact) {
+        this.exact = exact;
+    }
+    
+    /**
+        * Get epsilon
+        * 
+        * @return the epsilon
+        */
+    public double getEpsilon() {
+        return epsilon;
+    }
+
+    /**
+        * Set epsilon
+        * 
+        * @param epsilon -
+        *            epsilon belonging to to exact requirements
+        */
+    public void setEpsilon(double epsilon) {
+        this.epsilon = epsilon;
+    }
+
+    /**
+        * Get lower bound
+        * 
+        * @return the lower bound
+        */
+    public double getLowerBound() {
+        return lowerBound;
+    }
+
+    /**
+        * Set lower bound
+        * 
+        * @param lowerBound -
+        *            the lower bound
+        */
+    public void setLowerBound(double lowerBound) {
+        this.lowerBound = lowerBound;
+    }
+
+    /**
+        * Get upper bound
+        * 
+        * @return the upper bound
+        */
+    public double getUpperBound() {
+        return upperBound;
+    }
+
+    /**
+        * Set upper bound
+        * 
+        * @param upperBound -
+        *            the upper bound
+        */
+    public void setUpperBound(double upperBound) {
+        this.upperBound = upperBound;
+    }
+
+    /**
+        * Test if requirements are met
+        * 
+        * @param value -
+        *            the tested value
+        * @return <code>true</code> if value is in the range and not less than
+        *         the exact value
+        */
+    public boolean lowerThanDouble(double value) {
+        return (value >= exact && value >= lowerBound && value <= upperBound) 
? true : false;
+    }
+
+    public String toString() {
+        if (lowerBound == Double.NEGATIVE_INFINITY && upperBound == 
Double.POSITIVE_INFINITY) {
+            return Double.toString(exact);
+        }
+        else {
+            return "(e=" + Double.toString(exact) + ",l=" + 
Double.toString(lowerBound) + ",u=" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                    + Double.toString(upperBound) + ")"; //$NON-NLS-1$
+        }
+    }
+
+
+       public boolean isIncludeLowerBound() {
+               return includeLowerBound;
+       }
+
+
+       public void setIncludeLowerBound(boolean includeLowerBound) {
+               this.includeLowerBound = includeLowerBound;
+       }
+
+
+       public boolean isIncludeUpperBound() {
+               return includeUpperBound;
+       }
+
+
+       public void setIncludeUpperBound(boolean includeUpperBound) {
+               this.includeUpperBound = includeUpperBound;
+       }
+       
+       public RangeValueType clone(){
+               return new RangeValueType(this.exact, this.epsilon, 
this.lowerBound, this.includeLowerBound, this.upperBound, 
this.includeUpperBound,this.enabled);
+       }
+
+
+
+       public boolean isEnabled() {
+               return enabled;
+       }
+
+
+
+       public void setEnabled(boolean enabled) {
+               this.enabled = enabled;
+       }
+
+       
+       public boolean equals(Object o)
+       {
+               if(! (o instanceof RangeValueType)) return false;
+               RangeValueType other = (RangeValueType) o;
+               return doublesEqual(getExact(),other.getExact())
+               && doublesEqual(getEpsilon(), other.getEpsilon())
+               && doublesEqual(getLowerBound(), other.getLowerBound())
+               && doublesEqual(getUpperBound(), other.getUpperBound())
+               && isIncludeLowerBound() == other.isIncludeLowerBound()
+               && isIncludeUpperBound() == other.isIncludeUpperBound()
+               && isEnabled() == other.isEnabled();
+       }
+
+       
+       private boolean doublesEqual(double a, double b)
+       {
+               Double A = new Double(a);
+               Double B = new Double(b);
+               return A.equals(B);
+       }
+}

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ResourceRequirement.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ResourceRequirement.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ResourceRequirement.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ResourceRequirement.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,15 @@
+package org.apache.airavata.gfac.provider.utils;
+
+
+
+public interface ResourceRequirement extends Cloneable {
+       
+       /**
+        * States whether this resource requirement is active
+        * and should be written into the job description.
+        * @return
+        */
+       public boolean isEnabled();
+       
+       public void setEnabled(boolean enabled);
+}

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/URIUtils.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/URIUtils.java?rev=1448683&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/URIUtils.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/URIUtils.java
 Thu Feb 21 15:37:25 2013
@@ -0,0 +1,86 @@
+package org.apache.airavata.gfac.provider.utils;
+
+import org.apache.commons.httpclient.URI;
+import org.apache.commons.httpclient.URIException;
+import org.apache.commons.httpclient.util.URIUtil;
+
+public class URIUtils {
+
+       public static String encodeAll(String uri) throws URIException
+       {
+               String result = encodeAuthority(uri);
+               result = encodePath(uri);
+               result = encodeQuery(result );
+               result  = encodeFragment(result );
+               return result;
+       }
+       
+       public static String encodeAuthority(String uri) throws URIException
+       {
+               int start = uri.indexOf("//");
+               if(start == -1) return uri;
+               start++;
+               int end = uri.indexOf("/",start+1);
+               if(end == -1) end = uri.indexOf("?",start+1);
+               if(end == -1) end = uri.indexOf("#",start+1);
+               if(end == -1) end = uri.length();
+               String before = uri.substring(0, start+1);
+               String authority= uri.substring(start+1,end);
+               String after = uri.substring(end);
+               authority = URIUtil.encode(authority, URI.allowed_authority);
+       
+               return before+authority+after;
+       }
+       
+       public static String encodePath(String uri) throws URIException
+       {
+               int doubleSlashIndex = uri.indexOf("//");
+               boolean hasAuthority =  doubleSlashIndex >= 0;
+               int start = -1;
+               if(hasAuthority)
+               {
+                       start = uri.indexOf("/",doubleSlashIndex+2);
+               }
+               else
+               {
+                       start = uri.indexOf(":");
+               }
+               if(start == -1) return uri;
+               
+               int end = uri.indexOf("?",start+1);
+               if(end == -1) end = uri.indexOf("#",start+1);
+               if(end == -1) end = uri.length();
+               String before = uri.substring(0, start+1);
+               String path= uri.substring(start+1,end);
+               String after = uri.substring(end);
+               path = URIUtil.encode(path, URI.allowed_abs_path);
+               return before+path+after;
+       }
+       
+       
+       public static String encodeQuery(String uri) throws URIException
+       {
+               int queryStart = uri.indexOf("?");
+               if(queryStart == -1) return uri;
+               int queryEnd = uri.indexOf("#");
+               if(queryEnd == -1) queryEnd = uri.length();
+               
+               String beforeQuery = uri.substring(0, queryStart+1);
+               String query = uri.substring(queryStart+1,queryEnd);
+               String afterQuery = uri.substring(queryEnd);
+               query = URIUtil.encode(query, URI.allowed_query);
+               return beforeQuery+query+afterQuery;
+       }
+       
+       
+       public static String encodeFragment(String uri) throws URIException
+       {
+               int fragmentStart = uri.indexOf("#");
+               if(fragmentStart == -1) return uri;
+
+               String beforeFragment = uri.substring(0, fragmentStart+1);
+               String fragment = uri.substring(fragmentStart+1);
+               fragment = URIUtil.encode(fragment, URI.allowed_fragment);
+               return beforeFragment+fragment;
+       }
+}
\ No newline at end of file


Reply via email to