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) {
this.tasks = tasks;
}
+ public List<AbstractJschTask> getTasks() {
+ return tasks;
+ }
+
}
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;
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);
}
}
--- /dev/null
+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;
+ }
+
+}