package org.argeo.cli.fs; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.argeo.cli.CommandArgsException; import org.argeo.cli.DescribedCommand; import org.argeo.sync.SyncResult; public class FileSync implements DescribedCommand> { final static Option deleteOption = Option.builder().longOpt("delete").desc("delete from target").build(); final static Option recursiveOption = Option.builder("r").longOpt("recursive").desc("recurse into directories") .build(); final static Option progressOption = Option.builder().longOpt("progress").hasArg(false).desc("show progress") .build(); @Override public SyncResult apply(List t) { try { CommandLine line = toCommandLine(t); List remaining = line.getArgList(); if (remaining.size() == 0) { throw new CommandArgsException("There must be at least one argument"); } URI sourceUri = new URI(remaining.get(0)); URI targetUri; if (remaining.size() == 1) { targetUri = Paths.get(System.getProperty("user.dir")).toUri(); } else { targetUri = new URI(remaining.get(1)); } boolean delete = line.hasOption(deleteOption.getLongOpt()); boolean recursive = line.hasOption(recursiveOption.getLongOpt()); PathSync pathSync = new PathSync(sourceUri, targetUri, delete, recursive); return pathSync.call(); } catch (URISyntaxException e) { throw new CommandArgsException(e); } } @Override public Options getOptions() { Options options = new Options(); options.addOption(recursiveOption); options.addOption(deleteOption); options.addOption(progressOption); return options; } @Override public String getUsage() { return "[source URI] [target URI]"; } public static void main(String[] args) { DescribedCommand.mainImpl(new FileSync(), args); // Options options = new Options(); // options.addOption("r", "recursive", false, "recurse into directories"); // options.addOption(Option.builder().longOpt("progress").hasArg(false).desc("show progress").build()); // // CommandLineParser parser = new DefaultParser(); // try { // CommandLine line = parser.parse(options, args); // List remaining = line.getArgList(); // if (remaining.size() == 0) { // System.err.println("There must be at least one argument"); // printHelp(options); // System.exit(1); // } // URI sourceUri = new URI(remaining.get(0)); // URI targetUri; // if (remaining.size() == 1) { // targetUri = Paths.get(System.getProperty("user.dir")).toUri(); // } else { // targetUri = new URI(remaining.get(1)); // } // PathSync pathSync = new PathSync(sourceUri, targetUri); // pathSync.run(); // } catch (Exception exp) { // exp.printStackTrace(); // printHelp(options); // System.exit(1); // } } // public static void printHelp(Options options) { // HelpFormatter formatter = new HelpFormatter(); // formatter.printHelp("sync SRC [DEST]", options, true); // } @Override public String getDescription() { return "Synchronises files"; } }