This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/develop by this push:
     new 1a00507107 Handling special characters in output staging
1a00507107 is described below

commit 1a005071079e76063f02b4686ae2d7b7ead06c13
Author: Dimuthu Wannipurage <[email protected]>
AuthorDate: Thu Jun 9 13:18:38 2022 -0400

    Handling special characters in output staging
---
 .../helix/impl/task/staging/DataStagingTask.java        | 17 ++++++++++++++++-
 .../helix/impl/task/staging/OutputDataStagingTask.java  | 11 +++++++----
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
index 89f2dfff84..d220ca0c57 100644
--- 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
+++ 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/DataStagingTask.java
@@ -151,12 +151,27 @@ public abstract class DataStagingTask extends 
AiravataTask {
         return filePath;
     }
 
+    protected String escapeSpecialCharacters(String inputString){
+        final String[] metaCharacters = 
{"\\","^","$","{","}","[","]","(",")","?","&","%"};
+
+        for (String metaCharacter : metaCharacters) {
+            if (inputString.contains(metaCharacter)) {
+                inputString = inputString.replace(metaCharacter, "\\" + 
metaCharacter);
+            }
+        }
+        return inputString;
+    }
+
     public void naiveTransfer(AgentAdaptor srcAdaptor, String sourceFile, 
AgentAdaptor destAdaptor, String destFile,
                               String tempFile) throws TaskOnFailException {
+
+        sourceFile = escapeSpecialCharacters(sourceFile);
+        destFile = escapeSpecialCharacters(destFile);
+
         logger.info("Using naive transfer to transfer " + sourceFile + " to " 
+ destFile);
         try {
             try {
-                logger.info("Downloading file " + sourceFile + " to loacl temp 
file " + tempFile);
+                logger.info("Downloading file " + sourceFile + " to local temp 
file " + tempFile);
                 srcAdaptor.downloadFile(sourceFile, tempFile);
             } catch (AgentException e) {
                 throw new TaskOnFailException("Failed downloading file " + 
sourceFile + " to the local path " +
diff --git 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
index e9ec4d3d68..ba06618f98 100644
--- 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
+++ 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/OutputDataStagingTask.java
@@ -171,9 +171,11 @@ public class OutputDataStagingTask extends DataStagingTask 
{
                 }
                 if (!destinationURIs.isEmpty()) {
                     if (processOutput.getType() == DataType.URI) {
-                        saveExperimentOutput(processOutput.getName(), 
destinationURIs.get(0).toString());
+                        saveExperimentOutput(processOutput.getName(), 
escapeSpecialCharacters(destinationURIs.get(0).toString()));
                     } else if (processOutput.getType() == 
DataType.URI_COLLECTION) {
-                        
saveExperimentOutputCollection(processOutput.getName(), 
destinationURIs.stream().map(URI::toString).collect(Collectors.toList()));
+                        
saveExperimentOutputCollection(processOutput.getName(), destinationURIs.stream()
+                                .map(URI::toString)
+                                
.map(this::escapeSpecialCharacters).collect(Collectors.toList()));
                     }
                 }
                 return onSuccess("Output data staging task " + getTaskId() + " 
successfully completed");
@@ -181,9 +183,10 @@ public class OutputDataStagingTask extends DataStagingTask 
{
             } else {
                 // Uploading output file to the storage resource
                 assert processOutput != null;
-                boolean transferred = 
transferFileToStorage(sourceURI.getPath(), destinationURI.getPath(), 
sourceFileName, adaptor, storageResourceAdaptor);
+                boolean transferred = 
transferFileToStorage(sourceURI.getPath(), destinationURI.getPath(),
+                        sourceFileName, adaptor, storageResourceAdaptor);
                 if (transferred) {
-                    saveExperimentOutput(processOutput.getName(), 
destinationURI.toString());
+                    saveExperimentOutput(processOutput.getName(), 
escapeSpecialCharacters(destinationURI.toString()));
                 } else {
                     logger.warn("File " + sourceFileName + " did not 
transfer");
                 }

Reply via email to