X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.core%2Fsrc%2Forg%2Fargeo%2Fsync%2Ffs%2FPathSync.java;h=151194da6bbcb140793ff788ee71ac79b40784c3;hb=438237c2b8c995d4f9562d53bfe4ea63c4442054;hp=1dc30db6567ea9ffec7a08c1355d72ef88e4f3b7;hpb=d6bb3d3e0643c410ecd3ca1d4d88ae412697f258;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.core/src/org/argeo/sync/fs/PathSync.java b/org.argeo.core/src/org/argeo/sync/fs/PathSync.java index 1dc30db65..151194da6 100644 --- a/org.argeo.core/src/org/argeo/sync/fs/PathSync.java +++ b/org.argeo.core/src/org/argeo/sync/fs/PathSync.java @@ -6,18 +6,15 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.spi.FileSystemProvider; -import java.time.ZonedDateTime; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.argeo.jackrabbit.fs.DavexFsProvider; +import org.argeo.ssh.Sftp; import org.argeo.sync.SyncException; -import org.argeo.util.LangUtils; +/** Synchronises two paths. */ public class PathSync implements Runnable { - private final static Log log = LogFactory.getLog(PathSync.class); - private final URI sourceUri, targetUri; + private boolean delete = false; public PathSync(URI sourceUri, URI targetUri) { this.sourceUri = sourceUri; @@ -27,34 +24,30 @@ public class PathSync implements Runnable { @Override public void run() { try { - FileSystemProvider sourceFsProvider = createFsProvider(sourceUri); - FileSystemProvider targetFsProvider = createFsProvider(targetUri); - Path sourceBasePath = sourceUri.getScheme() != null ? sourceFsProvider.getPath(sourceUri) - : Paths.get(sourceUri.getPath()); - Path targetBasePath = targetUri.getScheme() != null ? targetFsProvider.getPath(targetUri) - : Paths.get(targetUri.getPath()); - SyncFileVisitor syncFileVisitor = new SyncFileVisitor(sourceBasePath, targetBasePath); - ZonedDateTime begin = ZonedDateTime.now(); + Path sourceBasePath = createPath(sourceUri); + Path targetBasePath = createPath(targetUri); + SyncFileVisitor syncFileVisitor = new SyncFileVisitor(sourceBasePath, targetBasePath, delete); Files.walkFileTree(sourceBasePath, syncFileVisitor); - if (log.isDebugEnabled()) - log.debug("Sync from " + sourceBasePath + " to " + targetBasePath + " took " + LangUtils.since(begin)); } catch (Exception e) { e.printStackTrace(); } } - private static FileSystemProvider createFsProvider(URI uri) { - FileSystemProvider fsProvider; - if (uri.getScheme() == null || uri.getScheme().equals("file")) - fsProvider = FileSystems.getDefault().provider(); - else if (uri.getScheme().equals("davex")) - fsProvider = new DavexFsProvider(); - else + private static Path createPath(URI uri) { + Path path; + if (uri.getScheme() == null) { + path = Paths.get(uri.getPath()); + } else if (uri.getScheme().equals("file")) { + FileSystemProvider fsProvider = FileSystems.getDefault().provider(); + path = fsProvider.getPath(uri); + } else if (uri.getScheme().equals("davex")) { + FileSystemProvider fsProvider = new DavexFsProvider(); + path = fsProvider.getPath(uri); + } else if (uri.getScheme().equals("sftp")) { + Sftp sftp = new Sftp(uri); + path = sftp.getBasePath(); + } else throw new SyncException("URI scheme not supported for " + uri); - return fsProvider; - } - - static enum Arg { - to, from; + return path; } }