SQOOP-1424: Sqoop2: Simplify SqoopCommand in shell package

This commit is contained in:
Jarek Jarcec Cecho 2014-08-09 21:28:46 -07:00 коммит произвёл Abraham Elmahrek
Родитель 0ad7401bb5
Коммит f01ab4d8d7
26 изменённых файлов: 227 добавлений и 557 удалений

Просмотреть файл

@ -37,6 +37,10 @@ limitations under the License.
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>

Просмотреть файл

@ -320,6 +320,11 @@ limitations under the License.
<artifactId>json-simple</artifactId>
<version>${json-simple.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.apache.sqoop.submission</groupId>
<artifactId>sqoop-submission-mapreduce</artifactId>

Просмотреть файл

@ -17,47 +17,23 @@
*/
package org.apache.sqoop.shell;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import java.util.List;
import static org.apache.sqoop.shell.ShellEnvironment.*;
/**
* Client side cloning of connection and job objects.
*/
public class CloneCommand extends SqoopCommand {
private CloneConnectionFunction connectionFunction;
private CloneJobFunction jobFunction;
public CloneCommand(Shell shell) {
super(shell, Constants.CMD_CLONE, Constants.CMD_CLONE_SC,
new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
Constants.PRE_CLONE, Constants.SUF_INFO);
}
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_CLONE_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new CloneConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new CloneJobFunction();
}
return jobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_CLONE,
Constants.CMD_CLONE_SC,
ImmutableMap.of(
Constants.FN_CONNECTION, CloneConnectionFunction.class,
Constants.FN_JOB, CloneJobFunction.class
)
);
}
}

Просмотреть файл

@ -17,47 +17,23 @@
*/
package org.apache.sqoop.shell;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import java.util.List;
import static org.apache.sqoop.shell.ShellEnvironment.*;
/**
*
*/
public class CreateCommand extends SqoopCommand {
private CreateConnectionFunction connectionFunction;
private CreateJobFunction jobFunction;
public CreateCommand(Shell shell) {
super(shell, Constants.CMD_CREATE, Constants.CMD_CREATE_SC,
new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
Constants.PRE_CREATE, Constants.SUF_INFO);
}
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_CREATE_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new CreateConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new CreateJobFunction();
}
return jobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_CREATE,
Constants.CMD_CREATE_SC,
ImmutableMap.of(
Constants.FN_CONNECTION, CreateConnectionFunction.class,
Constants.FN_JOB, CreateJobFunction.class
)
);
}
}

Просмотреть файл

@ -17,48 +17,23 @@
*/
package org.apache.sqoop.shell;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import java.util.List;
import static org.apache.sqoop.shell.ShellEnvironment.*;
/**
*
*/
public class DeleteCommand extends SqoopCommand {
private DeleteConnectionFunction connectionFunction;
private DeleteJobFunction jobFunction;
public DeleteCommand(Shell shell) {
super(shell, Constants.CMD_DELETE, Constants.CMD_DELETE_SC,
new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
Constants.PRE_DELETE, Constants.SUF_INFO);
}
@Override
@SuppressWarnings("unchecked")
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_DELETE_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new DeleteConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new DeleteJobFunction();
}
return jobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_DELETE,
Constants.CMD_DELETE_SC,
ImmutableMap.of(
Constants.FN_CONNECTION, DeleteConnectionFunction.class,
Constants.FN_JOB, DeleteJobFunction.class
)
);
}
}

Просмотреть файл

@ -17,48 +17,23 @@
*/
package org.apache.sqoop.shell;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import java.util.List;
import static org.apache.sqoop.shell.ShellEnvironment.*;
/**
*
*/
public class DisableCommand extends SqoopCommand {
private DisableConnectionFunction connectionFunction;
private DisableJobFunction jobFunction;
public DisableCommand(Shell shell) {
super(shell, Constants.CMD_DISABLE, Constants.CMD_DISABLE_SC,
new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
Constants.PRE_DISABLE, Constants.SUF_INFO);
}
@Override
@SuppressWarnings("unchecked")
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_DISABLE_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new DisableConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new DisableJobFunction();
}
return jobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_DISABLE,
Constants.CMD_DISABLE_SC,
ImmutableMap.of(
Constants.FN_CONNECTION, DisableConnectionFunction.class,
Constants.FN_JOB, DisableJobFunction.class
)
);
}
}

