]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/fs/FileSync.java
Use runtime namespace context as default.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / fs / FileSync.java
1 package org.argeo.cms.acr.fs;
2
3 import java.net.URI;
4 import java.net.URISyntaxException;
5 import java.nio.file.Path;
6 import java.nio.file.Paths;
7 import java.util.List;
8
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;
14
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")
18 .build();
19 final static Option progressOption = Option.builder().longOpt("progress").hasArg(false).desc("show progress")
20 .build();
21
22 @Override
23 public SyncResult<Path> apply(List<String> t) {
24 try {
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");
29 }
30 URI sourceUri = new URI(remaining.get(0));
31 URI targetUri;
32 if (remaining.size() == 1) {
33 targetUri = Paths.get(System.getProperty("user.dir")).toUri();
34 } else {
35 targetUri = new URI(remaining.get(1));
36 }
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);
43 }
44 }
45
46 @Override
47 public Options getOptions() {
48 Options options = new Options();
49 options.addOption(recursiveOption);
50 options.addOption(deleteOption);
51 options.addOption(progressOption);
52 return options;
53 }
54
55 @Override
56 public String getUsage() {
57 return "[source URI] [target URI]";
58 }
59
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());
65 //
66 // CommandLineParser parser = new DefaultParser();
67 // try {
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);
73 // System.exit(1);
74 // }
75 // URI sourceUri = new URI(remaining.get(0));
76 // URI targetUri;
77 // if (remaining.size() == 1) {
78 // targetUri = Paths.get(System.getProperty("user.dir")).toUri();
79 // } else {
80 // targetUri = new URI(remaining.get(1));
81 // }
82 // PathSync pathSync = new PathSync(sourceUri, targetUri);
83 // pathSync.run();
84 // } catch (Exception exp) {
85 // exp.printStackTrace();
86 // printHelp(options);
87 // System.exit(1);
88 // }
89 }
90
91 // public static void printHelp(Options options) {
92 // HelpFormatter formatter = new HelpFormatter();
93 // formatter.printHelp("sync SRC [DEST]", options, true);
94 // }
95
96 @Override
97 public String getDescription() {
98 return "Synchronises files";
99 }
100
101 }