]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.cli/src/org/argeo/cms/cli/FileSync.java
Use latest build system
[lgpl/argeo-commons.git] / org.argeo.cms.cli / src / org / argeo / cms / cli / FileSync.java
1 package org.argeo.cms.cli;
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.api.cli.CommandArgsException;
13 import org.argeo.api.cli.DescribedCommand;
14 import org.argeo.cms.file.PathSync;
15 import org.argeo.cms.file.SyncResult;
16
17 public class FileSync implements DescribedCommand<SyncResult<Path>> {
18 final static Option deleteOption = Option.builder().longOpt("delete").desc("delete from target").build();
19 final static Option recursiveOption = Option.builder("r").longOpt("recursive").desc("recurse into directories")
20 .build();
21 final static Option progressOption = Option.builder().longOpt("progress").hasArg(false).desc("show progress")
22 .build();
23
24 @Override
25 public SyncResult<Path> apply(List<String> t) {
26 try {
27 CommandLine line = toCommandLine(t);
28 List<String> remaining = line.getArgList();
29 if (remaining.size() == 0) {
30 throw new CommandArgsException("There must be at least one argument");
31 }
32 URI sourceUri = new URI(remaining.get(0));
33 URI targetUri;
34 if (remaining.size() == 1) {
35 targetUri = Paths.get(System.getProperty("user.dir")).toUri();
36 } else {
37 targetUri = new URI(remaining.get(1));
38 }
39 boolean delete = line.hasOption(deleteOption.getLongOpt());
40 boolean recursive = line.hasOption(recursiveOption.getLongOpt());
41 PathSync pathSync = new PathSync(sourceUri, targetUri, delete, recursive);
42 return pathSync.call();
43 } catch (URISyntaxException e) {
44 throw new CommandArgsException(e);
45 }
46 }
47
48 @Override
49 public Options getOptions() {
50 Options options = new Options();
51 options.addOption(recursiveOption);
52 options.addOption(deleteOption);
53 options.addOption(progressOption);
54 return options;
55 }
56
57 @Override
58 public String getUsage() {
59 return "[source URI] [target URI]";
60 }
61
62 public static void main(String[] args) {
63 DescribedCommand.mainImpl(new FileSync(), args);
64 // Options options = new Options();
65 // options.addOption("r", "recursive", false, "recurse into directories");
66 // options.addOption(Option.builder().longOpt("progress").hasArg(false).desc("show progress").build());
67 //
68 // CommandLineParser parser = new DefaultParser();
69 // try {
70 // CommandLine line = parser.parse(options, args);
71 // List<String> remaining = line.getArgList();
72 // if (remaining.size() == 0) {
73 // System.err.println("There must be at least one argument");
74 // printHelp(options);
75 // System.exit(1);
76 // }
77 // URI sourceUri = new URI(remaining.get(0));
78 // URI targetUri;
79 // if (remaining.size() == 1) {
80 // targetUri = Paths.get(System.getProperty("user.dir")).toUri();
81 // } else {
82 // targetUri = new URI(remaining.get(1));
83 // }
84 // PathSync pathSync = new PathSync(sourceUri, targetUri);
85 // pathSync.run();
86 // } catch (Exception exp) {
87 // exp.printStackTrace();
88 // printHelp(options);
89 // System.exit(1);
90 // }
91 }
92
93 // public static void printHelp(Options options) {
94 // HelpFormatter formatter = new HelpFormatter();
95 // formatter.printHelp("sync SRC [DEST]", options, true);
96 // }
97
98 @Override
99 public String getDescription() {
100 return "Synchronises files";
101 }
102
103 }