You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ec...@apache.org on 2013/04/29 19:47:08 UTC

svn commit: r1477230 - in /accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell: Shell.java commands/HistoryCommand.java

Author: ecn
Date: Mon Apr 29 17:47:08 2013
New Revision: 1477230

URL: http://svn.apache.org/r1477230
Log:
ACCUMULO-1193 applying patch from Tim Reardon to paginate history

Modified:
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
    accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/HistoryCommand.java

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java?rev=1477230&r1=1477229&r2=1477230&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java Mon Apr 29 17:47:08 2013
@@ -162,6 +162,8 @@ public class Shell extends ShellOptions 
   
   public static final String CHARSET = "ISO-8859-1";
   public static final int NO_FIXED_ARG_LENGTH_CHECK = -1;
+  public static final String HISTORY_DIR_NAME = ".accumulo";
+  public static final String HISTORY_FILE_NAME = "shell_history.txt";
   private static final String SHELL_DESCRIPTION = "Shell - Apache Accumulo Interactive Shell";
   private static final String DEFAULT_AUTH_TIMEOUT = "60"; // in minutes
   
@@ -426,8 +428,8 @@ public class Shell extends ShellOptions 
     String home = System.getProperty("HOME");
     if (home == null)
       home = System.getenv("HOME");
-    String configDir = home + "/.accumulo";
-    String historyPath = configDir + "/shell_history.txt";
+    String configDir = home + "/" + HISTORY_DIR_NAME;
+    String historyPath = configDir + "/" + HISTORY_FILE_NAME;
     File accumuloDir = new File(configDir);
     if (!accumuloDir.exists() && !accumuloDir.mkdirs())
       log.warn("Unable to make directory for history at " + accumuloDir);
@@ -518,7 +520,6 @@ public class Shell extends ShellOptions 
     return connector.whoami() + "@" + connector.getInstance().getInstanceName() + (getTableName().isEmpty() ? "" : " ") + getTableName() + "> ";
   }
   
-  @SuppressWarnings("deprecation")
   public void execCommand(String input, boolean ignoreAuthTimeout, boolean echoPrompt) throws IOException {
     audit.log(AuditLevel.AUDIT, getDefaultPrompt() + input);
     if (echoPrompt) {

Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/HistoryCommand.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/HistoryCommand.java?rev=1477230&r1=1477229&r2=1477230&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/HistoryCommand.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/util/shell/commands/HistoryCommand.java Mon Apr 29 17:47:08 2013
@@ -16,68 +16,61 @@
  */
 package org.apache.accumulo.core.util.shell.commands;
 
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.util.Iterator;
 
 import org.apache.accumulo.core.util.shell.Shell;
 import org.apache.accumulo.core.util.shell.Shell.Command;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
+import org.apache.commons.collections.iterators.AbstractIteratorDecorator;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.LineIterator;
 
 public class HistoryCommand extends Command {
-  
   private Option clearHist;
+  private Option disablePaginationOpt;
   
+  @SuppressWarnings("unchecked")
   @Override
-  public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws Exception {
-    
+  public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws IOException {
     String home = System.getProperty("HOME");
     if (home == null)
       home = System.getenv("HOME");
-    final String histDir = home + "/.accumulo";
-    int counter = 0;
+    final String historyPath = home + "/" + Shell.HISTORY_DIR_NAME + "/" + Shell.HISTORY_FILE_NAME;
     
     if (cl.hasOption(clearHist.getOpt())) {
-      
+      final FileOutputStream out = new FileOutputStream(historyPath);
+      out.close();
+    } else {
+      final LineIterator it = FileUtils.lineIterator(new File(historyPath));
       try {
-        
-        final FileWriter outFile = new FileWriter(histDir + "/shell_history.txt");
-        final PrintWriter out = new PrintWriter(outFile);
-        out.close();
-        
-      } catch (IOException e) {
-        
-        e.printStackTrace();
+        shellState.printLines(new HistoryLineIterator(it), !cl.hasOption(disablePaginationOpt.getOpt()));
+      } finally {
+        it.close();
       }
     }
     
-    else {
-      try {
-        final BufferedReader in = new BufferedReader(new FileReader(histDir + "/shell_history.txt"));
-        String Line;
-        try {
-          Line = in.readLine();
-          while (Line != null) {
-            shellState.getReader().printString(counter + " " + Line + "\n");
-            counter++;
-            Line = in.readLine();
-          }
-        } catch (IOException e) {
-          
-          e.printStackTrace();
-        }
-      } catch (FileNotFoundException e) {
-        
-        e.printStackTrace();
-      }
+    return 0;
+  }
+  
+  /**
+   * Decorator that prepends a running counter to an Iterator<String>.
+   */
+  private static class HistoryLineIterator extends AbstractIteratorDecorator {
+    int counter = 0;
+    
+    public HistoryLineIterator(Iterator<String> iterator) {
+      super(iterator);
     }
     
-    return 0;
+    @Override
+    public Object next() {
+      return counter++ + " " + super.next();
+    }
   }
   
   @Override
@@ -93,12 +86,10 @@ public class HistoryCommand extends Comm
   @Override
   public Options getOptions() {
     final Options o = new Options();
-    
     clearHist = new Option("c", "clear", false, "clear history file");
-    clearHist.setRequired(false);
-    
     o.addOption(clearHist);
-    
+    disablePaginationOpt = new Option("np", "no-pagination", false, "disable pagination of output");
+    o.addOption(disablePaginationOpt);
     return o;
   }
 }