Make testing more generic.
[lgpl/argeo-commons.git] / org.argeo.core / src / org / argeo / sync / fs / PathSync.java
index 1dc30db6567ea9ffec7a08c1355d72ef88e4f3b7..151194da6bbcb140793ff788ee71ac79b40784c3 100644 (file)
@@ -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;
        }
 }