Просмотреть файл

@ -17,48 +17,23 @@
*/
package org.apache.sqoop.shell;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import java.util.List;
import static org.apache.sqoop.shell.ShellEnvironment.*;
/**
*
*/
public class EnableCommand extends SqoopCommand {
private EnableConnectionFunction connectionFunction;
private EnableJobFunction jobFunction;
public EnableCommand(Shell shell) {
super(shell, Constants.CMD_ENABLE, Constants.CMD_ENABLE_SC,
new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
Constants.PRE_ENABLE, Constants.SUF_INFO);
}
@Override
@SuppressWarnings("unchecked")
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_ENABLE_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new EnableConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new EnableJobFunction();
}
return jobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_ENABLE,
Constants.CMD_ENABLE_SC,
ImmutableMap.of(
Constants.FN_CONNECTION, EnableConnectionFunction.class,
Constants.FN_JOB, EnableJobFunction.class
)
);
}
}

Просмотреть файл

@ -17,48 +17,20 @@
*/
package org.apache.sqoop.shell;
import java.util.List;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import static org.apache.sqoop.shell.ShellEnvironment.*;
public class SetCommand extends SqoopCommand {
private SetServerFunction serverFunction;
private SetOptionFunction optionFunction;
protected SetCommand(Shell shell) {
super(shell, Constants.CMD_SET, Constants.CMD_SET_SC,
new String[] {Constants.FN_SERVER, Constants.FN_OPTION},
Constants.PRE_SET, Constants.SUF_INFO);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_SET_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_SERVER)) {
if (serverFunction == null) {
serverFunction = new SetServerFunction();
}
return serverFunction.execute(args);
} else if (func.equals(Constants.FN_OPTION)) {
if (optionFunction == null) {
optionFunction = new SetOptionFunction();
}
return optionFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_SET,
Constants.CMD_SET_SC,
ImmutableMap.of(
Constants.FN_SERVER, SetServerFunction.class,
Constants.FN_OPTION, SetOptionFunction.class
)
);
}
}

Просмотреть файл

