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/01/23 02:36:19 UTC

git commit: SQOOP-643: Implement simple listings for connector and job objects rek

Updated Branches:
  refs/heads/sqoop2 5be8eb680 -> 03408d573


SQOOP-643: Implement simple listings for connector and job objects rek

(Jarcec Cecho via Cheolsoo Park)


Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/03408d57
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/03408d57
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/03408d57

Branch: refs/heads/sqoop2
Commit: 03408d573e7edcc605e06ce2d253cb01f486ef21
Parents: 5be8eb6
Author: Cheolsoo Park <ch...@apache.org>
Authored: Tue Jan 22 16:50:39 2013 -0800
Committer: Cheolsoo Park <ch...@apache.org>
Committed: Tue Jan 22 16:50:39 2013 -0800

----------------------------------------------------------------------
 .../org/apache/sqoop/client/core/Constants.java    |   14 ++
 .../sqoop/client/shell/ShowConnectionFunction.java |   33 +++-
 .../sqoop/client/shell/ShowConnectorFunction.java  |   36 +++-
 .../apache/sqoop/client/shell/ShowJobFunction.java |   36 +++-
 .../apache/sqoop/client/utils/TableDisplayer.java  |  141 +++++++++++++++
 .../src/main/resources/client-resource.properties  |    8 +
 6 files changed, 247 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/03408d57/client/src/main/java/org/apache/sqoop/client/core/Constants.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/core/Constants.java b/client/src/main/java/org/apache/sqoop/client/core/Constants.java
index 8ede029..c364aa8 100644
--- a/client/src/main/java/org/apache/sqoop/client/core/Constants.java
+++ b/client/src/main/java/org/apache/sqoop/client/core/Constants.java
@@ -300,6 +300,20 @@ public class Constants {
       "update.job";
   public static final String RES_UPDATE_JOB_SUCCESSFUL =
       "update.job_successful";
+
+  public static final String RES_TABLE_HEADER_ID =
+      "table.header.id";
+  public static final String RES_TABLE_HEADER_NAME =
+      "table.header.name";
+  public static final String RES_TABLE_HEADER_VERSION =
+      "table.header.version";
+  public static final String RES_TABLE_HEADER_CLASS =
+      "table.header.class";
+  public static final String RES_TABLE_HEADER_TYPE =
+      "table.header.type";
+  public static final String RES_TABLE_HEADER_CONNECTOR =
+      "table.header.connector";
+
   private Constants() {
     // Instantiation is prohibited
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/03408d57/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
index 8066789..af325d5 100644
--- a/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
+++ b/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectionFunction.java
@@ -20,6 +20,7 @@ package org.apache.sqoop.client.shell;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.client.utils.TableDisplayer;
 import org.apache.sqoop.json.ConnectionBean;
 import org.apache.sqoop.model.MConnection;
 import org.codehaus.groovy.tools.shell.IO;
@@ -27,6 +28,7 @@ import org.codehaus.groovy.tools.shell.IO;
 import java.io.PrintWriter;
 import java.text.DateFormat;
 import java.text.MessageFormat;
+import java.util.LinkedList;
 import java.util.List;
 
 import static org.apache.sqoop.client.utils.FormDisplayer.*;
@@ -63,23 +65,40 @@ public class ShowConnectionFunction extends SqoopFunction {
   }
 
   public Object execute(List<String> args) {
-    if (args.size() == 1) {
-      printHelp(io.out);
-      io.out.println();
-      return null;
-    }
-
     CommandLine line = parseOptions(this, 1, args);
     if (line.hasOption(Constants.OPT_ALL)) {
       showConnection(null);
-
     } else if (line.hasOption(Constants.OPT_XID)) {
       showConnection(line.getOptionValue(Constants.OPT_XID));
+    } else {
+      showSummary();
     }
 
     return null;
   }
 
+  private void showSummary() {
+    ConnectionBean connectionBean = readConnection(null);
+    List<MConnection> connections = connectionBean.getConnections();
+
+    List<String> header = new LinkedList<String>();
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_ID));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_NAME));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_CONNECTOR));
+
+    List<String> ids = new LinkedList<String>();
+    List<String> names = new LinkedList<String>();
+    List<String> connectors = new LinkedList<String>();
+
+    for(MConnection connection : connections) {
+      ids.add(String.valueOf(connection.getPersistenceId()));
+      names.add(connection.getName());
+      connectors.add(String.valueOf(connection.getConnectorId()));
+    }
+
+    TableDisplayer.display(io, header, ids, names, connectors);
+  }
+
   private void showConnection(String xid) {
     ConnectionBean connectionBean = readConnection(xid);
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/03408d57/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectorFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectorFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectorFunction.java
index 6276b3e..c2464d2 100644
--- a/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectorFunction.java
+++ b/client/src/main/java/org/apache/sqoop/client/shell/ShowConnectorFunction.java
@@ -19,6 +19,7 @@ package org.apache.sqoop.client.shell;
 
 import java.io.PrintWriter;
 import java.text.MessageFormat;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
@@ -27,6 +28,7 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.client.utils.TableDisplayer;
 import org.apache.sqoop.json.ConnectorBean;
 import org.apache.sqoop.model.MConnector;
 import org.codehaus.groovy.tools.shell.IO;
@@ -63,23 +65,43 @@ public class ShowConnectorFunction extends SqoopFunction
   }
 
   public Object execute(List<String> args) {
-    if (args.size() == 1) {
-      printHelp(io.out);
-      io.out.println();
-      return null;
-    }
-
     CommandLine line = parseOptions(this, 1, args);
     if (line.hasOption(Constants.OPT_ALL)) {
       showConnector(null);
-
     } else if (line.hasOption(Constants.OPT_CID)) {
       showConnector(line.getOptionValue(Constants.OPT_CID));
+    } else {
+      showSummary();
     }
 
     return null;
   }
 
