http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java deleted file mode 100644 index 8533abb..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java +++ /dev/null @@ -1,453 +0,0 @@ -/* - * - * 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.bes.provider.impl; - -import java.util.Calendar; -import java.util.Map; - -import org.apache.airavata.registry.cpi.AppCatalogException; -import org.apache.airavata.common.exception.ApplicationSettingsException; -import org.apache.airavata.gfac.core.GFacException; -import org.apache.airavata.gfac.bes.security.UNICORESecurityContext; -import org.apache.airavata.gfac.bes.security.X509SecurityContext; -import org.apache.airavata.gfac.bes.utils.BESConstants; -import org.apache.airavata.gfac.bes.utils.DataTransferrer; -import org.apache.airavata.gfac.bes.utils.JSDLGenerator; -import org.apache.airavata.gfac.bes.utils.SecurityUtils; -import org.apache.airavata.gfac.bes.utils.StorageCreator; -import org.apache.airavata.gfac.core.context.JobExecutionContext; -import org.apache.airavata.gfac.core.provider.AbstractProvider; -import org.apache.airavata.gfac.core.provider.GFacProvider; -import org.apache.airavata.gfac.core.provider.GFacProviderException; -import org.apache.airavata.gfac.core.GFacUtils; -import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterface; -import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol; -import org.apache.airavata.model.appcatalog.computeresource.UnicoreJobSubmission; -import org.apache.airavata.model.messaging.event.JobIdentifier; -import org.apache.airavata.model.messaging.event.JobStatusChangeRequestEvent; -import org.apache.airavata.model.experiment.JobDetails; -import org.apache.airavata.model.experiment.JobState; -import org.apache.xmlbeans.XmlCursor; -import org.bouncycastle.asn1.x500.style.BCStyle; -import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration; -import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration.Enum; -import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStatusType; -import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityDocument; -import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityResponseDocument; -import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesDocument; -import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesResponseDocument; -import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument; -import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3.x2005.x08.addressing.EndpointReferenceType; - -import de.fzj.unicore.bes.client.ActivityClient; -import de.fzj.unicore.bes.client.FactoryClient; -import de.fzj.unicore.bes.faults.UnknownActivityIdentifierFault; -import de.fzj.unicore.uas.client.StorageClient; -import de.fzj.unicore.wsrflite.xmlbeans.WSUtilities; -import eu.emi.security.authn.x509.impl.X500NameUtils; -import eu.unicore.util.httpclient.DefaultClientConfiguration; - -public class BESProvider extends AbstractProvider implements GFacProvider, - BESConstants { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - - private DefaultClientConfiguration secProperties; - - private String jobId; - - public void initialize(JobExecutionContext jobExecutionContext) - throws GFacProviderException, GFacException { - log.info("Initializing UNICORE Provider.."); - super.initialize(jobExecutionContext); - secProperties = (DefaultClientConfiguration) jobExecutionContext.getProperty(PROP_CLIENT_CONF); - if (secProperties != null) { - secProperties = secProperties.clone(); - return; - } - SecurityUtils.addSecurityContext(jobExecutionContext); - UNICORESecurityContext unicoreContext = (UNICORESecurityContext) jobExecutionContext.getSecurityContext(X509SecurityContext.X509_SECURITY_CONTEXT); - try{ - if (jobExecutionContext.getExperiment() - .getUserConfigurationData().isGenerateCert()) { - secProperties = unicoreContext - .getDefaultConfiguration(false, jobExecutionContext - .getExperiment().getUserConfigurationData()); - }else { - secProperties = unicoreContext.getDefaultConfiguration(false); - } - - } catch (ApplicationSettingsException e) { - throw new GFacProviderException("Error initializing security of Unicore provider", e); - } - if (log.isDebugEnabled()) { - log.debug("Security properties initialized."); - } - } - - public void execute(JobExecutionContext jobExecutionContext) - throws GFacProviderException, GFacException { - - StorageClient sc = null; - try { - JobSubmissionInterface preferredJobSubmissionInterface = jobExecutionContext.getPreferredJobSubmissionInterface(); - JobSubmissionProtocol protocol = preferredJobSubmissionInterface.getJobSubmissionProtocol(); - String interfaceId = preferredJobSubmissionInterface.getJobSubmissionInterfaceId(); - String factoryUrl = null; - if (protocol.equals(JobSubmissionProtocol.UNICORE)) { - UnicoreJobSubmission unicoreJobSubmission = GFacUtils.getUnicoreJobSubmission(interfaceId); - factoryUrl = unicoreJobSubmission.getUnicoreEndPointURL(); - } - EndpointReferenceType eprt = EndpointReferenceType.Factory.newInstance(); - eprt.addNewAddress().setStringValue(factoryUrl); - String userDN = getUserName(jobExecutionContext); - - // TODO: to be removed - if (userDN == null || userDN.equalsIgnoreCase("admin")) { - userDN = "CN=zdv575, O=Ultrascan Gateway, C=DE"; - } - CreateActivityDocument cad = CreateActivityDocument.Factory.newInstance(); - JobDefinitionDocument jobDefDoc = JobDefinitionDocument.Factory.newInstance(); - - // create storage - StorageCreator storageCreator = new StorageCreator(secProperties, factoryUrl, 5, null); - sc = storageCreator.createStorage(); - - JobDefinitionType jobDefinition = JSDLGenerator.buildJSDLInstance(jobExecutionContext, sc.getUrl()).getJobDefinition(); - cad.addNewCreateActivity().addNewActivityDocument().setJobDefinition(jobDefinition); - log.info("JSDL" + jobDefDoc.toString()); - - // upload files if any - DataTransferrer dt = new DataTransferrer(jobExecutionContext, sc); - dt.uploadLocalFiles(); - - JobDetails jobDetails = new JobDetails(); - FactoryClient factory = new FactoryClient(eprt, secProperties); - - log.info("Activity Submitting to {} ... \n", factoryUrl)); - CreateActivityResponseDocument response = factory.createActivity(cad); - log.info("Activity Submitted to {} \n", factoryUrl); - - EndpointReferenceType activityEpr = response.getCreateActivityResponse().getActivityIdentifier(); - - log.info("Activity : " + activityEpr.getAddress().getStringValue() + " Submitted."); - - // factory.waitWhileActivityIsDone(activityEpr, 1000); - jobId = WSUtilities.extractResourceID(activityEpr); - if (jobId == null) { - jobId = new Long(Calendar.getInstance().getTimeInMillis()) - .toString(); - } - log.info("JobID: " + jobId); - jobDetails.setJobID(jobId); - jobDetails.setJobDescription(activityEpr.toString()); - - jobExecutionContext.setJobDetails(jobDetails); - GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.SUBMITTED); - log.info(formatStatusMessage(activityEpr.getAddress() - .getStringValue(), factory.getActivityStatus(activityEpr) - .toString())); - - waitUntilDone(eprt, activityEpr, jobDetails, secProperties); - - ActivityStatusType activityStatus = null; - activityStatus = getStatus(factory, activityEpr); - log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), activityStatus.getState().toString())); - ActivityClient activityClient; - activityClient = new ActivityClient(activityEpr, secProperties); - dt.setStorageClient(activityClient.getUspaceClient()); - - if ((activityStatus.getState() == ActivityStateEnumeration.FAILED)) { - String error = activityStatus.getFault().getFaultcode() - .getLocalPart() - + "\n" - + activityStatus.getFault().getFaultstring() - + "\n EXITCODE: " + activityStatus.getExitCode(); - log.info(error); - - JobState applicationJobStatus = JobState.FAILED; - sendNotification(jobExecutionContext,applicationJobStatus); - GFacUtils.updateJobStatus(jobExecutionContext, jobDetails, applicationJobStatus); - try {Thread.sleep(5000);} catch (InterruptedException e) {} - - //What if job is failed before execution and there are not stdouts generated yet? - log.debug("Downloading any standard output and error files, if they were produced."); - dt.downloadStdOuts(); - - } else if (activityStatus.getState() == ActivityStateEnumeration.CANCELLED) { - JobState applicationJobStatus = JobState.CANCELED; - sendNotification(jobExecutionContext,applicationJobStatus); - GFacUtils.updateJobStatus(jobExecutionContext, jobDetails, applicationJobStatus); - throw new GFacProviderException( - jobExecutionContext.getExperimentID() + "Job Canceled"); - } else if (activityStatus.getState() == ActivityStateEnumeration.FINISHED) { - try { - Thread.sleep(5000); - JobState applicationJobStatus = JobState.COMPLETE; - sendNotification(jobExecutionContext,applicationJobStatus); - - } catch (InterruptedException e) { - } - if (activityStatus.getExitCode() == 0) { - dt.downloadRemoteFiles(); - } else { - dt.downloadStdOuts(); - } - } - } catch (AppCatalogException e) { - log.error("Error while retrieving UNICORE job submission.."); - throw new GFacProviderException("Error while retrieving UNICORE job submission..", e); - } catch (Exception e) { - log.error("Cannot create storage.."); - throw new GFacProviderException("Cannot create storage..", e); - } finally { - // destroy sms instance - try { - if (sc != null) { - sc.destroy(); - } - } catch (Exception e) { - log.warn( - "Cannot destroy temporary SMS instance:" + sc.getUrl(), - e); - } - } - - } - - - private JobState getApplicationJobStatus(ActivityStatusType activityStatus) { - if (activityStatus == null) { - return JobState.UNKNOWN; - } - Enum state = activityStatus.getState(); - String status = null; - XmlCursor acursor = activityStatus.newCursor(); - try { - if (acursor.toFirstChild()) { - if (acursor.getName().getNamespaceURI() - .equals("http://schemas.ogf.org/hpcp/2007/01/fs")) { - status = acursor.getName().getLocalPart(); - } - } - if (status != null) { - if (status.equalsIgnoreCase("Queued") - || status.equalsIgnoreCase("Starting") - || status.equalsIgnoreCase("Ready")) { - return JobState.QUEUED; - } else if (status.equalsIgnoreCase("Staging-In")) { - return JobState.SUBMITTED; - } else if (status.equalsIgnoreCase("FINISHED")) { - return JobState.COMPLETE; - }else if(status.equalsIgnoreCase("Staging-Out")){ - return JobState.ACTIVE; - } - else if (status.equalsIgnoreCase("Executing")) { - return JobState.ACTIVE; - } else if (status.equalsIgnoreCase("FAILED")) { - return JobState.FAILED; - } else if (status.equalsIgnoreCase("CANCELLED")) { - return JobState.CANCELED; - } - } else { - if (ActivityStateEnumeration.CANCELLED.equals(state)) { - return JobState.CANCELED; - } else if (ActivityStateEnumeration.FAILED.equals(state)) { - return JobState.FAILED; - } else if (ActivityStateEnumeration.FINISHED.equals(state)) { - return JobState.COMPLETE; - } else if (ActivityStateEnumeration.RUNNING.equals(state)) { - return JobState.ACTIVE; - } - } - } finally { - if (acursor != null) - acursor.dispose(); - } - return JobState.UNKNOWN; - } - - /** - * EndpointReference need to be saved to make cancel work. - * - * @param activityEpr - * @param jobExecutionContext - * @throws GFacProviderException - */ - public boolean cancelJob( - JobExecutionContext jobExecutionContext) - throws GFacProviderException { - try { - String activityEpr = jobExecutionContext.getJobDetails().getJobDescription(); - // initSecurityProperties(jobExecutionContext); - EndpointReferenceType eprt = EndpointReferenceType.Factory - .parse(activityEpr); - JobSubmissionInterface preferredJobSubmissionInterface = jobExecutionContext.getPreferredJobSubmissionInterface(); - JobSubmissionProtocol protocol = preferredJobSubmissionInterface.getJobSubmissionProtocol(); - String interfaceId = preferredJobSubmissionInterface.getJobSubmissionInterfaceId(); - String factoryUrl = null; - if (protocol.equals(JobSubmissionProtocol.UNICORE)) { - UnicoreJobSubmission unicoreJobSubmission = GFacUtils.getUnicoreJobSubmission(interfaceId); - factoryUrl = unicoreJobSubmission.getUnicoreEndPointURL(); - } - EndpointReferenceType epr = EndpointReferenceType.Factory - .newInstance(); - epr.addNewAddress().setStringValue(factoryUrl); - - FactoryClient factory = new FactoryClient(epr, secProperties); - factory.terminateActivity(eprt); - return true; - } catch (Exception e) { - throw new GFacProviderException(e.getLocalizedMessage(), e); - } - - } - - // FIXME: Get user details - private String getUserName(JobExecutionContext context) { - // if (context.getConfigurationData()!= null) { - // return - // context.getConfigurationData().getBasicMetadata().getUserName(); - // } else { - return ""; - // } - } - - protected ActivityStatusType getStatus(FactoryClient fc, EndpointReferenceType activityEpr) - throws UnknownActivityIdentifierFault { - - GetActivityStatusesDocument stats = GetActivityStatusesDocument.Factory - .newInstance(); - - stats.addNewGetActivityStatuses().setActivityIdentifierArray( - new EndpointReferenceType[] { activityEpr }); - - GetActivityStatusesResponseDocument resDoc = fc - .getActivityStatuses(stats); - - ActivityStatusType activityStatus = resDoc - .getGetActivityStatusesResponse().getResponseArray()[0] - .getActivityStatus(); - return activityStatus; - } - - protected String formatStatusMessage(String activityUrl, String status) { - return String.format("Activity %s is %s.\n", activityUrl, status); - } - - protected String subStatusAsString(ActivityStatusType statusType) { - - StringBuffer sb = new StringBuffer(); - - sb.append(statusType.getState().toString()); - - XmlCursor acursor = statusType.newCursor(); - if (acursor.toFirstChild()) { - do { - if (acursor.getName().getNamespaceURI() - .equals("http://schemas.ogf.org/hpcp/2007/01/fs")) { - sb.append(":"); - sb.append(acursor.getName().getLocalPart()); - } - } while (acursor.toNextSibling()); - acursor.dispose(); - return sb.toString(); - } else { - acursor.dispose(); - return sb.toString(); - } - - } - - private String getCNFromUserDN(String userDN) { - return X500NameUtils.getAttributeValues(userDN, BCStyle.CN)[0]; - - } - - @Override - public void initProperties(Map<String, String> properties) - throws GFacProviderException, GFacException { - // TODO Auto-generated method stub - - } - - @Override - public void dispose(JobExecutionContext jobExecutionContext) - throws GFacProviderException, GFacException { - secProperties = null; - - } - - @Override - public void recover(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException { - // TODO: Auto generated method body. - } - - @Override - public void monitor(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException { - // TODO: Auto generated method body. - } - - protected void waitUntilDone(EndpointReferenceType factoryEpr, EndpointReferenceType activityEpr, JobDetails jobDetails, DefaultClientConfiguration secProperties) throws Exception { - - try { - FactoryClient factoryClient = new FactoryClient(factoryEpr, secProperties); - JobState applicationJobStatus = null; - - while ((factoryClient.getActivityStatus(activityEpr) != ActivityStateEnumeration.FINISHED) - && (factoryClient.getActivityStatus(activityEpr) != ActivityStateEnumeration.FAILED) - && (factoryClient.getActivityStatus(activityEpr) != ActivityStateEnumeration.CANCELLED) - && (applicationJobStatus != JobState.COMPLETE)) { - - ActivityStatusType activityStatus = getStatus(factoryClient, activityEpr); - applicationJobStatus = getApplicationJobStatus(activityStatus); - - sendNotification(jobExecutionContext,applicationJobStatus); - - // GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, - // applicationJobStatus); - try { - Thread.sleep(5000); - } catch (InterruptedException e) {} - continue; - } - } catch(Exception e) { - log.error("Error monitoring job status.."); - throw e; - } - } - private void sendNotification(JobExecutionContext jobExecutionContext, JobState status) { - JobStatusChangeRequestEvent jobStatus = new JobStatusChangeRequestEvent(); - JobIdentifier jobIdentity = new JobIdentifier(jobExecutionContext.getJobDetails().getJobID(), - jobExecutionContext.getTaskData().getTaskID(), - jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(), - jobExecutionContext.getExperimentID(), - jobExecutionContext.getGatewayID()); - jobStatus.setJobIdentity(jobIdentity); - jobStatus.setState(status); - log.debug(jobStatus.getJobIdentity().getJobId(), "Published job status change request, " + - "experiment {} , task {}", jobStatus.getJobIdentity().getExperimentId(), - jobStatus.getJobIdentity().getTaskId()); - jobExecutionContext.getLocalEventPublisher().publish(jobStatus); - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java deleted file mode 100644 index b25d2ee..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java +++ /dev/null @@ -1,205 +0,0 @@ -/* -* -* 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.bes.security; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Properties; -import java.util.Set; - -import org.apache.airavata.common.exception.ApplicationSettingsException; -import org.apache.airavata.common.utils.ServerSettings; -import org.apache.airavata.credential.store.store.CredentialReader; -import org.apache.airavata.gfac.core.GFacException; -import org.apache.airavata.gfac.core.RequestData; -import org.apache.airavata.gfac.bes.utils.BESConstants; -import org.apache.airavata.gfac.bes.utils.SecurityUtils; -import org.apache.airavata.gfac.core.provider.GFacProviderException; -import org.apache.airavata.model.experiment.UserConfigurationData; -import org.bouncycastle.asn1.x500.style.BCStyle; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import eu.emi.security.authn.x509.X509Credential; -import eu.emi.security.authn.x509.impl.KeyAndCertCredential; -import eu.emi.security.authn.x509.impl.X500NameUtils; -import eu.unicore.util.httpclient.DefaultClientConfiguration; - -public class UNICORESecurityContext extends X509SecurityContext { - - private static final long serialVersionUID = 1L; - protected static final Logger log = LoggerFactory.getLogger(UNICORESecurityContext.class); - private DefaultClientConfiguration secProperties; - - - public UNICORESecurityContext(CredentialReader credentialReader, RequestData requestData) { - super(credentialReader, requestData); - } - - - /** - * Get client configuration from MyProxy credentials. - * - * @return an instance of the default client configuration - * @throws GFacException - * @throws ApplicationSettingsException - * @throws GFacException, ApplicationSettingsException - */ - public DefaultClientConfiguration getDefaultConfiguration(Boolean enableMessageLogging) throws GFacException, ApplicationSettingsException { - try{ - X509Credential cred = getX509Credentials(); - secProperties = new DefaultClientConfiguration(dcValidator, cred); - setExtraSettings(); - } - catch (Exception e) { - throw new GFacException(e.getMessage(), e); - } - secProperties.getETDSettings().setExtendTrustDelegation(true); - if(enableMessageLogging) secProperties.setMessageLogging(true); -// secProperties.setMessageLogging(true); -// secProperties.setDoSignMessage(true); - secProperties.getETDSettings().setIssuerCertificateChain(secProperties.getCredential().getCertificateChain()); - - return secProperties; - } - - public DefaultClientConfiguration getDefaultConfiguration(Boolean enableMessageLogging, UserConfigurationData userData) throws GFacException, ApplicationSettingsException { - X509Credential cred = null; - - try{ - boolean genCert = userData.isGenerateCert(); - if(genCert) { - String userDN = userData.getUserDN(); - if (userDN == null && "".equals(userDN)){ - log.warn("Cannot generate cert, falling back to container configured MyProxy credentials"); - return getDefaultConfiguration(enableMessageLogging); - } - else { - log.info("Generating X.509 certificate for: "+userDN); - try { - - String caCertPath = ServerSettings.getSetting(BESConstants.PROP_CA_CERT_PATH, ""); - String caKeyPath = ServerSettings.getSetting(BESConstants.PROP_CA_KEY_PATH, ""); - String caKeyPass = ServerSettings.getSetting(BESConstants.PROP_CA_KEY_PASS, ""); - - if(caCertPath.equals("") || caKeyPath.equals("")) { - throw new Exception("CA certificate or key file path missing in the properties file. " - + "Please make sure "+BESConstants.PROP_CA_CERT_PATH+ " or "+BESConstants.PROP_CA_KEY_PATH+" are not empty."); - } - - if("".equals(caKeyPass)) { - log.warn("Caution: CA key has no password. For security reasons it is highly recommended to set a CA key password"); - } - cred = generateShortLivedCredential(userDN, caCertPath, caKeyPath, caKeyPass); - }catch (Exception e){ - throw new GFacProviderException("Error occured while generating a short lived credential for user:"+userDN, e); - } - - } - }else { - return getDefaultConfiguration(enableMessageLogging); - } - - secProperties = new DefaultClientConfiguration(dcValidator, cred); - setExtraSettings(); - } - catch (Exception e) { - throw new GFacException(e.getMessage(), e); - } - secProperties.getETDSettings().setExtendTrustDelegation(true); - if(enableMessageLogging) secProperties.setMessageLogging(true); -// secProperties.setDoSignMessage(true); - secProperties.getETDSettings().setIssuerCertificateChain(secProperties.getCredential().getCertificateChain()); - - return secProperties; - } - - - /** - * Get server signed credentials. Each time it is invoked new certificate - * is returned. - * - * @param userID - * @param userDN - * @param caCertPath - * @param caKeyPath - * @param caKeyPwd - * @return - * @throws GFacException - */ - public DefaultClientConfiguration getServerSignedConfiguration(String userID, String userDN, String caCertPath, String caKeyPath, String caKeyPwd) throws GFacException { - try { - KeyAndCertCredential cred = SecurityUtils.generateShortLivedCertificate(userDN,caCertPath,caKeyPath,caKeyPwd); - secProperties = new DefaultClientConfiguration(dcValidator, cred); - setExtraSettings(); - } catch (Exception e) { - throw new GFacException(e.getMessage(), e); - } - - return secProperties; - } - - - - - - private void setExtraSettings(){ - secProperties.getETDSettings().setExtendTrustDelegation(true); - - secProperties.setDoSignMessage(true); - - String[] outHandlers = secProperties.getOutHandlerClassNames(); - - Set<String> outHandlerLst = null; - - // timeout in milliseconds - Properties p = secProperties.getExtraSettings(); - - if(p == null) { - p = new Properties(); - } - - p.setProperty("http.connection.timeout", "5000"); - p.setProperty("http.socket.timeout", "5000"); - - secProperties.setExtraSettings(p); - - if (outHandlers == null) { - outHandlerLst = new HashSet<String>(); - } else { - outHandlerLst = new HashSet<String>(Arrays.asList(outHandlers)); - } - - outHandlerLst.add("de.fzj.unicore.uas.security.ProxyCertOutHandler"); - - secProperties.setOutHandlerClassNames(outHandlerLst - .toArray(new String[outHandlerLst.size()])); - } - - - private String getCNFromUserDN(String userDN) { - return X500NameUtils.getAttributeValues(userDN, BCStyle.CN)[0]; - - } - - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/X509SecurityContext.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/X509SecurityContext.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/X509SecurityContext.java deleted file mode 100644 index d9b183f..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/X509SecurityContext.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * - * 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.bes.security; - - -import org.apache.airavata.common.exception.ApplicationSettingsException; -import org.apache.airavata.common.utils.ServerSettings; -import org.apache.airavata.credential.store.credential.Credential; -import org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential; -import org.apache.airavata.credential.store.store.CredentialReader; -import org.apache.airavata.gfac.core.GFacConstants; -import org.apache.airavata.gfac.core.context.AbstractSecurityContext; -import org.apache.airavata.gfac.core.GFacException; -import org.apache.airavata.gfac.core.RequestData; -import org.apache.airavata.gfac.bes.utils.MyProxyLogon; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.asn1.x500.style.BCStyle; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import eu.emi.security.authn.x509.X509Credential; -import eu.emi.security.authn.x509.helpers.CertificateHelpers; -import eu.emi.security.authn.x509.helpers.proxy.X509v3CertificateBuilder; -import eu.emi.security.authn.x509.impl.CertificateUtils; -import eu.emi.security.authn.x509.impl.DirectoryCertChainValidator; -import eu.emi.security.authn.x509.impl.KeyAndCertCredential; -import eu.emi.security.authn.x509.impl.CertificateUtils.Encoding; -import eu.emi.security.authn.x509.impl.X500NameUtils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.PrivateKey; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Random; - -import javax.security.auth.x500.X500Principal; - -/** - * Handles X509 Certificate based security. - */ -public class X509SecurityContext extends AbstractSecurityContext { - - private static final long serialVersionUID = 1L; - - protected static final Logger log = LoggerFactory.getLogger(X509SecurityContext.class); - - /* - * context name - */ - public static final String X509_SECURITY_CONTEXT = "x509.security.context"; - - public static final int CREDENTIAL_RENEWING_THRESH_HOLD = 10 * 90; - - protected static DirectoryCertChainValidator dcValidator; - - private X509Credential x509Credentials= null; - - static { - try { - setUpTrustedCertificatePath(); - // set up directory based trust validator - dcValidator = getTrustedCerts(); - } catch (Exception e) { - log.error(e.getLocalizedMessage(), e); - } - } - - - public static void setUpTrustedCertificatePath(String trustedCertificatePath) { - - File file = new File(trustedCertificatePath); - - if (!file.exists() || !file.canRead()) { - File f = new File("."); - log.info("Current directory " + f.getAbsolutePath()); - throw new RuntimeException("Cannot read trusted certificate path " + trustedCertificatePath); - } else { - System.setProperty(GFacConstants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY, file.getAbsolutePath()); - } - } - - private static void setUpTrustedCertificatePath() throws ApplicationSettingsException { - - String trustedCertificatePath = ServerSettings.getSetting(GFacConstants.TRUSTED_CERT_LOCATION); - - setUpTrustedCertificatePath(trustedCertificatePath); - } - - /** - * Gets the trusted certificate path. Trusted certificate path is stored in "X509_CERT_DIR" - * system property. - * @return The trusted certificate path as a string. - */ - public static String getTrustedCertificatePath() { - return System.getProperty(GFacConstants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY); - } - - - public X509SecurityContext(CredentialReader credentialReader, RequestData requestData) { - super(credentialReader, requestData); - } - - - /** - * Gets X509Credentials. The process is as follows; - * If credentials were queried for the first time create credentials. - * 1. Try creating credentials using certificates stored in the credential store - * 2. If 1 fails use user name and password to create credentials - * @return x509credentials (from CANL security API) - * @throws GFacException If an error occurred while creating credentials. - * @throws org.apache.airavata.common.exception.ApplicationSettingsException - */ - public X509Credential getX509Credentials() throws GFacException, ApplicationSettingsException { - - if(getCredentialReader() == null) { - return getDefaultCredentials(); - } - - if (x509Credentials == null) { - - try { - x509Credentials = getCredentialsFromStore(); - } catch (Exception e) { - log.error("An exception occurred while retrieving credentials from the credential store. " + - "Will continue with my proxy user name and password.", e); - } - - // If store does not have credentials try to get from user name and password - if (x509Credentials == null) { - x509Credentials = getDefaultCredentials(); - } - - // if still null, throw an exception - if (x509Credentials == null) { - throw new GFacException("Unable to retrieve my proxy credentials to continue operation."); - } - } else { - try { - - final long remainingTime = x509Credentials.getCertificate().getNotAfter().getTime() - new Date().getTime(); - - if (remainingTime < CREDENTIAL_RENEWING_THRESH_HOLD) { - // return renewCredentials(); - log.warn("Do not support credentials renewal"); - } - - log.info("Fall back to get new default credentials"); - - try { - x509Credentials.getCertificate().checkValidity(); - }catch(Exception e){ - x509Credentials = getDefaultCredentials(); - } - - } catch (Exception e) { - throw new GFacException("Unable to retrieve remaining life time from credentials.", e); - } - } - - return x509Credentials; - } - - /** - * Reads the credentials from credential store. - * @return If token is found in the credential store, will return a valid credential. Else returns null. - * @throws Exception If an error occurred while retrieving credentials. - */ - public X509Credential getCredentialsFromStore() throws Exception { - - if (getCredentialReader() == null) { - return null; - } - - Credential credential = getCredentialReader().getCredential(getRequestData().getGatewayId(), - getRequestData().getTokenId()); - - if (credential != null) { - if (credential instanceof CertificateCredential) { - - log.info("Successfully found credentials for token id - " + getRequestData().getTokenId() + - " gateway id - " + getRequestData().getGatewayId()); - - CertificateCredential certificateCredential = (CertificateCredential) credential; - - X509Certificate[] certificates = certificateCredential.getCertificates(); - - KeyAndCertCredential keyAndCert = new KeyAndCertCredential(certificateCredential.getPrivateKey(), certificates); - - return keyAndCert; - //return new GlobusGSSCredentialImpl(newCredential, - // GSSCredential.INITIATE_AND_ACCEPT); - } else { - log.info("Credential type is not CertificateCredential. Cannot create mapping globus credentials. " + - "Credential type - " + credential.getClass().getName()); - } - } else { - log.info("Could not find credentials for token - " + getRequestData().getTokenId() + " and " - + "gateway id - " + getRequestData().getGatewayId()); - } - - return null; - } - - /** - * Gets the default proxy certificate. - * @return Default my proxy credentials. - * @throws GFacException If an error occurred while retrieving credentials. - * @throws org.apache.airavata.common.exception.ApplicationSettingsException - */ - public X509Credential getDefaultCredentials() throws GFacException, ApplicationSettingsException{ - MyProxyLogon logon = new MyProxyLogon(); - logon.setValidator(dcValidator); - logon.setHost(getRequestData().getMyProxyServerUrl()); - logon.setPort(getRequestData().getMyProxyPort()); - logon.setUsername(getRequestData().getMyProxyUserName()); - logon.setPassphrase(getRequestData().getMyProxyPassword().toCharArray()); - logon.setLifetime(getRequestData().getMyProxyLifeTime()); - - try { - logon.connect(); - logon.logon(); - logon.getCredentials(); - logon.disconnect(); - PrivateKey pk=logon.getPrivateKey(); - return new KeyAndCertCredential(pk, new X509Certificate[]{logon.getCertificate()}); - } catch (Exception e) { - throw new GFacException("An error occurred while retrieving default security credentials.", e); - } - } - - private static DirectoryCertChainValidator getTrustedCerts() throws Exception{ - String certLocation = getTrustedCertificatePath(); - List<String> trustedCert = new ArrayList<String>(); - trustedCert.add(certLocation + "/*.0"); - trustedCert.add(certLocation + "/*.pem"); - DirectoryCertChainValidator dcValidator = new DirectoryCertChainValidator(trustedCert, Encoding.PEM, -1, 60000, null); - return dcValidator; - } - - private String getCNFromUserDN(String userDN) { - return X500NameUtils.getAttributeValues(userDN, BCStyle.CN)[0]; - } - - public KeyAndCertCredential generateShortLivedCredential(String userDN, String caCertPath, String caKeyPath, - String caPwd) throws Exception { - final long CredentialGoodFromOffset = 1000L * 60L * 15L; // 15 minutes - // ago - - final long startTime = System.currentTimeMillis() - CredentialGoodFromOffset; - final long endTime = startTime + 30 * 3600 * 1000; - - String keyLengthProp = "1024"; - int keyLength = Integer.parseInt(keyLengthProp); - String signatureAlgorithm = "SHA1withRSA"; - - KeyAndCertCredential caCred = getCACredential(caCertPath, caKeyPath, caPwd); - - KeyPairGenerator kpg = KeyPairGenerator.getInstance(caCred.getKey().getAlgorithm()); - kpg.initialize(keyLength); - KeyPair pair = kpg.generateKeyPair(); - - X500Principal subjectDN = new X500Principal(userDN); - Random rand = new Random(); - - SubjectPublicKeyInfo publicKeyInfo; - try { - publicKeyInfo = SubjectPublicKeyInfo.getInstance(new ASN1InputStream(pair.getPublic().getEncoded()) - .readObject()); - } catch (IOException e) { - throw new InvalidKeyException("Can not parse the public key" - + "being included in the short lived certificate", e); - } - - X500Name issuerX500Name = CertificateHelpers.toX500Name(caCred.getCertificate().getSubjectX500Principal()); - - X500Name subjectX500Name = CertificateHelpers.toX500Name(subjectDN); - - X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuerX500Name, new BigInteger(20, rand), - new Date(startTime), new Date(endTime), subjectX500Name, publicKeyInfo); - - AlgorithmIdentifier sigAlgId = X509v3CertificateBuilder.extractAlgorithmId(caCred.getCertificate()); - - X509Certificate certificate = certBuilder.build(caCred.getKey(), sigAlgId, signatureAlgorithm, null, null); - - certificate.checkValidity(new Date()); - certificate.verify(caCred.getCertificate().getPublicKey()); - KeyAndCertCredential result = new KeyAndCertCredential(pair.getPrivate(), new X509Certificate[] { certificate, - caCred.getCertificate() }); - - return result; - } - - private KeyAndCertCredential getCACredential(String caCertPath, String caKeyPath, String password) throws Exception { - InputStream isKey, isCert; - isKey = isCert = null; - try { - isKey = new FileInputStream(caKeyPath); - PrivateKey pk = CertificateUtils.loadPrivateKey(isKey, Encoding.PEM, password.toCharArray()); - - isCert = new FileInputStream(caCertPath); - X509Certificate caCert = CertificateUtils.loadCertificate(isCert, Encoding.PEM); - return new KeyAndCertCredential(pk, new X509Certificate[] { caCert }); - } finally { - if (isKey != null){ - isKey.close(); - } - if (isCert != null) { - isCert.close(); - } - } - } - - -} http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ActivityInfo.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ActivityInfo.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ActivityInfo.java deleted file mode 100644 index 3625513..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ActivityInfo.java +++ /dev/null @@ -1,50 +0,0 @@ -/* -* -* 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.bes.utils; - -import java.io.Serializable; - -import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStatusType; -import org.w3.x2005.x08.addressing.EndpointReferenceType; - -public class ActivityInfo implements Serializable{ - - private static final long serialVersionUID = 1L; - - private EndpointReferenceType activityEPR; - - private ActivityStatusType activityStatusDoc; - - - public EndpointReferenceType getActivityEPR() { - return activityEPR; - } - public void setActivityEPR(EndpointReferenceType activityEPR) { - this.activityEPR = activityEPR; - } - public ActivityStatusType getActivityStatus() { - return activityStatusDoc; - } - public void setActivityStatusDoc(ActivityStatusType activityStatusDoc) { - this.activityStatusDoc = activityStatusDoc; - } - -} http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java deleted file mode 100644 index bc91e49..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * - * 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.bes.utils; - -import java.util.Iterator; -import java.util.List; - -import org.apache.airavata.gfac.core.context.JobExecutionContext; -import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription; -import org.apache.airavata.model.appcatalog.appdeployment.ApplicationParallelismType; -import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType; -import org.ggf.schemas.jsdl.x2005.x11.jsdl.ApplicationType; -import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType; -import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.FileNameType; -import org.ggf.schemas.jsdl.x2005.x11.jsdlPosix.UserNameType; -import org.ogf.schemas.jsdl.x2007.x02.jsdlSpmd.NumberOfProcessesType; -import org.ogf.schemas.jsdl.x2007.x02.jsdlSpmd.ProcessesPerHostType; -import org.ogf.schemas.jsdl.x2007.x02.jsdlSpmd.ThreadsPerProcessType; - - -public class ApplicationProcessor { - - public static void generateJobSpecificAppElements(JobDefinitionType value, JobExecutionContext context){ - - String userName = getUserNameFromContext(context); -// if (userName.equalsIgnoreCase("admin")){ -// userName = "CN=zdv575, O=Ultrascan Gateway, C=DE"; -// } - - ApplicationDeploymentDescription appDep= context.getApplicationContext().getApplicationDeploymentDescription(); - String appname = context.getApplicationContext().getApplicationInterfaceDescription().getApplicationName(); - ApplicationParallelismType parallelism = appDep.getParallelism(); - ApplicationType appType = JSDLUtils.getOrCreateApplication(value); - appType.setApplicationName(appname); - - -// if (appDep.getSetEnvironment().size() > 0) { -// createApplicationEnvironment(value, appDep.getSetEnvironment(), parallelism); -// } -// - - String stdout = context.getStandardOutput(); - String stderr = context.getStandardError(); - if(stdout != null) { - stdout = stdout.substring(stdout.lastIndexOf('/')+1); - } - - if(stderr != null) { - stderr = stderr.substring(stderr.lastIndexOf('/')+1); - } - - stdout = (stdout == null || stdout.equals("")) ? "stdout":stdout; - stderr = (stdout == null || stderr.equals("")) ? "stderr":stderr; - - if (appDep.getExecutablePath() != null) { - FileNameType fNameType = FileNameType.Factory.newInstance(); - fNameType.setStringValue(appDep.getExecutablePath()); - if(isParallelJob(context)) { - JSDLUtils.getOrCreateSPMDApplication(value).setExecutable(fNameType); - if (parallelism.equals(ApplicationParallelismType.OPENMP_MPI)){ - JSDLUtils.getSPMDApplication(value).setSPMDVariation(SPMDVariations.OpenMPI.value()); - }else if (parallelism.equals(ApplicationParallelismType.MPI)){ - JSDLUtils.getSPMDApplication(value).setSPMDVariation(SPMDVariations.MPI.value()); - } - - // setting number of processes - try { - String np = getInputAsString(context, BESConstants.NUMBER_OF_PROCESSES); - if((np != null) && (Integer.parseInt(np) > 0)){ - NumberOfProcessesType num = NumberOfProcessesType.Factory.newInstance(); - num.setStringValue(np); - JSDLUtils.getSPMDApplication(value).setNumberOfProcesses(num); - } - - }catch(RuntimeException np) { - // do nothing - } - - - try { - // setting processes per host - String pphost = getInputAsString(context, BESConstants.PROCESSES_PER_HOST); - if((pphost != null) && (Integer.parseInt(pphost) > 0)){ - ProcessesPerHostType pph = ProcessesPerHostType.Factory.newInstance(); - pph.setStringValue(String.valueOf(pphost)); - JSDLUtils.getSPMDApplication(value).setProcessesPerHost(pph); - } - }catch(RuntimeException np) { - // do nothing - } - - int totalThreadCount = context.getTaskData().getTaskScheduling().getNumberOfThreads(); - // we take it as threads per processes - if(totalThreadCount > 0){ - ThreadsPerProcessType tpp = ThreadsPerProcessType.Factory.newInstance(); - tpp.setStringValue(String.valueOf(totalThreadCount)); - JSDLUtils.getSPMDApplication(value).setThreadsPerProcess(tpp); - } - - if(userName != null) { - UserNameType userNameType = UserNameType.Factory.newInstance(); - userNameType.setStringValue(userName); - JSDLUtils.getSPMDApplication(value).setUserName(userNameType); - } - if (stdout != null){ - FileNameType fName = FileNameType.Factory.newInstance(); - fName.setStringValue(stdout); - JSDLUtils.getOrCreateSPMDApplication(value).setOutput(fName); - } - if (stderr != null){ - FileNameType fName = FileNameType.Factory.newInstance(); - fName.setStringValue(stderr); - JSDLUtils.getOrCreateSPMDApplication(value).setError(fName); - } - - - } - else { - JSDLUtils.getOrCreatePOSIXApplication(value).setExecutable(fNameType); - if(userName != null) { - UserNameType userNameType = UserNameType.Factory.newInstance(); - userNameType.setStringValue(userName); - JSDLUtils.getOrCreatePOSIXApplication(value).setUserName(userNameType); - } - if (stdout != null){ - FileNameType fName = FileNameType.Factory.newInstance(); - fName.setStringValue(stdout); - JSDLUtils.getOrCreatePOSIXApplication(value).setOutput(fName); - } - if (stderr != null){ - FileNameType fName = FileNameType.Factory.newInstance(); - fName.setStringValue(stderr); - JSDLUtils.getOrCreatePOSIXApplication(value).setError(fName); - } - } - } - } - - public static String getUserNameFromContext(JobExecutionContext jobContext) { - if(jobContext.getTaskData() == null) - return null; - //TODO: Extend unicore model to specify optional unix user id (allocation account) - return "admin"; - } - - public static void addApplicationArgument(JobDefinitionType value, JobExecutionContext context, String stringPrm) { - if(isParallelJob(context)){ - JSDLUtils.getOrCreateSPMDApplication(value).addNewArgument().setStringValue(stringPrm); - } - else { - JSDLUtils.getOrCreatePOSIXApplication(value).addNewArgument().setStringValue(stringPrm); - } - } - - public static String getApplicationStdOut(JobDefinitionType value, JobExecutionContext context) throws RuntimeException { - if (isParallelJob(context)) return JSDLUtils.getOrCreateSPMDApplication(value).getOutput().getStringValue(); - else return JSDLUtils.getOrCreatePOSIXApplication(value).getOutput().getStringValue(); - } - - public static String getApplicationStdErr(JobDefinitionType value, JobExecutionContext context) throws RuntimeException { - if (isParallelJob(context)) return JSDLUtils.getOrCreateSPMDApplication(value).getError().getStringValue(); - else return JSDLUtils.getOrCreatePOSIXApplication(value).getError().getStringValue(); - } - - public static void createGenericApplication(JobDefinitionType value, String appName) { - ApplicationType appType = JSDLUtils.getOrCreateApplication(value); - appType.setApplicationName(appName); - } - - public static boolean isParallelJob(JobExecutionContext context) { - - ApplicationDeploymentDescription appDep = context.getApplicationContext().getApplicationDeploymentDescription(); - ApplicationParallelismType parallelism = appDep.getParallelism(); - - boolean isParallel = false; - - if(parallelism.equals(ApplicationParallelismType.MPI) || - parallelism.equals(ApplicationParallelismType.OPENMP_MPI) || - parallelism.equals(ApplicationParallelismType.OPENMP )) { - isParallel = true; - } - - return isParallel; - } - - private static String getInputAsString(JobExecutionContext context, String name) { - List<InputDataObjectType> inputList = context.getTaskData().getApplicationInputs(); - String value = null; - for (Iterator<InputDataObjectType> iterator = inputList.iterator(); iterator.hasNext();) { - InputDataObjectType inputDataObjectType = iterator - .next(); - if (inputDataObjectType.getName().equals(name)) { - value = inputDataObjectType.getValue(); - break; - } - } - return value; - } - - - -} http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/BESConstants.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/BESConstants.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/BESConstants.java deleted file mode 100644 index 6e87e28..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/BESConstants.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -* -* 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.bes.utils; - -public interface BESConstants { - - public static final String PROP_SMS_EPR = "unicore.sms.epr"; - - public static final String PROP_BES_URL = "bes.factory.url"; - - public static final String PROP_ACTIVITY_INFO = "bes.activity.info"; - - public static final String PROP_CLIENT_CONF = "bes.client.config"; - - public static final String PROP_CA_CERT_PATH = "bes.ca.cert.path"; - - public static final String PROP_CA_KEY_PATH = "bes.ca.key.path"; - - public static final String PROP_CA_KEY_PASS = "bes.ca.key.pass"; - - public static final String NUMBER_OF_PROCESSES = "NumberOfProcesses"; - - public static final String PROCESSES_PER_HOST = "ProcessesPerHost"; - - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java deleted file mode 100644 index ad8ca2f..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * - * 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.bes.utils; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.airavata.gfac.core.GFacConstants; -import org.apache.airavata.gfac.core.context.JobExecutionContext; -import org.apache.airavata.gfac.core.provider.GFacProviderException; -import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription; -import org.apache.airavata.model.appcatalog.appinterface.DataType; -import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType; -import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType; -import org.apache.airavata.model.experiment.TaskDetails; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import de.fzj.unicore.uas.client.StorageClient; - - -public class DataTransferrer { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - - private JobExecutionContext jobContext; - - private StorageClient storageClient; - - public DataTransferrer(JobExecutionContext jobContext, StorageClient storageClient) { - this.jobContext = jobContext; - this.storageClient = storageClient; - } - - - public void uploadLocalFiles() throws GFacProviderException { - List<String> inFilePrms = extractInFileParams(); - for (String uri : inFilePrms) { - String fileName = new File(uri).getName(); - if (uri.startsWith("file")) { - try { - String uriWithoutProtocol = uri.substring(uri.lastIndexOf("://") + 1, uri.length()); - FileUploader fileUploader = new FileUploader(uriWithoutProtocol,fileName,Mode.overwrite); - fileUploader.perform(storageClient); - } catch (FileNotFoundException e3) { - throw new GFacProviderException( - "Error while staging-in, local file "+fileName+" not found", e3); - } catch (Exception e) { - throw new GFacProviderException("Cannot upload files", e); - - } - - } - } - - } - - /** - * This method will download all the remote files specified in the output - * context of a job. - * */ - public void downloadRemoteFiles() throws GFacProviderException { - - String downloadLocation = getDownloadLocation(); - - File file = new File(downloadLocation); - if(!file.exists()){ - file.mkdirs(); - } - - Map<String, Object> output = jobContext.getOutMessageContext().getParameters(); - Set<String> keys = output.keySet(); - - for (String outPrm : keys) { - OutputDataObjectType actualParameter = (OutputDataObjectType) output.get(outPrm); - if (DataType.STDERR == actualParameter.getType()) continue; - if (DataType.STDOUT == actualParameter.getType()) continue; - - String value = actualParameter.getValue(); - FileDownloader fileDownloader = new FileDownloader(value,downloadLocation, Mode.overwrite); - try { - fileDownloader.perform(storageClient); - String outputPath = downloadLocation + File.separator + value.substring(value.lastIndexOf('/')+1); - actualParameter.setValue(outputPath); - actualParameter.setType(DataType.URI); - jobContext.addOutputFile(outputPath); - } catch (Exception e) { - throw new GFacProviderException(e.getLocalizedMessage(),e); - } - } - downloadStdOuts(); - } - - - public void downloadStdOuts() throws GFacProviderException{ - String downloadLocation = getDownloadLocation(); - File file = new File(downloadLocation); - if(!file.exists()){ - file.mkdirs(); - } - - String stdout = jobContext.getStandardOutput(); - String stderr = jobContext.getStandardError(); - if(stdout != null) { - stdout = stdout.substring(stdout.lastIndexOf('/')+1); - } - - if(stderr != null) { - stderr = stderr.substring(stderr.lastIndexOf('/')+1); - } - - String stdoutFileName = (stdout == null || stdout.equals("")) ? "stdout" - : stdout; - String stderrFileName = (stdout == null || stderr.equals("")) ? "stderr" - : stderr; - - ApplicationDeploymentDescription application = jobContext.getApplicationContext().getApplicationDeploymentDescription(); - - String stdoutLocation = downloadLocation+File.separator+stdoutFileName; - FileDownloader f1 = new FileDownloader(stdoutFileName,stdoutLocation, Mode.overwrite); - try { - f1.perform(storageClient); - log.info("Downloading stdout and stderr.."); - String stdoutput = readFile(stdoutLocation); - jobContext.addOutputFile(stdoutLocation); - jobContext.setStandardOutput(stdoutLocation); - log.info("Stdout downloaded to -> "+stdoutLocation); - if(UASDataStagingProcessor.isUnicoreEndpoint(jobContext)) { - String scriptExitCodeFName = "UNICORE_SCRIPT_EXIT_CODE"; - String scriptCodeLocation = downloadLocation+File.separator+scriptExitCodeFName; - f1.setFrom(scriptExitCodeFName); - f1.setTo(scriptCodeLocation); - f1.perform(storageClient); - log.info("UNICORE_SCRIPT_EXIT_CODE downloaded to "+scriptCodeLocation); - } - String stderrLocation = downloadLocation+File.separator+stderrFileName; - f1.setFrom(stderrFileName); - f1.setTo(stderrLocation); - f1.perform(storageClient); - String stderror = readFile(stderrLocation); - jobContext.addOutputFile(stderrLocation); - jobContext.setStandardError(stderrLocation); - log.info("Stderr downloaded to -> "+stderrLocation); - } catch (Exception e) { - throw new GFacProviderException(e.getLocalizedMessage(),e); - } - - } - - public List<String> extractOutParams(JobExecutionContext context) { - List<String> outPrmsList = new ArrayList<String>(); - List<OutputDataObjectType> applicationOutputs = jobContext.getTaskData().getApplicationOutputs(); - if (applicationOutputs != null && !applicationOutputs.isEmpty()){ - for (OutputDataObjectType output : applicationOutputs){ - if(output.getType().equals(DataType.STRING)) { - outPrmsList.add(output.getValue()); - } - else if(output.getType().equals(DataType.FLOAT) || output.getType().equals(DataType.INTEGER)) { - outPrmsList.add(String.valueOf(output.getValue())); - - } - } - } - return outPrmsList; - } - - public List<String> extractInFileParams() { - List<String> filePrmsList = new ArrayList<String>(); - List<InputDataObjectType> applicationInputs = jobContext.getTaskData().getApplicationInputs(); - if (applicationInputs != null && !applicationInputs.isEmpty()){ - for (InputDataObjectType output : applicationInputs){ - if(output.getType().equals(DataType.URI)) { - filePrmsList.add(output.getValue()); - } - } - } - return filePrmsList; - } - - - private String readFile(String localFile) throws IOException { - BufferedReader instream = new BufferedReader(new FileReader(localFile)); - StringBuffer buff = new StringBuffer(); - String temp = null; - while ((temp = instream.readLine()) != null) { - buff.append(temp); - buff.append(GFacConstants.NEWLINE); - } - - log.info("finish read file:" + localFile); - - return buff.toString(); - } - - public void setStorageClient(StorageClient sc){ - storageClient = sc; - } - - private String getDownloadLocation() { - TaskDetails taskData = jobContext.getTaskData(); - //In case of third party transfer this will not work. -// if (taskData != null && taskData.getAdvancedOutputDataHandling() != null) { -// String outputDataDirectory = taskData.getAdvancedOutputDataHandling().getOutputDataDir(); -// return outputDataDirectory; -// } - String outputDataDir = File.separator + "tmp"; - outputDataDir = outputDataDir + File.separator + jobContext.getExperimentID(); - (new File(outputDataDir)).mkdirs(); - return outputDataDir; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileDownloader.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileDownloader.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileDownloader.java deleted file mode 100644 index 680aa51..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileDownloader.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * - * 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.bes.utils; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Map; - -import org.unigrids.services.atomic.types.GridFileType; -import org.unigrids.services.atomic.types.ProtocolType; - -import de.fzj.unicore.uas.client.FileTransferClient; -import de.fzj.unicore.uas.client.StorageClient; -import de.fzj.unicore.uas.client.UFTPConstants; -import de.fzj.unicore.uas.client.UFTPFileTransferClient; -import de.fzj.unicore.uas.fts.FiletransferOptions.IMonitorable; -import de.fzj.unicore.uas.fts.FiletransferOptions.SupportsPartialRead; - -/** - * helper that exports remote files from a UNICORE Storage - * to the local client machine.<br/> - * Simple wildcards ("*" and "?") and download of - * directories are supported. - * - * TODO this should be refactored so the single-file download logic - * is separated from the wildcard/directory/provided outputStream logic - * - * @author schuller - */ -public class FileDownloader extends FileTransferBase{ - - private boolean showProgress=true; - - private boolean forceFileOnly=false; - - private OutputStream targetStream=null; - - public FileDownloader(String from, String to, Mode mode){ - this(from,to,mode,true); - } - - public FileDownloader(String from, String to, Mode mode, boolean failOnError){ - this.to=to; - this.from=from; - this.mode=mode; - this.failOnError=failOnError; - } - - public void perform(StorageClient sms)throws Exception{ - boolean isWildcard=hasWildCards(from); - boolean isDirectory=false; - GridFileType gridSource=null; - if(isWildcard){ - performWildCardExport(sms); - } - else { - //check if source is a directory - gridSource=sms.listProperties(from); - isDirectory=gridSource.getIsDirectory(); - if(isDirectory){ - if(forceFileOnly){ - throw new IOException("Source is a directory"); - } - performDirectoryExport(gridSource, new File(to), sms); - } - else{ - download(gridSource,new File(to),sms); - } - } - } - - protected void performDirectoryExport(GridFileType directory, File targetDirectory, StorageClient sms)throws Exception{ - if(!targetDirectory.exists()|| !targetDirectory.canWrite()){ - throw new IOException("Target directory <"+to+"> does not exist or is not writable!"); - } - if(!targetDirectory.isDirectory()){ - throw new IOException("Target <"+to+"> is not a directory!"); - } - GridFileType[]gridFiles=sms.listDirectory(directory.getPath()); - for(GridFileType file: gridFiles){ - if(file.getIsDirectory()){ - if(!recurse) { - System.out.println("Skipping directory "+file.getPath()); - continue; - } - else{ - File newTargetDirectory=new File(targetDirectory,getName(file.getPath())); - boolean success=newTargetDirectory.mkdirs(); - if(!success)throw new IOException("Can create directory: "+newTargetDirectory.getAbsolutePath()); - performDirectoryExport(file, newTargetDirectory, sms); - continue; - } - } - download(file, new File(targetDirectory,getName(file.getPath())), sms); - } - } - - protected void performWildCardExport(StorageClient sms)throws Exception{ - String dir=getDir(from); - if(dir==null)dir="/"; - GridFileType[] files=sms.find(dir, false, from, false, null, null); - File targetDir=targetStream==null?new File(to):null; - if(targetStream==null){ - if(!targetDir.isDirectory())throw new IOException("Target is not a directory."); - } - for(GridFileType f: files){ - download(f, targetDir, sms); - } - } - - private String getDir(String path){ - return new File(path).getParent(); - } - - private String getName(String path){ - return new File(path).getName(); - } - - /** - * download a single regular file - * - * @param source - grid file descriptor - * @param localFile - local file or directory to write to - * @param sms - * @throws Exception - */ - private void download(GridFileType source, File localFile, StorageClient sms)throws Exception{ - if(source==null || source.getIsDirectory()){ - throw new IllegalStateException("Source="+source); - } - - OutputStream os=targetStream!=null?targetStream:null; - FileTransferClient ftc=null; - try{ - String path=source.getPath(); - if(targetStream==null){ - if(localFile.isDirectory()){ - localFile=new File(localFile,getName(source.getPath())); - } - if(mode.equals(Mode.nooverwrite) && localFile.exists()){ - System.out.println("File exists and creation mode was set to 'nooverwrite'."); - return; - } - System.out.println("Downloading remote file '"+sms.getUrl()+"#/"+path+"' -> "+localFile.getAbsolutePath()); - os=new FileOutputStream(localFile.getAbsolutePath(), mode.equals(Mode.append)); - } - - chosenProtocol=sms.findSupportedProtocol(preferredProtocols.toArray(new ProtocolType.Enum[preferredProtocols.size()])); - Map<String,String>extraParameters=makeExtraParameters(chosenProtocol); - ftc=sms.getExport(path,extraParameters,chosenProtocol); - configure(ftc, extraParameters); - System.out.println("DEB:File transfer URL : "+ftc.getUrl()); -// ProgressBar p=null; - if(ftc instanceof IMonitorable && showProgress){ - long size=ftc.getSourceFileSize(); - if(isRange()){ - size=getRangeSize(); - } -// p=new ProgressBar(localFile.getName(),size,msg); -// ((IMonitorable) ftc).setProgressListener(p); - } - long startTime=System.currentTimeMillis(); - if(isRange()){ - if(!(ftc instanceof SupportsPartialRead)){ - throw new Exception("Byte range is defined but protocol does not allow " + - "partial read! Please choose a different protocol!"); - } - System.out.println("Byte range: "+startByte+" - "+(getRangeSize()>0?endByte:"")); - SupportsPartialRead pReader=(SupportsPartialRead)ftc; - pReader.readPartial(startByte, endByte-startByte+1, os); - } - else{ - ftc.readAllData(os); - } -// if(p!=null){ -// p.finish(); -// } - if(timing){ - long duration=System.currentTimeMillis()-startTime; - double rate=(double)localFile.length()/(double)duration; - System.out.println("Rate: " +rate+ " kB/sec."); - } - if(targetStream==null)copyProperties(source, localFile); - } - finally{ - try{ - if(targetStream==null && os!=null){ - os.close(); - } - }catch(Exception ignored){} - if(ftc!=null){ - try{ - ftc.destroy(); - }catch(Exception e1){ -// System.out.println("Could not destroy the filetransfer client",e1); - } - } - } - } - - /** - * if possible, copy the remote executable flag to the local file - * @throws Exception - */ - private void copyProperties(GridFileType source, File localFile)throws Exception{ - try{ - localFile.setExecutable(source.getPermissions().getExecutable()); - } - catch(Exception ex){ - //TODO: logging -// ("Can't set 'executable' flag for "+localFile.getName(), ex); - } - } - - private void configure(FileTransferClient ftc, Map<String,String>params){ - if(ftc instanceof UFTPFileTransferClient){ - UFTPFileTransferClient u=(UFTPFileTransferClient)ftc; - String secret=params.get(UFTPConstants.PARAM_SECRET); - u.setSecret(secret); - } - } - - public void setShowProgress(boolean showProgress) { - this.showProgress = showProgress; - } - - public void setForceFileOnly(boolean forceFileOnly) { - this.forceFileOnly = forceFileOnly; - } - - public void setTargetStream(OutputStream targetStream) { - this.targetStream = targetStream; - } - -} http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/488b772f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileTransferBase.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileTransferBase.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileTransferBase.java deleted file mode 100644 index ef46feb..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/FileTransferBase.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * - * 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.bes.utils; - -import java.io.File; -import java.io.FilenameFilter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.regex.Pattern; - -import org.unigrids.services.atomic.types.GridFileType; -import org.unigrids.services.atomic.types.ProtocolType; - -import de.fzj.unicore.uas.client.StorageClient; -import de.fzj.unicore.uas.util.PropertyHelper; -public class FileTransferBase { - - protected Properties extraParameterSource; - - protected boolean timing=false; - - protected boolean recurse=false; - - protected String from; - - protected String to; - - //index of first byte to download - protected Long startByte; - - //index of last byte to download - protected Long endByte; - - /** - * the creation mode - */ - protected Mode mode; - - /** - * whether the job processing should fail if an error occurs - */ - protected boolean failOnError; - - protected List<ProtocolType.Enum> preferredProtocols=new ArrayList<ProtocolType.Enum>(); - - public FileTransferBase(){ - preferredProtocols.add(ProtocolType.BFT); - } - - protected Map<String,String>makeExtraParameters(ProtocolType.Enum protocol){ - Map<String, String> res; - if(extraParameterSource==null){ - res=new HashMap<String, String>(); - } - else{ - String p=String.valueOf(protocol); - PropertyHelper ph=new PropertyHelper(extraParameterSource, new String[]{p,p.toLowerCase()}); - res= ph.getFilteredMap(); - } - if(res.size()>0){ - // TODO: change it to logger - System.out.println("Have "+res.size()+" extra parameters for protocol "+protocol); - } - return res; - } - - - public String getTo() { - return to; - } - - public String getFrom() { - return from; - } - - public void setTo(String to) { - this.to = to; - } - - public void setFrom(String from) { - this.from = from; - } - - public Mode getMode() { - return mode; - } - - public boolean isFailOnError() { - return failOnError; - } - - public boolean isTiming() { - return timing; - } - - public void setTiming(boolean timing) { - this.timing = timing; - } - - public void setFailOnError(boolean failOnError) { - this.failOnError = failOnError; - } - - public List<ProtocolType.Enum> getPreferredProtocols() { - return preferredProtocols; - } - - public void setPreferredProtocols(List<ProtocolType.Enum> preferredProtocols) { - this.preferredProtocols = preferredProtocols; - } - - public void setExtraParameterSource(Properties properties){ - this.extraParameterSource=properties; - } - - public void setRecurse(boolean recurse) { - this.recurse = recurse; - } - /** - * check if the given path denotes a valid remote directory - * @param remotePath - the path - * @param sms - the storage - * @return <code>true</code> if the remote directory exists and is a directory - */ - protected boolean isValidDirectory(String remotePath, StorageClient sms){ - boolean result=false; - if(! ("/".equals(remotePath) || ".".equals(remotePath)) ){ - try{ - GridFileType gft=sms.listProperties(remotePath); - result=gft.getIsDirectory(); - }catch(Exception ex){ - result=false; - } - } - else result=true; - - return result; - } - - public File[] resolveWildCards(File original){ - final String name=original.getName(); - if(!hasWildCards(original))return new File[]{original}; - File parent=original.getParentFile(); - if(parent==null)parent=new File("."); - FilenameFilter filter=new FilenameFilter(){ - Pattern p=createPattern(name); - public boolean accept(File file, String name){ - return p.matcher(name).matches(); - } - }; - return parent.listFiles(filter); - } - - protected boolean hasWildCards(File file){ - return hasWildCards(file.getName()); - } - - public boolean hasWildCards(String name){ - return name.contains("*") || name.contains("?"); - } - - private Pattern createPattern(String nameWithWildcards){ - String regex=nameWithWildcards.replace("?",".").replace("*", ".*"); - return Pattern.compile(regex); - } - - protected ProtocolType.Enum chosenProtocol=null; - - public ProtocolType.Enum getChosenProtocol(){ - return chosenProtocol; - } - - public Long getStartByte() { - return startByte; - } - - public void setStartByte(Long startByte) { - this.startByte = startByte; - } - - public Long getEndByte() { - return endByte; - } - - public void setEndByte(Long endByte) { - this.endByte = endByte; - } - - /** - * checks if a byte range is defined - * @return <code>true</code> iff both startByte and endByte are defined - */ - protected boolean isRange(){ - return startByte!=null && endByte!=null; - } - - /** - * get the number of bytes in the byte range, or "-1" if the range is open-ended - * @return - */ - protected long getRangeSize(){ - if(Long.MAX_VALUE==endByte)return -1; - return endByte-startByte; - } -}