@ -30,7 +30,7 @@ import static org.apache.sqoop.shell.ShellEnvironment.*;
@SuppressWarnings("serial")
public class SetOptionFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected SetOptionFunction() {
public SetOptionFunction() {
this.addOption(OptionBuilder.hasArg()
.withDescription(resourceString(Constants.RES_SET_PROMPT_OPT_NAME))
.withLongOpt(Constants.OPT_NAME)

Просмотреть файл

@ -26,8 +26,9 @@ import static org.apache.sqoop.shell.ShellEnvironment.*;
@SuppressWarnings("serial")
public class SetServerFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected SetServerFunction() {
public SetServerFunction() {
this.addOption(OptionBuilder.hasArg().withArgName(Constants.OPT_HOST)
.withDescription(resourceString(Constants.RES_SET_HOST_DESCRIPTION))
.withLongOpt(Constants.OPT_HOST)

Просмотреть файл

@ -17,90 +17,26 @@
*/
package org.apache.sqoop.shell;
import java.util.List;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import static org.apache.sqoop.shell.ShellEnvironment.*;
public class ShowCommand extends SqoopCommand
{
private ShowServerFunction serverFunction;
private ShowVersionFunction versionFunction;
private ShowConnectorFunction connectorFunction;
private ShowJobFunction jobFunction;
private ShowSubmissionFunction submissionFunction;
private ShowFrameworkFunction frameworkFunction;
private ShowConnectionFunction connectionFunction;
private ShowOptionFunction optionFunction;
public class ShowCommand extends SqoopCommand {
protected ShowCommand(Shell shell) {
super(shell, Constants.CMD_SHOW, Constants.CMD_SHOW_SC,
new String[] {Constants.FN_SERVER, Constants.FN_VERSION,
Constants.FN_CONNECTOR, Constants.FN_FRAMEWORK,
Constants.FN_CONNECTION, Constants.FN_JOB, Constants.FN_SUBMISSION, Constants.FN_OPTION },
Constants.PRE_SHOW, Constants.SUF_INFO);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_SHOW_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_SERVER)) {
if (serverFunction == null) {
serverFunction = new ShowServerFunction();
}
return serverFunction.execute(args);
} else if (func.equals(Constants.FN_VERSION)) {
if (versionFunction == null) {
versionFunction = new ShowVersionFunction();
}
return versionFunction.execute(args);
} else if (func.equals(Constants.FN_CONNECTOR)) {
if (connectorFunction == null) {
connectorFunction = new ShowConnectorFunction();
}
return connectorFunction.execute(args);
} else if (func.equals(Constants.FN_FRAMEWORK)) {
if (frameworkFunction == null) {
frameworkFunction = new ShowFrameworkFunction();
}
return frameworkFunction.execute(args);
} else if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new ShowConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new ShowJobFunction();
}
return jobFunction.execute(args);
} else if (func.equals(Constants.FN_SUBMISSION)) {
if (submissionFunction == null) {
submissionFunction = new ShowSubmissionFunction();
}
return submissionFunction.execute(args);
} else if (func.equals(Constants.FN_OPTION)) {
if (optionFunction == null) {
optionFunction = new ShowOptionFunction();
}
return optionFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_SHOW,
Constants.CMD_SHOW_SC,
new ImmutableMap.Builder<String, Class<? extends SqoopFunction>>()
.put(Constants.FN_SERVER, ShowServerFunction.class)
.put(Constants.FN_VERSION, ShowVersionFunction.class)
.put(Constants.FN_CONNECTOR, ShowConnectorFunction.class)
.put(Constants.FN_FRAMEWORK, ShowFrameworkFunction.class)
.put(Constants.FN_CONNECTION, ShowConnectionFunction.class)
.put(Constants.FN_JOB, ShowJobFunction.class)
.put(Constants.FN_SUBMISSION, ShowSubmissionFunction.class)
.put(Constants.FN_OPTION, ShowOptionFunction.class)
.build()
);
}
}

Просмотреть файл

@ -37,7 +37,7 @@ import static org.apache.sqoop.shell.utils.FormDisplayer.*;
@SuppressWarnings("serial")
public class ShowConnectionFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected ShowConnectionFunction() {
public ShowConnectionFunction() {
this.addOption(OptionBuilder
.withDescription(resourceString(Constants.RES_SHOW_PROMPT_DISPLAY_ALL_CONNS))
.withLongOpt(Constants.OPT_ALL)

Просмотреть файл

@ -34,7 +34,7 @@ import static org.apache.sqoop.shell.utils.FormDisplayer.*;
@SuppressWarnings("serial")
public class ShowConnectorFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected ShowConnectorFunction() {
public ShowConnectorFunction() {
this.addOption(OptionBuilder
.withDescription(resourceString(Constants.RES_SHOW_PROMPT_DISPLAY_ALL_CONNECTORS))
.withLongOpt(Constants.OPT_ALL)

Просмотреть файл

@ -32,7 +32,7 @@ import static org.apache.sqoop.shell.utils.FormDisplayer.*;
*/
@SuppressWarnings("serial")
public class ShowFrameworkFunction extends SqoopFunction {
protected ShowFrameworkFunction() {
public ShowFrameworkFunction() {
}
@Override

Просмотреть файл

@ -38,7 +38,7 @@ import static org.apache.sqoop.shell.utils.FormDisplayer.*;
@SuppressWarnings("serial")
public class ShowJobFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected ShowJobFunction() {
public ShowJobFunction() {
this.addOption(OptionBuilder
.withDescription(resourceString(Constants.RES_SHOW_PROMPT_DISPLAY_ALL_JOBS))
.withLongOpt(Constants.OPT_ALL)

Просмотреть файл

@ -33,7 +33,7 @@ public class ShowOptionFunction extends SqoopFunction {
* Construct new object.
*/
@SuppressWarnings("static-access")
protected ShowOptionFunction() {
public ShowOptionFunction() {
this.addOption(OptionBuilder
.hasArg().withArgName(Constants.OPT_NAME)
.withDescription(resource.getString(Constants.RES_SET_PROMPT_OPT_NAME))

Просмотреть файл

@ -27,7 +27,7 @@ import static org.apache.sqoop.shell.ShellEnvironment.*;
@SuppressWarnings("serial")
public class ShowServerFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected ShowServerFunction() {
public ShowServerFunction() {
this.addOption(OptionBuilder
.withDescription(resourceString(Constants.RES_SHOW_PROMPT_DISPLAY_ALL_SERVERS))
.withLongOpt(Constants.OPT_ALL)

Просмотреть файл

@ -33,7 +33,7 @@ import static org.apache.sqoop.shell.ShellEnvironment.*;
@SuppressWarnings("serial")
public class ShowSubmissionFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected ShowSubmissionFunction() {
public ShowSubmissionFunction() {
this.addOption(OptionBuilder
.withDescription(resourceString(Constants.RES_SHOW_PROMPT_DISPLAY_ALL_SUBMISSIONS))
.withLongOpt(Constants.OPT_DETAIL)

Просмотреть файл

@ -35,7 +35,7 @@ public class ShowVersionFunction extends SqoopFunction {
@SuppressWarnings("static-access")
protected ShowVersionFunction() {
public ShowVersionFunction() {
this.addOption(OptionBuilder
.withDescription(resourceString(Constants.RES_SHOW_PROMPT_DISPLAY_ALL_VERSIONS))
.withLongOpt(Constants.OPT_ALL)

Просмотреть файл

@ -23,99 +23,75 @@ import groovy.lang.Script;
import java.util.*;
import org.apache.commons.lang.StringUtils;
import org.apache.sqoop.shell.core.Constants;
import org.apache.sqoop.common.SqoopException;
import org.apache.sqoop.shell.core.ShellError;
import org.apache.sqoop.utils.ClassUtils;
import org.codehaus.groovy.tools.shell.ComplexCommandSupport;
import org.codehaus.groovy.tools.shell.Shell;
public abstract class SqoopCommand extends ComplexCommandSupport
{
private String descriptionPrefix;
private String descriptionPostfix;
import static org.apache.sqoop.shell.ShellEnvironment.*;
private String description;
private String usage;
private String help;
/**
* Sqoop shell command.
*
* Every command should define following resource properties:
*
* $command.description
* One sentence describing purpose of the command, displayed on "help" command.
*/
public abstract class SqoopCommand extends ComplexCommandSupport {
@SuppressWarnings("unchecked")
protected SqoopCommand(Shell shell, String name, String shortcut,
String[] funcs, String descriptionPrefix, String descriptionPostfix) {
/**
* Command name
*/
private String name;
/**
* Function map given by concrete implementation.
*
* Key: Name of the function as is present in the shell
* Value: Class name implementing the function
*/
private final Map<String, Class<? extends SqoopFunction>> functionNames;
/**
* Instantiated functions for reuse. Built lazily.
*/
private final Map<String, SqoopFunction> functionInstances;
protected SqoopCommand(Shell shell,
String name,
String shortcut,
Map<String, Class<? extends SqoopFunction>> funcs) {
super(shell, name, shortcut);
this.functions = new LinkedList<String>();
for (String func : funcs) {
this.functions.add(func);
}
this.name = name;
this.functionNames = funcs;
this.functionInstances = new HashMap<String, SqoopFunction>();
this.descriptionPrefix = descriptionPrefix;
this.descriptionPostfix = descriptionPostfix;
this.functions = new LinkedList<String>();
this.functions.addAll(funcs.keySet());
}
@Override
public String getDescription() {
if (description == null) {
StringBuilder sb = new StringBuilder();
if (descriptionPrefix != null) {
sb.append(descriptionPrefix);
sb.append(" ");
}
@SuppressWarnings("unchecked")
Iterator<String> iterator = functions.iterator();
int size = functions.size();
sb.append(iterator.next());
if (size > 1) {
for (int i = 1; i < (size - 1); i++) {
sb.append(", ");
sb.append(iterator.next());
}
sb.append(" or ");
sb.append(iterator.next());
}
if (descriptionPostfix != null) {
sb.append(" ");
sb.append(descriptionPostfix);
}
description = sb.toString();
}
return description;
return resourceString(name + ".description");
}
@Override
public String getUsage() {
if (usage == null) {
StringBuilder sb = new StringBuilder();
sb.append("[");
@SuppressWarnings("unchecked")
Iterator<String> iterator = functions.iterator();
int size = functions.size();
sb.append(iterator.next());
for (int i = 1; i < size; i++) {
sb.append("|");
sb.append(iterator.next());
}
sb.append("]");
usage = sb.toString();
}
return usage;
return new StringBuilder()
.append("[")
.append(StringUtils.join(functionNames.keySet(), "|"))
.append("]")
.toString();
}
@Override
public String getHelp() {
if (help == null) {
help = getDescription() + ".";
}
return help;
return getDescription() + ".";
}
/**
@ -132,7 +108,38 @@ public abstract class SqoopCommand extends ComplexCommandSupport
* @param args list
* @return Object
*/
public abstract Object executeCommand(List args);
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_SHARED_USAGE, name, getUsage());
return null;
}
String func = (String)args.get(0);
// Unknown function
if(!functionNames.containsKey(func)) {
printlnResource(Constants.RES_SHARED_UNKNOWN_FUNCTION, func);
return null;
}
// If we already do have the instance, execute it
if(functionInstances.containsKey(func)) {
return functionInstances.get(func).execute(args);
}
// Otherwise create new instance
Class klass = functionNames.get(func);
SqoopFunction instance = (SqoopFunction) ClassUtils.instantiate(klass);
if(instance == null) {
// This is pretty much a developer error as it shouldn't happen without changing and testing code
throw new SqoopException(ShellError.SHELL_0000, "Can't instantiate class " + klass);
}
functionInstances.put(func, instance);
// And return the function execution
return instance.execute(args);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
protected void resolveVariables(List arg) {

Просмотреть файл

@ -17,41 +17,19 @@
*/
package org.apache.sqoop.shell;
import java.util.List;
import org.apache.log4j.Logger;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import static org.apache.sqoop.shell.ShellEnvironment.printlnResource;
public class StartCommand extends SqoopCommand {
public static final Logger LOG = Logger.getLogger(StartCommand.class);
private StartJobFunction startJobFunction;
protected StartCommand(Shell shell) {
super(shell, Constants.CMD_START, Constants.CMD_START_SC,
new String[] {Constants.FN_JOB}, Constants.PRE_START, null);
}
@Override
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_START_USAGE, getUsage());
return null;
}
String func = (String) args.get(0);
if (func.equals(Constants.FN_JOB)) {
if (startJobFunction == null) {
startJobFunction = new StartJobFunction();
}
return startJobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
}
return null;
super(shell,
Constants.CMD_START,
Constants.CMD_START_SC,
new ImmutableMap.Builder<String, Class<? extends SqoopFunction>>()
.put(Constants.FN_JOB, StartJobFunction.class)
.build()
);
}
}

Просмотреть файл

@ -17,39 +17,19 @@
*/
package org.apache.sqoop.shell;
import java.util.List;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import static org.apache.sqoop.shell.ShellEnvironment.printlnResource;
public class StatusCommand extends SqoopCommand {
private StatusJobFunction statusJobFunction;
protected StatusCommand(Shell shell) {
super(shell, Constants.CMD_STATUS, Constants.CMD_STATUS_SC,
new String[] { Constants.FN_JOB }, Constants.PRE_STATUS, null);
}
@Override
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_STATUS_USAGE, getUsage());
return null;
}
String func = (String) args.get(0);
if (func.equals(Constants.FN_JOB)) {
if (statusJobFunction == null) {
statusJobFunction = new StatusJobFunction();
}
return statusJobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
}
return null;
super(shell,
Constants.CMD_STATUS,
Constants.CMD_STATUS_SC,
new ImmutableMap.Builder<String, Class<? extends SqoopFunction>>()
.put(Constants.FN_JOB, StatusJobFunction.class)
.build()
);
}
}

Просмотреть файл

@ -17,37 +17,19 @@
*/
package org.apache.sqoop.shell;
import java.util.List;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import static org.apache.sqoop.shell.ShellEnvironment.printlnResource;
public class StopCommand extends SqoopCommand {
private StopJobFunction stopJobFunction;
protected StopCommand(Shell shell) {
super(shell, Constants.CMD_STOP, Constants.CMD_STOP_SC,
new String[] { Constants.FN_JOB }, Constants.PRE_STOP, null);
}
@Override
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_STOP_USAGE, getUsage());
return null;
}
String func = (String) args.get(0);
if (func.equals(Constants.FN_JOB)) {
if (stopJobFunction == null) {
stopJobFunction = new StopJobFunction();
}
return stopJobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
}
return null;
super(shell,
Constants.CMD_STOP,
Constants.CMD_STOP_SC,
new ImmutableMap.Builder<String, Class<? extends SqoopFunction>>()
.put(Constants.FN_JOB, StopJobFunction.class)
.build()
);
}
}

Просмотреть файл

@ -17,47 +17,23 @@
*/
package org.apache.sqoop.shell;
import com.google.common.collect.ImmutableMap;
import org.apache.sqoop.shell.core.Constants;
import org.codehaus.groovy.tools.shell.Shell;
import java.util.List;
import static org.apache.sqoop.shell.ShellEnvironment.*;
/**
*
*/
public class UpdateCommand extends SqoopCommand {
private UpdateConnectionFunction connectionFunction;
private UpdateJobFunction jobFunction;
public UpdateCommand(Shell shell) {
super(shell, Constants.CMD_UPDATE, Constants.CMD_UPDATE_SC,
new String[] {Constants.FN_CONNECTION, Constants.FN_JOB},
Constants.PRE_UPDATE, Constants.SUF_INFO);
}
public Object executeCommand(List args) {
if (args.size() == 0) {
printlnResource(Constants.RES_UPDATE_USAGE, getUsage());
return null;
}
String func = (String)args.get(0);
if (func.equals(Constants.FN_CONNECTION)) {
if (connectionFunction == null) {
connectionFunction = new UpdateConnectionFunction();
}
return connectionFunction.execute(args);
} else if (func.equals(Constants.FN_JOB)) {
if (jobFunction == null) {
jobFunction = new UpdateJobFunction();
}
return jobFunction.execute(args);
} else {
printlnResource(Constants.RES_FUNCTION_UNKNOWN, func);
return null;
}
super(shell,
Constants.CMD_UPDATE,
Constants.CMD_UPDATE_SC,
ImmutableMap.of(
Constants.FN_CONNECTION, UpdateConnectionFunction.class,
Constants.FN_JOB, UpdateJobFunction.class
)
);
}
}

Просмотреть файл

@ -122,29 +122,16 @@ public class Constants {
public static final String FN_VERSION = "version";
public static final String FN_FRAMEWORK = "framework";
public static final String PRE_CLONE = "Clone";
public static final String PRE_CREATE = "Create";
public static final String PRE_DELETE = "Delete";
public static final String PRE_SET = "Set";
public static final String PRE_SHOW = "Show";
public static final String PRE_UPDATE = "Update";
public static final String PRE_START = "Start";
public static final String PRE_STATUS = "Status";
public static final String PRE_STOP = "Stop";
public static final String PRE_ENABLE = "Enable";
public static final String PRE_DISABLE = "Disable";
public static final String SUF_INFO = "Info";
public static final String PROP_HOMEDIR = "user.home";
public static final String PROP_CURDIR = "user.dir";
public static final String SQOOP_PROMPT = "sqoop";
// Shared resources
public static final String RES_SHARED_USAGE = "shared.usage";
public static final String RES_SHARED_UNKNOWN_FUNCTION = "shared.unknown.function";
// Resource Keys for various messages
public static final String RES_FUNCTION_UNKNOWN =
"args.function.unknown";
public static final String RES_ARGS_XID_MISSING =
"args.xid_missing";
public static final String RES_ARGS_FXID_MISSING =
@ -175,8 +162,6 @@ public class Constants {
public static final String RES_PROMPT_FILL_JOB_METADATA =
"prompt.fill_job_metadata";
public static final String RES_CLONE_USAGE =
"clone.usage";
public static final String RES_CLONE_CONN_SUCCESSFUL =
"clone.conn.successful";
public static final String RES_CLONE_JOB_SUCCESSFUL =
@ -186,8 +171,6 @@ public class Constants {
public static final String RES_CLONE_CLONING_JOB =
"clone.cloning_job";
public static final String RES_CREATE_USAGE =
"create.usage";
public static final String RES_CREATE_CONN_SUCCESSFUL =
"create.conn_successful";
public static final String RES_CREATE_JOB_SUCCESSFUL =
@ -197,18 +180,11 @@ public class Constants {
public static final String RES_CREATE_CREATING_JOB =
"create.creating_job";
public static final String RES_DELETE_USAGE =
"delete.usage";
public static final String RES_DISABLE_USAGE =
"disable.usage";
public static final String RES_DISABLE_CONNECTION_SUCCESSFUL =
"disable.conn_successful";
public static final String RES_DISABLE_JOB_SUCCESSFUL =
"disable.job_successful";
public static final String RES_ENABLE_USAGE =
"enable.usage";
public static final String RES_ENABLE_CONNECTION_SUCCESSFUL =
"enable.conn_successful";
public static final String RES_ENABLE_JOB_SUCCESSFUL =
@ -234,8 +210,6 @@ public class Constants {
public static final String RES_UNRECOGNIZED_CMD =
"unrecognized.cmd";
public static final String RES_SET_USAGE =
"set.usage";
public static final String RES_SET_PROMPT_OPT_NAME =
"set.prompt_opt_name";
public static final String RES_SET_PROMPT_OPT_VALUE =
@ -261,14 +235,10 @@ public class Constants {
public static final String RES_SET_SERVER_IGNORED =
"set.server_ignored";
public static final String RES_SHOW_USAGE =
"show.usage";
public static final String RES_SHOW_PROMPT_DISPLAY_ALL_CONNS =
"show.prompt_display_all_conns";
public static final String RES_SHOW_PROMPT_DISPLAY_CONN_XID =
"show.prompt_display_conn_xid";
public static final String RES_SHOW_CONN_USAGE =
"show.conn_usage";
public static final String RES_SHOW_PROMPT_CONNS_TO_SHOW =
"show.prompt_conns_to_show";
public static final String RES_SHOW_PROMPT_CONN_INFO =
@ -280,8 +250,6 @@ public class Constants {
"show.prompt_display_all_connectors";
public static final String RES_SHOW_PROMPT_DISPLAY_CONNECTOR_CID =
"show.prompt_display_connector_cid";
public static final String RES_SHOW_CONNECTOR_USAGE =
"show.connector_usage";
public static final String RES_SHOW_PROMPT_CONNECTORS_TO_SHOW =
"show.prompt_connectors_to_show";
public static final String RES_SHOW_PROMPT_CONNECTOR_INFO =
@ -296,8 +264,6 @@ public class Constants {
"show.prompt_display_all_jobs";
public static final String RES_SHOW_PROMPT_DISPLAY_JOB_JID =
"show.prompt_display_job_jid";
public static final String RES_SHOW_JOB_USAGE =
"show.job_usage";
public static final String RES_SHOW_PROMPT_JOBS_TO_SHOW =
"show.prompt_jobs_to_show";
public static final String RES_SHOW_PROMPT_JOB_INFO =
@ -342,17 +308,9 @@ public class Constants {
public static final String RES_SHOW_PROMPT_VERSION_PROTOCOL =
"show.prompt_version_protocol";
public static final String RES_START_USAGE =
"start.usage";
public static final String RES_STATUS_USAGE =
"status.usage";
public static final String RES_PROMPT_SYNCHRONOUS =
"start.prompt_synchronous";
public static final String RES_STOP_USAGE =
"stop.usage";
public static final String RES_SQOOP_SHELL_BANNER =
"sqoop.shell_banner";
public static final String RES_SQOOP_PROMPT_SHELL_LOADRC =
@ -360,8 +318,6 @@ public class Constants {
public static final String RES_SQOOP_PROMPT_SHELL_LOADEDRC =
"sqoop.prompt_shell_loadedrc";
public static final String RES_UPDATE_USAGE =
"update.usage";
public static final String RES_UPDATE_UPDATING_CONN =
"update.conn";
public static final String RES_UPDATE_CONN_SUCCESSFUL =

Просмотреть файл

@ -17,7 +17,7 @@
############################
# Security Form
#
#############################
object-name.label = Name
object-name.help = Non unique name of the entity to help you remember \
it's purpose
@ -25,10 +25,13 @@ object-name.help = Non unique name of the entity to help you remember \
#############################
# Messages
#
#############################
# Shared (for all commands/functions)
shared.usage = @|bold Usage:|@ {0} {1}
shared.unknown.function = The specified function "{0}" is not recognized.
# Argument related
#
args.function.unknown = The specified function "{0}" is not recognized.
args.xid_missing = Required argument --xid is missing.
args.fxid_missing = Required argument --fxid is missing.
args.txid_missing = Required argument --txid is missing.
@ -37,7 +40,6 @@ args.cid_missing = Required argument --cid is missing.
args.name_missing = Required argument --name is missing.
args.value_missing = Required argument --value is missing.
## Generic description of various ids, types etc
prompt.conn_id = Connection ID
prompt.connector_id = Connector ID
@ -53,17 +55,15 @@ connection object
prompt.fill_job_metadata = Please fill following values to create new \
job object
#
# Update command
update.description = Update objects in Sqoop repository
update.conn = Updating connection with id {0}
update.job = Updating job with id {0}
update.usage = Usage: update {0}
update.conn_successful = Connection was successfully updated with status {0}
update.job_successful = Job was successfully updated with status {0}
#
# Clone command
clone.usage = Usage: clone {0}
clone.description = Create new object based on existing one
clone.conn.successful = Connection was successfully created with validation \
status {0} and persistent id {1}
clone.job.successful = Job was successfully created with validation \
@ -71,34 +71,28 @@ clone.job.successful = Job was successfully created with validation \
clone.cloning_conn = Cloning connection with id {0}
clone.cloning_job = Cloning job with id {0}
#
# Create command
create.usage = Usage: create {0}
create.description = Create new object in Sqoop repository
create.conn_successful = New connection was successfully created with \
validation status {0} and persistent id {1}
create.job_successful = New job was successfully created with validation \
status {0} and persistent id {1}
## Creating messages
create.creating_conn = Creating connection for connector with id {0}
create.creating_job = Creating job for connections with id {0} and {1}
#
# Delete command
delete.usage = Usage: delete {0}
delete.description = Delete existing object in Sqoop repository
#
# Enable command
enable.usage = Usage: enable {0}
enable.description = Enable object in Sqoop repository
enable.conn_successful = Connection {0} was successfully enabled
enable.job_successful = Job {0} was successfully enabled
#
# Disable command
disable.usage = Usage: disable {0}
disable.description = Disable object in Sqoop repository
disable.conn_successful = Connection {0} was successfully disabled
disable.job_successful = Job {0} was successfully disabled
#
# Help command
help.usage = [<command>]
help.description = Display this help message
@ -114,9 +108,8 @@ help.specific_cmd_info = For help on a specific command type: \
unrecognized.cmd = Unrecognized command {0}
#
# Set command
set.usage = Usage: set {0}
set.description = Configure various client options and settings
set.prompt_opt_name = Client option name
set.prompt_opt_value = New option value
set.verbose_changed = Verbose option was changed to {0}
@ -131,8 +124,8 @@ set.server_successful = Server is set successfully
set.server_ignored = --host, --port or --webapp option is ignored, because --url option is given.
show.usage = Usage: show {0}
# Show command
show.description = Display various objects and configuration options
show.prompt_display_all_conns = Display all connections
show.prompt_display_conn_xid = Display the connection with xid
show.conn_usage = Usage: show connection
@ -182,12 +175,15 @@ sqoop.shell_banner = @|green Sqoop Shell:|@ Type '@|bold help|@' or '@|bold \\h|
sqoop.prompt_shell_loadrc = Loading resource file {0}
sqoop.prompt_shell_loadedrc = Resource file loaded.
start.usage = Usage: start {0}
# Start command
start.description = Start job
start.prompt_synchronous = Wait for submission to finish
stop.usage = Usage: stop {0}
# Stop command
stop.description = Stop job
status.usage = Usage: status {0}
# Status command
status.description = Display status of a job
# Various Table headers
table.header.id = Id