X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.simple%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjsch%2FSshFilesDeployment.java;h=97ba6c740d0db3479775393133aa0e6f581bc26b;hb=7cb867319d0f8b1b0af3e7eb3f9833b091281320;hp=ac3194d0a452d16349bb5e8ac3e160c18f1bce8d;hpb=e677dd30c3401c26cde0a6c815b861a90c85b748;p=gpl%2Fargeo-slc.git 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 index ac3194d0a..97ba6c740 100644 --- 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 @@ -1,29 +1,55 @@ package org.argeo.slc.jsch; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.argeo.slc.core.deploy.ResourceSet; import org.springframework.core.io.Resource; -public class SshFilesDeployment implements Runnable { +import com.jcraft.jsch.Session; + +public class SshFilesDeployment extends AbstractJschTask implements Runnable { private String targetBase = ""; private ResourceSet resourceSet; - private SshTarget sshTarget; - public void run() { + @Override + void run(Session session) { JschMultiTasks multiTasks = new JschMultiTasks(); - multiTasks.setSshTarget(sshTarget); + List subDirs = new ArrayList(); Map resources = resourceSet.listResources(); for (String relPath : resources.keySet()) { + // Create dir if necessary + String dir; + int lastIndexSubDir = relPath.lastIndexOf('/'); + if (lastIndexSubDir > 0) + dir = targetBase + '/' + relPath.substring(0, lastIndexSubDir); + else + dir = targetBase; + + if (!subDirs.contains(dir)) { + subDirs.add(dir); + } + + // Copy resource Resource resource = resources.get(relPath); ScpTo scpTo = new ScpTo(); scpTo.setLocalResource(resource); scpTo.setRemotePath(targetBase + "/" + relPath); multiTasks.getTasks().add(scpTo); + + // TODO: set permissions + } + + RemoteExec remoteExec = new RemoteExec(); + for (String dir : subDirs) { + remoteExec.getCommands().add("mkdir -p " + dir); } + multiTasks.getTasks().add(0, remoteExec); - multiTasks.run(); + multiTasks.setSshTarget(getSshTarget()); + multiTasks.run(session); } public void setTargetBase(String targetBase) { @@ -33,9 +59,4 @@ public class SshFilesDeployment implements Runnable { public void setResourceSet(ResourceSet resourceSet) { this.resourceSet = resourceSet; } - - public void setSshTarget(SshTarget sshTarget) { - this.sshTarget = sshTarget; - } - }