You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2013/02/21 16:37:26 UTC
svn commit: r1448683 -
/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/
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