]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Introduce ssh file deployment
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 11 Feb 2010 14:46:13 +0000 (14:46 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 11 Feb 2010 14:46:13 +0000 (14:46 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3331 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/JschMultiTasks.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/ScpTo.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/SshFilesDeployment.java [new file with mode: 0644]

index 195e73648f7d8c6ea36a2991f48fb8744636e925..3dcba87c3c808ca717c8d256e6887eec26b4a11b 100644 (file)
@@ -1,11 +1,12 @@
 package org.argeo.slc.jsch;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.jcraft.jsch.Session;
 
 public class JschMultiTasks extends AbstractJschTask {
-       private List<AbstractJschTask> tasks;
+       private List<AbstractJschTask> tasks = new ArrayList<AbstractJschTask>();
 
        @Override
        protected void run(Session session) {
@@ -19,4 +20,8 @@ public class JschMultiTasks extends AbstractJschTask {
                this.tasks = tasks;
        }
 
+       public List<AbstractJschTask> getTasks() {
+               return tasks;
+       }
+
 }
index 70785afbcdc89c2647996061df46fe74962e0d65..484cd6dc3c9c37dccec2c242db3d350a93568005 100644 (file)
@@ -8,6 +8,7 @@ import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -48,19 +49,35 @@ public class ScpTo extends AbstractJschTask {
                        if (pathMatcher == null)
                                pathMatcher = new AntPathMatcher();
 
-                       log.info("Start multiple scp based on "+dirOs);
+                       log.info("Start multiple scp based on " + dirOs);
                        scanDir(session, dirOs, "", includes, excludes);
                }
 
                if (localResource != null) {
-                       File lFile;
                        try {
-                               lFile = localResource.getFile();
+                               File lFile = localResource.getFile();
+                               uploadFile(session, lFile, remotePath);
                        } catch (IOException e) {
-                               throw new SlcException("Cannot interpret resource "
-                                               + localResource + " as file.", e);
+                               OutputStream out = null;
+                               InputStream in = null;
+                               File tempFile = null;
+                               try {
+                                       tempFile = File.createTempFile(getClass().getSimpleName()
+                                                       + "-" + localResource.getFilename(), null);
+                                       out = FileUtils.openOutputStream(tempFile);
+                                       in = localResource.getInputStream();
+                                       IOUtils.copy(in, out);
+                                       uploadFile(session, tempFile, remotePath);
+                               } catch (IOException e1) {
+                                       throw new SlcException("Can neither interpret resource "
+                                                       + localResource
+                                                       + " as file, nor create a temporary file", e1);
+                               } finally {
+                                       IOUtils.closeQuietly(in);
+                                       IOUtils.closeQuietly(out);
+                                       FileUtils.deleteQuietly(tempFile);
+                               }
                        }
-                       uploadFile(session, lFile, remotePath);
                }
        }
 
diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/SshFilesDeployment.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/SshFilesDeployment.java
new file mode 100644 (file)
index 0000000..005f01d
--- /dev/null
@@ -0,0 +1,41 @@
+package org.argeo.slc.jsch;
+
+import java.util.Map;
+
+import org.argeo.slc.core.deploy.RelativeResourceSet;
+import org.springframework.core.io.Resource;
+
+public class SshFilesDeployment implements Runnable {
+       private String targetBase = "";
+       private RelativeResourceSet resourceSet;
+       private SshTarget sshTarget;
+
+       public void run() {
+               JschMultiTasks multiTasks = new JschMultiTasks();
+               multiTasks.setSshTarget(sshTarget);
+
+               Map<String, Resource> resources = resourceSet.listResources();
+               for (String relPath : resources.keySet()) {
+                       Resource resource = resources.get(relPath);
+                       ScpTo scpTo = new ScpTo();
+                       scpTo.setLocalResource(resource);
+                       scpTo.setRemotePath(targetBase + "/" + relPath);
+                       multiTasks.getTasks().add(scpTo);
+               }
+
+               multiTasks.run();
+       }
+
+       public void setTargetBase(String targetBase) {
+               this.targetBase = targetBase;
+       }
+
+       public void setResourceSet(RelativeResourceSet resourceSet) {
+               this.resourceSet = resourceSet;
+       }
+
+       public void setSshTarget(SshTarget sshTarget) {
+               this.sshTarget = sshTarget;
+       }
+
+}