From d18e9d996162d880db8f16f3a2e9c16622bf2f5b Mon Sep 17 00:00:00 2001 From: lguerin Date: Thu, 13 Aug 2015 14:44:45 +0200 Subject: [PATCH] Refactor SCP arguments --- .../sshj/xfer/scp/SCPDownloadClient.java | 3 +- .../net/schmizz/sshj/xfer/scp/SCPEngine.java | 94 ++++++++++--------- .../sshj/xfer/scp/SCPUploadClient.java | 3 +- 3 files changed, 55 insertions(+), 45 deletions(-) diff --git a/src/main/java/net/schmizz/sshj/xfer/scp/SCPDownloadClient.java b/src/main/java/net/schmizz/sshj/xfer/scp/SCPDownloadClient.java index 7d80c5e2..4c35513d 100644 --- a/src/main/java/net/schmizz/sshj/xfer/scp/SCPDownloadClient.java +++ b/src/main/java/net/schmizz/sshj/xfer/scp/SCPDownloadClient.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArgument; import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArguments; /** Support for uploading files over a connected link using SCP. */ @@ -63,7 +64,7 @@ public final class SCPDownloadClient extends AbstractSCPClient { void startCopy(String sourcePath, LocalDestFile targetFile) throws IOException { - List args = SCPArguments.with(Arg.SOURCE) + List args = SCPArguments.with(Arg.SOURCE) .and(Arg.QUIET) .and(Arg.PRESERVE_TIMES) .and(Arg.RECURSIVE, recursiveMode) diff --git a/src/main/java/net/schmizz/sshj/xfer/scp/SCPEngine.java b/src/main/java/net/schmizz/sshj/xfer/scp/SCPEngine.java index 78d7eff6..321ec943 100644 --- a/src/main/java/net/schmizz/sshj/xfer/scp/SCPEngine.java +++ b/src/main/java/net/schmizz/sshj/xfer/scp/SCPEngine.java @@ -41,30 +41,17 @@ class SCPEngine { VERBOSE('v'), PRESERVE_TIMES('p'), QUIET('q'), - LIMIT('l', ""); + LIMIT('l'); private final char a; - private String v; private Arg(char a) { this.a = a; } - private Arg(char a, String v) { - this.a = a; - this.v = v; - } - - public void setValue(String v) { - this.v = v; - } @Override public String toString() { - String arg = "-" + a; - if (v != null && v.length() > 0) { - arg = arg + v; - } - return arg; + return "-" + a; } } @@ -112,10 +99,10 @@ class SCPEngine { exitStatus = -1; } - void execSCPWith(List args, String path) + void execSCPWith(List args, String path) throws SSHException { final StringBuilder cmd = new StringBuilder(SCP_COMMAND); - for (Arg arg : args) { + for (SCPArgument arg : args) { cmd.append(" ").append(arg); } cmd.append(" "); @@ -201,62 +188,83 @@ class SCPEngine { return listener; } - public static class SCPArguments { + public static class SCPArgument { - private static List args = null; + private Arg name; + private String value; - private SCPArguments() { - this.args = new LinkedList(); + private SCPArgument(Arg name, String value) { + this.name = name; + this.value = value; } - private static void addArg(Arg arg, String value, boolean accept) { + public static SCPArgument addArgument(Arg name, String value) { + return new SCPArgument(name, value); + } + + @Override + public String toString() { + String option = name.toString(); + if (value != null) { + option = option + value; + } + return option; + } + } + + public static class SCPArguments { + + private static List args = null; + + private SCPArguments() { + this.args = new LinkedList(); + } + + private static void addArgument(Arg name, String value, boolean accept) { if (accept) { - if (null != value && value.length() > 0) { - arg.setValue(value); - } - args.add(arg); + args.add(SCPArgument.addArgument(name, value)); } } - public static SCPArguments with(Arg arg) { - return with(arg, null, true); + public static SCPArguments with(Arg name) { + return with(name, null, true); } - public static SCPArguments with(Arg arg, String value) { - return with(arg, value, true); + public static SCPArguments with(Arg name, String value) { + return with(name, value, true); } - public static SCPArguments with(Arg arg, boolean accept) { - return with(arg, null, accept); + public static SCPArguments with(Arg name, boolean accept) { + return with(name, null, accept); } - public static SCPArguments with(Arg arg, String value, boolean accept) { + public static SCPArguments with(Arg name, String value, boolean accept) { SCPArguments scpArguments = new SCPArguments(); - addArg(arg, value, accept); + addArgument(name, value, accept); return scpArguments; } - public SCPArguments and(Arg arg) { - addArg(arg, null, true); + public SCPArguments and(Arg name) { + addArgument(name, null, true); return this; } - public SCPArguments and(Arg arg, String value) { - addArg(arg, value, true); + public SCPArguments and(Arg name, String value) { + addArgument(name, value, true); return this; } - public SCPArguments and(Arg arg, boolean accept) { - addArg(arg, null, accept); + public SCPArguments and(Arg name, boolean accept) { + addArgument(name, null, accept); return this; } - public SCPArguments and(Arg arg, String value, boolean accept) { - addArg(arg, value, accept); + public SCPArguments and(Arg name, String value, boolean accept) { + addArgument(name, value, accept); return this; } - public List arguments() { + public List arguments() { return args; } } diff --git a/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java b/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java index ba5c8073..58fa3257 100644 --- a/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java +++ b/src/main/java/net/schmizz/sshj/xfer/scp/SCPUploadClient.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.List; +import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArgument; import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArguments; /** Support for uploading files over a connected link using SCP. */ @@ -59,7 +60,7 @@ public final class SCPUploadClient extends AbstractSCPClient { private synchronized void startCopy(LocalSourceFile sourceFile, String targetPath) throws IOException { - List args = SCPArguments.with(Arg.SINK) + List args = SCPArguments.with(Arg.SINK) .and(Arg.RECURSIVE) .and(Arg.PRESERVE_TIMES, sourceFile.providesAtimeMtime()) .and(Arg.LIMIT, String.valueOf(bandwidthLimit), (bandwidthLimit > 0))