Return-Path: X-Original-To: apmail-airavata-commits-archive@www.apache.org Delivered-To: apmail-airavata-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9F662EFB8 for ; Thu, 21 Feb 2013 15:37:49 +0000 (UTC) Received: (qmail 35569 invoked by uid 500); 21 Feb 2013 15:37:49 -0000 Delivered-To: apmail-airavata-commits-archive@airavata.apache.org Received: (qmail 35530 invoked by uid 500); 21 Feb 2013 15:37:49 -0000 Mailing-List: contact commits-help@airavata.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@airavata.apache.org Delivered-To: mailing list commits@airavata.apache.org Received: (qmail 35513 invoked by uid 99); 21 Feb 2013 15:37:49 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Feb 2013 15:37:48 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_FRT_ADULT2 X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Feb 2013 15:37:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id C386123888D2; Thu, 21 Feb 2013 15:37:26 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1448683 - /airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/ Date: Thu, 21 Feb 2013 15:37:26 -0000 To: commits@airavata.apache.org From: lahiru@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130221153726.C386123888D2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 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 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 true 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