]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/SshFilesDeployment.java
5809ca84463ace5c9400cd1a9a2281326c6c88be
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / jsch / SshFilesDeployment.java
1 package org.argeo.slc.jsch;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.argeo.slc.core.deploy.ResourceSet;
8 import org.springframework.core.io.Resource;
9
10 import com.jcraft.jsch.Session;
11
12 public class SshFilesDeployment extends AbstractJschTask implements Runnable {
13 private String targetBase = "";
14 private ResourceSet resourceSet;
15
16 @Override
17 void run(Session session) {
18 JschMultiTasks multiTasks = new JschMultiTasks();
19
20 List<String> subDirs = new ArrayList<String>();
21 Map<String, Resource> resources = resourceSet.listResources();
22 for (String relPath : resources.keySet()) {
23 // Create dir if necessary
24 String dir;
25 int lastIndexSubDir = relPath.lastIndexOf('/');
26 if (lastIndexSubDir > 0)
27 dir = targetBase + '/' + relPath.substring(0, lastIndexSubDir);
28 else
29 dir = targetBase;
30 if (!subDirs.contains(dir)) {
31 RemoteExec remoteExec = new RemoteExec();
32 remoteExec.setCommand("mkdir -p " + dir);
33 subDirs.add(dir);
34 multiTasks.getTasks().add(remoteExec);
35 }
36
37 // Copy resource
38 Resource resource = resources.get(relPath);
39 ScpTo scpTo = new ScpTo();
40 scpTo.setLocalResource(resource);
41 scpTo.setRemotePath(targetBase + "/" + relPath);
42 multiTasks.getTasks().add(scpTo);
43
44 // TODO: set permissions
45 }
46
47 multiTasks.setSshTarget(getSshTarget());
48 multiTasks.run(session);
49 }
50
51 public void setTargetBase(String targetBase) {
52 this.targetBase = targetBase;
53 }
54
55 public void setResourceSet(ResourceSet resourceSet) {
56 this.resourceSet = resourceSet;
57 }
58 }