You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ch...@apache.org on 2013/03/11 05:35:01 UTC

[1/3] SQOOP-918: Introduce client API and change Sqoop shell to use it

http://git-wip-us.apache.org/repos/asf/sqoop/blob/2f9a2a71/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java b/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
index 8afb492..c56cefd 100644
--- a/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
+++ b/client/src/main/java/org/apache/sqoop/client/utils/SubmissionDisplayer.java
@@ -17,94 +17,94 @@
  */
 package org.apache.sqoop.client.utils;
 
-import org.apache.sqoop.client.core.Environment;
 import org.apache.sqoop.model.MSubmission;
 import org.apache.sqoop.submission.SubmissionStatus;
 import org.apache.sqoop.submission.counter.Counter;
 import org.apache.sqoop.submission.counter.CounterGroup;
 import org.apache.sqoop.submission.counter.Counters;
-import org.codehaus.groovy.tools.shell.IO;
 
 import java.text.SimpleDateFormat;
 
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
 /**
  *
  */
 public final class SubmissionDisplayer {
 
-  public static void display(IO io, MSubmission submission) {
+  public static void display(MSubmission submission) {
 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
-    io.out.println("@|bold Submission details|@");
+    println("@|bold Submission details|@");
 
-    io.out.print("Job id: ");
-    io.out.println(submission.getJobId());
+    print("Job id: ");
+    println(submission.getJobId());
 
-    io.out.print("Status: ");
-    printColoredStatus(io, submission.getStatus());
-    io.out.println();
+    print("Status: ");
+    printColoredStatus(submission.getStatus());
+    println();
 
-    io.out.print("Creation date: ");
-    io.out.println(dateFormat.format(submission.getCreationDate()));
+    print("Creation date: ");
+    println(dateFormat.format(submission.getCreationDate()));
 
-    io.out.print("Last update date: ");
-    io.out.println(dateFormat.format(submission.getLastUpdateDate()));
+    print("Last update date: ");
+    println(dateFormat.format(submission.getLastUpdateDate()));
 
     String externalId = submission.getExternalId();
     if(externalId != null) {
-      io.out.print("External Id: ");
-      io.out.println(externalId);
+      print("External Id: ");
+      println(externalId);
 
       String externalLink = submission.getExternalLink();
       if(externalLink != null) {
-        io.out.println("\t" + externalLink);
+        println("\t" + externalLink);
       }
     }
 
     if(submission.getStatus().isRunning()) {
       double progress = submission.getProgress();
-      io.out.print("Progress: ");
+      print("Progress: ");
       if(progress == -1) {
-        io.out.println("Progress is not available");
+        println("Progress is not available");
       } else {
-        io.out.println(String.format("%.2f %%", progress * 100));
+        println(String.format("%.2f %%", progress * 100));
       }
     }
 
     Counters counters = submission.getCounters();
     if(counters != null) {
-      io.out.println("Counters:");
+      println("Counters:");
       for(CounterGroup group : counters) {
-        io.out.print("\t");
-        io.out.println(group.getName());
+        print("\t");
+        println(group.getName());
         for(Counter counter : group) {
-          io.out.print("\t\t");
-          io.out.print(counter.getName());
-          io.out.print(": ");
-          io.out.println(counter.getValue());
+          print("\t\t");
+          print(counter.getName());
+          print(": ");
+          println(counter.getValue());
         }
       }
     }
 
     // Exception handling
     if(submission.getExceptionInfo() != null) {
-      io.out.print("@|red Exception: |@");
-      io.out.println(submission.getExceptionInfo());
+      print("@|red Exception: |@");
+      println(submission.getExceptionInfo());
 
-      if(Environment.isVerboose() && submission.getExceptionStackTrace() != null) {
-        io.out.print("@|bold Stack trace: |@");
-        io.out.println(submission.getExceptionStackTrace());
+      if(isVerboose() && submission.getExceptionStackTrace() != null) {
+        print("@|bold Stack trace: |@");
+        println(submission.getExceptionStackTrace());
       }
     }
   }
 
-  public static void printColoredStatus(IO io, SubmissionStatus status) {
+  public static void printColoredStatus(SubmissionStatus status) {
     if(status.isRunning()) {
-      io.out.print("@|green " + status.toString() + " |@");
+      print("@|green " + status.toString() + " |@");
     } else if(status.isFailure()) {
-      io.out.print("@|red " + status.toString() + " |@");
+      print("@|red " + status.toString() + " |@");
     } else {
-      io.out.print(status.toString());
+      print(status.toString());
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/2f9a2a71/client/src/main/java/org/apache/sqoop/client/utils/TableDisplayer.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/utils/TableDisplayer.java b/client/src/main/java/org/apache/sqoop/client/utils/TableDisplayer.java
index 63d2ef4..79ea96f 100644
--- a/client/src/main/java/org/apache/sqoop/client/utils/TableDisplayer.java
+++ b/client/src/main/java/org/apache/sqoop/client/utils/TableDisplayer.java
@@ -18,11 +18,12 @@
 package org.apache.sqoop.client.utils;
 
 import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.tools.shell.IO;
 
 import java.util.LinkedList;
 import java.util.List;
 
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
+
 /**
  * Display table based data
  */
@@ -31,13 +32,10 @@ public class TableDisplayer {
   /**
    * Display given columns in nice table structure to given IO object.
    *
-   * @param io Shell's IO object
    * @param headers List of headers
    * @param columns Array of columns
    */
-  public static void display(IO io, List<String> headers, List<String> ...columns) {
-
-    assert io != null;
+  public static void display(List<String> headers, List<String> ...columns) {
     assert headers != null;
     assert columns != null;
     assert headers.size() == columns.length;
@@ -52,50 +50,49 @@ public class TableDisplayer {
     }
 
     // First line is border
-    drawLine(io, widths);
+    drawLine(widths);
 
     // Print out header (text is centralised)
-    io.out.print("| ");
+    print("| ");
     for(int i = 0 ; i < columnCount; i++) {
-      io.out.print(StringUtils.center(headers.get(i), widths.get(i), ' '));
-      io.out.print((i == columnCount -1) ? " |" : " | ");
+      print(StringUtils.center(headers.get(i), widths.get(i), ' '));
+      print((i == columnCount -1) ? " |" : " | ");
     }
-    io.out.println();
+    println();
 
     // End up header by border
-    drawLine(io, widths);
+    drawLine(widths);
 
     // Number of rows in the table
     int rows = getMaximalRows(columns);
 
     // Print out each row
     for(int row = 0 ; row < rows; row++) {
-      io.out.print("| ");
+      print("| ");
       for(int i = 0 ; i < columnCount; i++) {
-        io.out.print(StringUtils.rightPad(columns[i].get(row), widths.get(i), ' '));
-        io.out.print((i == columnCount -1) ? " |" : " | ");
+        print(StringUtils.rightPad(columns[i].get(row), widths.get(i), ' '));
+        print((i == columnCount -1) ? " |" : " | ");
       }
-      io.out.println();
+      println();
     }
 
     // End table by final border
-    drawLine(io, widths);
+    drawLine(widths);
   }
 
   /**
    * Draw border line
    *
-   * @param io Shell's associated IO object
    * @param widths List of widths of each column
    */
-  private static void drawLine(IO io, List<Integer> widths) {
+  private static void drawLine(List<Integer> widths) {
     int last = widths.size() - 1;
-    io.out.print("+-");
+    print("+-");
     for(int i = 0; i < widths.size(); i++) {
-      io.out.print(StringUtils.repeat("-", widths.get(i)));
-      io.out.print((i == last) ? "-+" : "-+-");
+      print(StringUtils.repeat("-", widths.get(i)));
+      print((i == last) ? "-+" : "-+-");
     }
-    io.out.println();
+    println();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/sqoop/blob/2f9a2a71/client/src/main/java/org/apache/sqoop/client/utils/ThrowableDisplayer.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/utils/ThrowableDisplayer.java b/client/src/main/java/org/apache/sqoop/client/utils/ThrowableDisplayer.java
index 45c78fb..73aeb1f 100644
--- a/client/src/main/java/org/apache/sqoop/client/utils/ThrowableDisplayer.java
+++ b/client/src/main/java/org/apache/sqoop/client/utils/ThrowableDisplayer.java
@@ -19,9 +19,9 @@ package org.apache.sqoop.client.utils;
 
 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;
+
+import static org.apache.sqoop.client.shell.ShellEnvironment.*;
 
 /**
  * Pretty printing of Throwable objects
@@ -29,18 +29,6 @@ import org.codehaus.groovy.tools.shell.IO;
 public class ThrowableDisplayer {
 
   /**
-   * Associated shell IO object.
-   *
-   * This objects needs to be set explicitly as some of the methods are called
-   * by Groovy shell without ability to pass additional arguments.
-   */
-  private static IO io;
-
-  public static void setIo(IO ioObject) {
-    io = ioObject;
-  }
-
-  /**
    * Error hook installed to Groovy shell.
    *
    * Will display exception that appeared during executing command. In most
@@ -52,48 +40,46 @@ public class ThrowableDisplayer {
    * @param t Throwable to be displayed
    */
   public static void errorHook(Throwable t) {
-    io.out.println("@|red Exception has occurred during processing command |@");
+    println("@|red Exception has occurred during processing command |@");
 
     // If this is server exception from server
     if(t instanceof SqoopException
       && ((SqoopException)t).getErrorCode() == ClientError.CLIENT_0006) {
-      io.out.print("@|red Server has returned exception: |@");
-      printThrowable(io, t.getCause(), Environment.isVerboose());
+      print("@|red Server has returned exception: |@");
+      printThrowable(t.getCause(), isVerboose());
     } else if(t.getClass() == MissingPropertyException.class) {
-      io.out.print("@|red Unknown command: |@");
-      io.out.println(t.getMessage());
+      print("@|red Unknown command: |@");
+      println(t.getMessage());
     } else {
-      printThrowable(io, t, Environment.isVerboose());
+      printThrowable(t, isVerboose());
     }
   }
 
   /**
    * Pretty print Throwable instance including stack trace and causes.
    *
-   * @param io IO object to use for generating output
    * @param t Throwable to display
    */
-  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();
+  protected static void printThrowable(Throwable t, boolean verbose) {
+    print("@|red Exception: |@");
+    print(t.getClass().getName());
+    print(" @|red Message: |@");
+    print(t.getMessage());
+    println();
 
     if(verbose) {
-      io.out.println("Stack trace:");
+      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();
+        print("\t @|bold at |@ ");
+        print(e.getClassName());
+        print(" (@|bold " + e.getFileName() + ":" + e.getLineNumber() + ") |@ ");
+        println();
       }
 
       Throwable cause = t.getCause();
       if(cause != null) {
-        io.out.print("Caused by: ");
-        printThrowable(io, cause, verbose);
+        print("Caused by: ");
+        printThrowable(cause, verbose);
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/2f9a2a71/client/src/main/resources/client-resource.properties
----------------------------------------------------------------------
diff --git a/client/src/main/resources/client-resource.properties b/client/src/main/resources/client-resource.properties
index 58cfe55..c3a22bb 100644
--- a/client/src/main/resources/client-resource.properties
+++ b/client/src/main/resources/client-resource.properties
@@ -26,8 +26,9 @@ object-name.help = Non unique name of the entity to help you remember \
 #############################
 # Messages
 #
-#  Missing args
+# Argument related
 #
+args.function.unknown = The specified function "{0}" is not recognized.
 args.xid_missing = Required argument --xid is missing.
 args.jid_missing = Required argument --jid is missing.
 args.cid_missing = Required argument --cid is missing.

http://git-wip-us.apache.org/repos/asf/sqoop/blob/2f9a2a71/test/src/test/java/org/apache/sqoop/integration/TomcatTestCase.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/sqoop/integration/TomcatTestCase.java b/test/src/test/java/org/apache/sqoop/integration/TomcatTestCase.java
index 8b46179..5631144 100644
--- a/test/src/test/java/org/apache/sqoop/integration/TomcatTestCase.java
+++ b/test/src/test/java/org/apache/sqoop/integration/TomcatTestCase.java
@@ -19,6 +19,7 @@ package org.apache.sqoop.integration;
 
 import org.apache.log4j.Logger;
 import org.apache.commons.lang.StringUtils;
+import org.apache.sqoop.client.SqoopClient;
 import org.apache.sqoop.test.minicluster.TomcatSqoopMiniCluster;
 import org.junit.After;
 import org.junit.Before;
@@ -61,10 +62,17 @@ abstract public class TomcatTestCase {
    */
   private TomcatSqoopMiniCluster cluster;
 
+  /**
+   * Sqoop client API.
+   */
+  private SqoopClient client;
+
   @Before
   public void startServer() throws Exception {
     cluster = new TomcatSqoopMiniCluster(getTemporaryPath());
     cluster.start();
+
+    client = new SqoopClient(getServerUrl());
   }
 
   @After
@@ -72,6 +80,15 @@ abstract public class TomcatTestCase {
     cluster.stop();
   }
 
+  /**
+   * Return SqoopClient configured to talk to testing server.
+   *
+   * @return
+   */
+  public SqoopClient getClient() {
+    return client;
+  }
+
   public String getTemporaryPath() {
     return TMP_PATH;
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/2f9a2a71/test/src/test/java/org/apache/sqoop/integration/connector/jdbc/generic/TableImportTest.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/sqoop/integration/connector/jdbc/generic/TableImportTest.java b/test/src/test/java/org/apache/sqoop/integration/connector/jdbc/generic/TableImportTest.java
index 20588d3..538a277 100644
--- a/test/src/test/java/org/apache/sqoop/integration/connector/jdbc/generic/TableImportTest.java
+++ b/test/src/test/java/org/apache/sqoop/integration/connector/jdbc/generic/TableImportTest.java
@@ -18,32 +18,20 @@
 package org.apache.sqoop.integration.connector.jdbc.generic;
 
 import org.apache.log4j.Logger;
-import org.apache.sqoop.client.request.ConnectionRequest;
-import org.apache.sqoop.client.request.ConnectorRequest;
-import org.apache.sqoop.client.request.FrameworkRequest;
-import org.apache.sqoop.client.request.JobRequest;
-import org.apache.sqoop.client.request.SubmissionRequest;
 import org.apache.sqoop.framework.configuration.OutputFormat;
 import org.apache.sqoop.framework.configuration.StorageType;
 import org.apache.sqoop.integration.connector.ConnectorTestCase;
-import org.apache.sqoop.json.ConnectorBean;
-import org.apache.sqoop.json.FrameworkBean;
-import org.apache.sqoop.json.ValidationBean;
 import org.apache.sqoop.model.MConnection;
-import org.apache.sqoop.model.MConnector;
 import org.apache.sqoop.model.MEnumInput;
-import org.apache.sqoop.model.MFramework;
 import org.apache.sqoop.model.MJob;
+import org.apache.sqoop.model.MPersistableEntity;
 import org.apache.sqoop.model.MStringInput;
 import org.apache.sqoop.model.MSubmission;
 import org.apache.sqoop.validation.Status;
-import org.apache.sqoop.validation.Validation;
 import org.junit.Test;
 
-import java.util.Map;
-
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertTrue;
 
 /**
@@ -74,13 +62,7 @@ public class TableImportTest extends ConnectorTestCase {
     // the client API for embedding Sqoop client will be ready.
 
     // Connection creation
-    FrameworkBean frameworkBean = (new FrameworkRequest()).read(getServerUrl());
-    ConnectorBean connectorBean = (new ConnectorRequest()).read(getServerUrl(), "1");
-    MFramework framework = frameworkBean.getFramework();
-    MConnector connector = connectorBean.getConnectors().get(0);
-    MConnection connection = new MConnection(connector.getPersistenceId(),
-                                             connector.getConnectionForms(),
-                                             framework.getConnectionForms());
+    MConnection connection = getClient().newConnection(1L);
 
     // Connector values
     ((MStringInput) (connection.getConnectorPart().getForms().get(0).getInputs().get(0))).setValue(provider.getJdbcDriver());
@@ -90,21 +72,11 @@ public class TableImportTest extends ConnectorTestCase {
     // Framework values
     // No need to set anything
 
-    ValidationBean validationBean = (new ConnectionRequest()).create(getServerUrl(), connection);
-
-    assertEquals(Status.FINE, validationBean.getConnectorValidation().getStatus());
-    assertEquals(Status.FINE, validationBean.getFrameworkValidation().getStatus());
-    assertNotNull(validationBean.getId());
-    connection.setPersistenceId(validationBean.getId());
+    assertEquals(Status.FINE, getClient().createConnection(connection));
+    assertNotSame(MPersistableEntity.PERSISTANCE_ID_DEFAULT, connection.getPersistenceId());
 
     // Job creation
-    MJob job = new MJob(
-      connector.getPersistenceId(),
-      connection.getPersistenceId(),
-      MJob.Type.IMPORT,
-      connector.getJobForms(MJob.Type.IMPORT),
-      framework.getJobForms(MJob.Type.IMPORT)
-    );
+    MJob job = getClient().newJob(connection.getPersistenceId(), MJob.Type.IMPORT);
 
     // Connector values
     ((MStringInput) (job.getConnectorPart().getForms().get(0).getInputs().get(0))).setValue(provider.escapeTableName(getTableName()));
@@ -114,21 +86,16 @@ public class TableImportTest extends ConnectorTestCase {
     ((MEnumInput) (job.getFrameworkPart().getForms().get(0).getInputs().get(1))).setValue(OutputFormat.TEXT_FILE.toString());
     ((MStringInput) (job.getFrameworkPart().getForms().get(0).getInputs().get(2))).setValue(getMapreduceDirectory());
 
-    validationBean = (new JobRequest()).create(getServerUrl(), job);
-    assertEquals(Status.FINE, validationBean.getConnectorValidation().getStatus());
-    assertEquals(Status.FINE, validationBean.getFrameworkValidation().getStatus());
-    assertNotNull(validationBean.getId());
-    job.setPersistenceId(validationBean.getId());
-
-    SubmissionRequest submissionRequest = new SubmissionRequest();
+    assertEquals(Status.FINE, getClient().createJob(job));
+    assertNotSame(MPersistableEntity.PERSISTANCE_ID_DEFAULT, job.getPersistenceId());
 
-    MSubmission submission = submissionRequest.create(getServerUrl(), "" + job.getPersistenceId()).getSubmission();
+    MSubmission submission = getClient().startSubmission(job.getPersistenceId());
     assertTrue(submission.getStatus().isRunning());
 
     // Wait until the job finish
     do {
       Thread.sleep(5000);
-      submission = submissionRequest.read(getServerUrl(), "" + job.getPersistenceId()).getSubmission();
+      submission = getClient().getSubmissionStatus(job.getPersistenceId());
     } while(submission.getStatus().isRunning());
 
     // Assert correct output