+  private void showSummary() {
+    ConnectorBean connectorBean = readConnector(null);
+    List<MConnector> connectors = connectorBean.getConnectors();
+
+    List<String> header = new LinkedList<String>();
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_ID));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_NAME));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_VERSION));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_CLASS));
+
+    List<String> ids = new LinkedList<String>();
+    List<String> uniqueNames = new LinkedList<String>();
+    List<String> versions = new LinkedList<String>();
+    List<String> classes = new LinkedList<String>();
+
+    for(MConnector connector : connectors) {
+      ids.add(String.valueOf(connector.getPersistenceId()));
+      uniqueNames.add(connector.getUniqueName());
+      versions.add(connector.getVersion());
+      classes.add(connector.getClassName());
+    }
+
+    TableDisplayer.display(io, header, ids, uniqueNames, versions, classes);
+  }
+
   private void showConnector(String cid) {
     ConnectorBean connectorBean = readConnector(cid);
     List<MConnector> connectors = connectorBean.getConnectors();

http://git-wip-us.apache.org/repos/asf/sqoop/blob/03408d57/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java b/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
index 851ddca..0d67133 100644
--- a/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
+++ b/client/src/main/java/org/apache/sqoop/client/shell/ShowJobFunction.java
@@ -20,6 +20,7 @@ package org.apache.sqoop.client.shell;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.OptionBuilder;
 import org.apache.sqoop.client.core.Constants;
+import org.apache.sqoop.client.utils.TableDisplayer;
 import org.apache.sqoop.json.JobBean;
 import org.apache.sqoop.model.MJob;
 import org.codehaus.groovy.tools.shell.IO;
@@ -27,6 +28,7 @@ import org.codehaus.groovy.tools.shell.IO;
 import java.io.PrintWriter;
 import java.text.DateFormat;
 import java.text.MessageFormat;
+import java.util.LinkedList;
 import java.util.List;
 
 import static org.apache.sqoop.client.utils.FormDisplayer.*;
@@ -61,23 +63,43 @@ public class ShowJobFunction extends SqoopFunction {
   }
 
   public Object execute(List<String> args) {
-    if (args.size() == 1) {
-      printHelp(io.out);
-      io.out.println();
-      return null;
-    }
-
     CommandLine line = parseOptions(this, 1, args);
     if (line.hasOption(Constants.OPT_ALL)) {
       showJob(null);
-
     } else if (line.hasOption(Constants.OPT_JID)) {
       showJob(line.getOptionValue(Constants.OPT_JID));
+    } else {
+      showSummary();
     }
 
     return null;
   }
 
+  private void showSummary() {
+    JobBean jobBean = readJob(null);
+    List<MJob> jobs = jobBean.getJobs();
+
+    List<String> header = new LinkedList<String>();
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_ID));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_NAME));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_TYPE));
+    header.add(getResource().getString(Constants.RES_TABLE_HEADER_CONNECTOR));
+
+    List<String> ids = new LinkedList<String>();
+    List<String> names = new LinkedList<String>();
+    List<String> types = new LinkedList<String>();
+    List<String> connectors = new LinkedList<String>();
+
+    for(MJob job : jobs) {
+      ids.add(String.valueOf(job.getPersistenceId()));
+      names.add(job.getName());
+      types.add(job.getType().toString());
+      connectors.add(String.valueOf(job.getConnectorId()));
+    }
+
+    TableDisplayer.display(io, header, ids, names, types, connectors);
+  }
+
   private void showJob(String jid) {
     JobBean jobBean = readJob(jid);
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/03408d57/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
new file mode 100644
index 0000000..63d2ef4
--- /dev/null
+++ b/client/src/main/java/org/apache/sqoop/client/utils/TableDisplayer.java
@@ -0,0 +1,141 @@
+/**
+ * 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.utils;
+
+import org.apache.commons.lang.StringUtils;
+import org.codehaus.groovy.tools.shell.IO;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Display table based data
+ */
+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;
+    assert headers != null;
+    assert columns != null;
+    assert headers.size() == columns.length;
+
+    // Count of columns
+    int columnCount = headers.size();
+
+    // List of all maximal widths of each column
+    List<Integer> widths = new LinkedList<Integer>();
+    for(int i = 0; i < columnCount; i++) {
+      widths.add(getMaximalWidth(headers.get(i), columns[i]));
+    }
+
+    // First line is border
+    drawLine(io, widths);
+
+    // Print out header (text is centralised)
+    io.out.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) ? " |" : " | ");
+    }
+    io.out.println();
+
+    // End up header by border
+    drawLine(io, 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("| ");
+      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) ? " |" : " | ");
+      }
+      io.out.println();
+    }
+
+    // End table by final border
+    drawLine(io, 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) {
+    int last = widths.size() - 1;
+    io.out.print("+-");
+    for(int i = 0; i < widths.size(); i++) {
+      io.out.print(StringUtils.repeat("-", widths.get(i)));
+      io.out.print((i == last) ? "-+" : "-+-");
+    }
+    io.out.println();
+  }
+
+  /**
+   * Get maximal width for given column with it's associated header.
+   *
+   * @param header Associated header
+   * @param column All column values
+   * @return Maximal
+   */
+  private static int getMaximalWidth(String header, List<String> column) {
+    int max = header.length();
+
+    for(String value : column) {
+      if(value.length() > max) {
+        max = value.length();
+      }
+    }
+
+    return max;
+  }
+
+  /**
+   * Get maximal number of rows available in the column list
+   *
+   * @param columns Array with all column values
+   * @return
+   */
+  private static int getMaximalRows(List<String>... columns) {
+    int max = 0;
+
+    for(List<String> column : columns) {
+      if(column.size() > max) {
+        max = column.size();
+      }
+    }
+
+    return max;
+  }
+
+  private TableDisplayer() {
+    // Instantiation is prohibited
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/03408d57/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 8d69463..b5f57c9 100644
--- a/client/src/main/resources/client-resource.properties
+++ b/client/src/main/resources/client-resource.properties
@@ -161,3 +161,11 @@ sqoop.prompt_shell_loadrc = Loading resource file {0}
 sqoop.prompt_shell_loadedrc = Resource file loaded.
 
 submission.usage = Usage: submission {0}
+
+# Various Table headers
+table.header.id = Id
+table.header.name = Name
+table.header.version = Version
+table.header.class = Class
+table.header.type = Type
+table.header.connector = Connector