mirror of
https://github.com/hierynomus/sshj.git
synced 2025-12-07 15:50:57 +03:00
Refactor SCP arguments
This commit is contained in:
@@ -26,6 +26,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArgument;
|
||||||
import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArguments;
|
import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArguments;
|
||||||
|
|
||||||
/** Support for uploading files over a connected link using SCP. */
|
/** 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)
|
void startCopy(String sourcePath, LocalDestFile targetFile)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
List<Arg> args = SCPArguments.with(Arg.SOURCE)
|
List<SCPArgument> args = SCPArguments.with(Arg.SOURCE)
|
||||||
.and(Arg.QUIET)
|
.and(Arg.QUIET)
|
||||||
.and(Arg.PRESERVE_TIMES)
|
.and(Arg.PRESERVE_TIMES)
|
||||||
.and(Arg.RECURSIVE, recursiveMode)
|
.and(Arg.RECURSIVE, recursiveMode)
|
||||||
|
|||||||
@@ -41,30 +41,17 @@ class SCPEngine {
|
|||||||
VERBOSE('v'),
|
VERBOSE('v'),
|
||||||
PRESERVE_TIMES('p'),
|
PRESERVE_TIMES('p'),
|
||||||
QUIET('q'),
|
QUIET('q'),
|
||||||
LIMIT('l', "");
|
LIMIT('l');
|
||||||
|
|
||||||
private final char a;
|
private final char a;
|
||||||
private String v;
|
|
||||||
|
|
||||||
private Arg(char a) {
|
private Arg(char a) {
|
||||||
this.a = 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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
String arg = "-" + a;
|
return "-" + a;
|
||||||
if (v != null && v.length() > 0) {
|
|
||||||
arg = arg + v;
|
|
||||||
}
|
|
||||||
return arg;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,10 +99,10 @@ class SCPEngine {
|
|||||||
exitStatus = -1;
|
exitStatus = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void execSCPWith(List<Arg> args, String path)
|
void execSCPWith(List<SCPArgument> args, String path)
|
||||||
throws SSHException {
|
throws SSHException {
|
||||||
final StringBuilder cmd = new StringBuilder(SCP_COMMAND);
|
final StringBuilder cmd = new StringBuilder(SCP_COMMAND);
|
||||||
for (Arg arg : args) {
|
for (SCPArgument arg : args) {
|
||||||
cmd.append(" ").append(arg);
|
cmd.append(" ").append(arg);
|
||||||
}
|
}
|
||||||
cmd.append(" ");
|
cmd.append(" ");
|
||||||
@@ -201,62 +188,83 @@ class SCPEngine {
|
|||||||
return listener;
|
return listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SCPArguments {
|
public static class SCPArgument {
|
||||||
|
|
||||||
private static List<Arg> args = null;
|
private Arg name;
|
||||||
|
private String value;
|
||||||
|
|
||||||
private SCPArguments() {
|
private SCPArgument(Arg name, String value) {
|
||||||
this.args = new LinkedList<Arg>();
|
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<SCPArgument> args = null;
|
||||||
|
|
||||||
|
private SCPArguments() {
|
||||||
|
this.args = new LinkedList<SCPArgument>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addArgument(Arg name, String value, boolean accept) {
|
||||||
if (accept) {
|
if (accept) {
|
||||||
if (null != value && value.length() > 0) {
|
args.add(SCPArgument.addArgument(name, value));
|
||||||
arg.setValue(value);
|
|
||||||
}
|
|
||||||
args.add(arg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SCPArguments with(Arg arg) {
|
public static SCPArguments with(Arg name) {
|
||||||
return with(arg, null, true);
|
return with(name, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SCPArguments with(Arg arg, String value) {
|
public static SCPArguments with(Arg name, String value) {
|
||||||
return with(arg, value, true);
|
return with(name, value, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SCPArguments with(Arg arg, boolean accept) {
|
public static SCPArguments with(Arg name, boolean accept) {
|
||||||
return with(arg, null, 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();
|
SCPArguments scpArguments = new SCPArguments();
|
||||||
addArg(arg, value, accept);
|
addArgument(name, value, accept);
|
||||||
return scpArguments;
|
return scpArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SCPArguments and(Arg arg) {
|
public SCPArguments and(Arg name) {
|
||||||
addArg(arg, null, true);
|
addArgument(name, null, true);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SCPArguments and(Arg arg, String value) {
|
public SCPArguments and(Arg name, String value) {
|
||||||
addArg(arg, value, true);
|
addArgument(name, value, true);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SCPArguments and(Arg arg, boolean accept) {
|
public SCPArguments and(Arg name, boolean accept) {
|
||||||
addArg(arg, null, accept);
|
addArgument(name, null, accept);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SCPArguments and(Arg arg, String value, boolean accept) {
|
public SCPArguments and(Arg name, String value, boolean accept) {
|
||||||
addArg(arg, value, accept);
|
addArgument(name, value, accept);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Arg> arguments() {
|
public List<SCPArgument> arguments() {
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArgument;
|
||||||
import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArguments;
|
import static net.schmizz.sshj.xfer.scp.SCPEngine.SCPArguments;
|
||||||
|
|
||||||
/** Support for uploading files over a connected link using SCP. */
|
/** 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)
|
private synchronized void startCopy(LocalSourceFile sourceFile, String targetPath)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
List<Arg> args = SCPArguments.with(Arg.SINK)
|
List<SCPArgument> args = SCPArguments.with(Arg.SINK)
|
||||||
.and(Arg.RECURSIVE)
|
.and(Arg.RECURSIVE)
|
||||||
.and(Arg.PRESERVE_TIMES, sourceFile.providesAtimeMtime())
|
.and(Arg.PRESERVE_TIMES, sourceFile.providesAtimeMtime())
|
||||||
.and(Arg.LIMIT, String.valueOf(bandwidthLimit), (bandwidthLimit > 0))
|
.and(Arg.LIMIT, String.valueOf(bandwidthLimit), (bandwidthLimit > 0))
|
||||||
|
|||||||
Reference in New Issue
Block a user