]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/fs/FileSync.java
1 package org
.argeo
.cms
.acr
.fs
;
4 import java
.net
.URISyntaxException
;
5 import java
.nio
.file
.Path
;
6 import java
.nio
.file
.Paths
;
9 import org
.apache
.commons
.cli
.CommandLine
;
10 import org
.apache
.commons
.cli
.Option
;
11 import org
.apache
.commons
.cli
.Options
;
12 import org
.argeo
.cms
.cli
.CommandArgsException
;
13 import org
.argeo
.cms
.cli
.DescribedCommand
;
15 public class FileSync
implements DescribedCommand
<SyncResult
<Path
>> {
16 final static Option deleteOption
= Option
.builder().longOpt("delete").desc("delete from target").build();
17 final static Option recursiveOption
= Option
.builder("r").longOpt("recursive").desc("recurse into directories")
19 final static Option progressOption
= Option
.builder().longOpt("progress").hasArg(false).desc("show progress")
23 public SyncResult
<Path
> apply(List
<String
> t
) {
25 CommandLine line
= toCommandLine(t
);
26 List
<String
> remaining
= line
.getArgList();
27 if (remaining
.size() == 0) {
28 throw new CommandArgsException("There must be at least one argument");
30 URI sourceUri
= new URI(remaining
.get(0));
32 if (remaining
.size() == 1) {
33 targetUri
= Paths
.get(System
.getProperty("user.dir")).toUri();
35 targetUri
= new URI(remaining
.get(1));
37 boolean delete
= line
.hasOption(deleteOption
.getLongOpt());
38 boolean recursive
= line
.hasOption(recursiveOption
.getLongOpt());
39 PathSync pathSync
= new PathSync(sourceUri
, targetUri
, delete
, recursive
);
40 return pathSync
.call();
41 } catch (URISyntaxException e
) {
42 throw new CommandArgsException(e
);
47 public Options
getOptions() {
48 Options options
= new Options();
49 options
.addOption(recursiveOption
);
50 options
.addOption(deleteOption
);
51 options
.addOption(progressOption
);
56 public String
getUsage() {
57 return "[source URI] [target URI]";
60 public static void main(String
[] args
) {
61 DescribedCommand
.mainImpl(new FileSync(), args
);
62 // Options options = new Options();
63 // options.addOption("r", "recursive", false, "recurse into directories");
64 // options.addOption(Option.builder().longOpt("progress").hasArg(false).desc("show progress").build());
66 // CommandLineParser parser = new DefaultParser();
68 // CommandLine line = parser.parse(options, args);
69 // List<String> remaining = line.getArgList();
70 // if (remaining.size() == 0) {
71 // System.err.println("There must be at least one argument");
72 // printHelp(options);
75 // URI sourceUri = new URI(remaining.get(0));
77 // if (remaining.size() == 1) {
78 // targetUri = Paths.get(System.getProperty("user.dir")).toUri();
80 // targetUri = new URI(remaining.get(1));
82 // PathSync pathSync = new PathSync(sourceUri, targetUri);
84 // } catch (Exception exp) {
85 // exp.printStackTrace();
86 // printHelp(options);
91 // public static void printHelp(Options options) {
92 // HelpFormatter formatter = new HelpFormatter();
93 // formatter.printHelp("sync SRC [DEST]", options, true);
97 public String
getDescription() {
98 return "Synchronises files";