1 package org
.argeo
.sync
.fs
;
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
;
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
;
17 public class PathSync
implements Runnable
{
18 private final static Log log
= LogFactory
.getLog(PathSync
.class);
20 private final URI sourceUri
, targetUri
;
22 public PathSync(URI sourceUri
, URI targetUri
) {
23 this.sourceUri
= sourceUri
;
24 this.targetUri
= targetUri
;
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
) {
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();
53 throw new SyncException("URI scheme not supported for " + uri
);