]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.sync/src/org/argeo/sync/fs/PathSync.java
Introduce Argeo Sync
[lgpl/argeo-commons.git] / org.argeo.sync / src / org / argeo / sync / fs / PathSync.java
1 package org.argeo.sync.fs;
2
3 import java.net.URI;
4 import java.nio.file.FileSystems;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.nio.file.Paths;
8 import java.nio.file.spi.FileSystemProvider;
9 import java.time.ZonedDateTime;
10
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.argeo.jackrabbit.fs.DavexFsProvider;
14 import org.argeo.sync.SyncException;
15 import org.argeo.util.LangUtils;
16
17 public class PathSync implements Runnable {
18 private final static Log log = LogFactory.getLog(PathSync.class);
19
20 private final URI sourceUri, targetUri;
21
22 public PathSync(URI sourceUri, URI targetUri) {
23 this.sourceUri = sourceUri;
24 this.targetUri = targetUri;
25 }
26
27 @Override
28 public void run() {
29 try {
30 FileSystemProvider sourceFsProvider = createFsProvider(sourceUri);
31 FileSystemProvider targetFsProvider = createFsProvider(targetUri);
32 Path sourceBasePath = sourceUri.getScheme() != null ? sourceFsProvider.getPath(sourceUri)
33 : Paths.get(sourceUri.getPath());
34 Path targetBasePath = targetUri.getScheme() != null ? targetFsProvider.getPath(targetUri)
35 : Paths.get(targetUri.getPath());
36 SyncFileVisitor syncFileVisitor = new SyncFileVisitor(sourceBasePath, targetBasePath);
37 ZonedDateTime begin = ZonedDateTime.now();
38 Files.walkFileTree(sourceBasePath, syncFileVisitor);
39 if (log.isDebugEnabled())
40 log.debug("Sync from " + sourceBasePath + " to " + targetBasePath + " took " + LangUtils.since(begin));
41 } catch (Exception e) {
42 e.printStackTrace();
43 }
44 }
45
46 private static FileSystemProvider createFsProvider(URI uri) {
47 FileSystemProvider fsProvider;
48 if (uri.getScheme() == null || uri.getScheme().equals("file"))
49 fsProvider = FileSystems.getDefault().provider();
50 else if (uri.getScheme().equals("davex"))
51 fsProvider = new DavexFsProvider();
52 else
53 throw new SyncException("URI scheme not supported for " + uri);
54 return fsProvider;
55 }
56
57 static enum Arg {
58 to, from;
59 }
60 }