5
0
mirror of https://github.com/apache/sqoop.git synced 2025-05-11 22:41:50 +08:00

SQOOP-694 Introduce client "verbose" mode

(Jarek Jarcec Cecho)
This commit is contained in:
Bilung Lee 2012-11-13 20:49:41 -08:00
parent 211c67819e
commit 18b5d70d31
4 changed files with 122 additions and 20 deletions

View File

@ -30,9 +30,12 @@ private Environment() {
private static String serverPort;
private static String serverWebapp;
private static boolean verbose;
private static final String HOST_DEFAULT = "vm-sqoop2";
private static final String PORT_DEFAULT = "8080";
private static final String WEBAPP_DEFAULT = "sqoop";
private static final boolean VERBOSE_DEFAULT = false;
private static ResourceBundle resourceBundle;
@ -40,6 +43,7 @@ private Environment() {
serverHost = HOST_DEFAULT;
serverPort = PORT_DEFAULT;
serverWebapp = WEBAPP_DEFAULT;
verbose = VERBOSE_DEFAULT;
resourceBundle =
ResourceBundle.getBundle(Constants.RESOURCE_NAME, Locale.getDefault());
@ -76,4 +80,12 @@ public static String getServerUrl() {
public static ResourceBundle getResourceBundle() {
return resourceBundle;
}
public static void setVerbose(boolean newValue) {
verbose = newValue;
}
public static boolean isVerboose() {
return verbose;
}
}

View File

@ -26,10 +26,11 @@
public class SetCommand extends SqoopCommand
{
private SetServerFunction serverFunction;
private SetOptionFunction optionFunction;
protected SetCommand(Shell shell) {
super(shell, "set", "\\st",
new String[] {"server", "connector"},
new String[] {"server", "option"},
"Set", "info");
}
@ -49,12 +50,15 @@ public Object execute(List args) {
}
return serverFunction.execute(args);
} else if (func.equals("client")) {
return null;
} else if (func.equals("option")) {
if (optionFunction == null) {
optionFunction = new SetOptionFunction(io);
}
return optionFunction.execute(args);
} else {
String msg = "Usage: set " + getUsage();
throw new SqoopException(ClientError.CLIENT_0002, msg);
throw new SqoopException(ClientError.CLIENT_0002, msg);
}
}
}
}

View File

@ -0,0 +1,83 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sqoop.client.shell;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.OptionBuilder;
import org.apache.sqoop.client.core.Environment;
import org.codehaus.groovy.tools.shell.IO;
import java.util.List;
/**
*
*/
public class SetOptionFunction extends SqoopFunction {
public static final String NAME = "name";
public static final String VALUE = "value";
private IO io;
@SuppressWarnings("static-access")
protected SetOptionFunction(IO io) {
this.io = io;
this.addOption(OptionBuilder.hasArg()
.withDescription("Client option name")
.withLongOpt(NAME)
.create(NAME.charAt(0)));
this.addOption(OptionBuilder.hasArg()
.withDescription("New option value")
.withLongOpt(VALUE)
.create(VALUE.charAt(0)));
}
public Object execute(List<String> args) {
CommandLine line = parseOptions(this, 1, args);
if (!line.hasOption(NAME)) {
io.out.println("Required argument --name is missing.");
return null;
}
if (!line.hasOption(VALUE)) {
io.out.println("Required argument --value is missing.");
return null;
}
handleOptionSetting(line.getOptionValue(NAME), line.getOptionValue(VALUE));
io.out.println();
return null;
}
private void handleOptionSetting(String name, String value) {
if(name.equals("verbose")) {
boolean newValue = false;
if(value.equals("1") || value.equals("true")) {
newValue = true;
}
Environment.setVerbose(newValue);
io.out.println("Verbose option was changed to " + newValue);
return;
}
io.out.println("Unknown option " + name + ". Ignoring...");
}
}

View File

@ -19,6 +19,7 @@
import groovy.lang.MissingPropertyException;
import org.apache.sqoop.client.core.ClientError;
import org.apache.sqoop.client.core.Environment;
import org.apache.sqoop.common.SqoopException;
import org.codehaus.groovy.tools.shell.IO;
@ -57,12 +58,12 @@ public static void errorHook(Throwable t) {
if(t instanceof SqoopException
&& ((SqoopException)t).getErrorCode() == ClientError.CLIENT_0006) {
io.out.print("@|red Server has returned exception: |@");
printThrowable(io, t.getCause());
printThrowable(io, t.getCause(), Environment.isVerboose());
} else if(t.getClass() == MissingPropertyException.class) {
io.out.print("@|red Unknown command: |@");
io.out.println(t.getMessage());
} else {
printThrowable(io, t);
printThrowable(io, t, Environment.isVerboose());
}
}
@ -72,26 +73,28 @@ public static void errorHook(Throwable t) {
* @param io IO object to use for generating output
* @param t Throwable to display
*/
protected static void printThrowable(IO io, Throwable t) {
protected static void printThrowable(IO io, Throwable t, boolean verbose) {
io.out.print("@|red Exception: |@");
io.out.print(t.getClass().getName());
io.out.print(" @|red Message: |@");
io.out.print(t.getMessage());
io.out.println();
io.out.println("Stack trace:");
for(StackTraceElement e : t.getStackTrace()) {
io.out.print("\t @|bold at |@ ");
io.out.print(e.getClassName());
io.out.print(" (@|bold " + e.getFileName() + ":"
+ e.getLineNumber() + ") |@ ");
io.out.println();
}
if(verbose) {
io.out.println("Stack trace:");
for(StackTraceElement e : t.getStackTrace()) {
io.out.print("\t @|bold at |@ ");
io.out.print(e.getClassName());
io.out.print(" (@|bold " + e.getFileName() + ":"
+ e.getLineNumber() + ") |@ ");
io.out.println();
}
Throwable cause = t.getCause();
if(cause != null) {
io.out.print("Caused by: ");
printThrowable(io, cause);
Throwable cause = t.getCause();
if(cause != null) {
io.out.print("Caused by: ");
printThrowable(io, cause, verbose);
}
}
}