You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2014/04/08 05:03:37 UTC
[41/53] [abbrv] ACCUMULO-1879 Move shell into new package and module
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
deleted file mode 100644
index 3d8a5a7..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetIterCommand.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import jline.console.ConsoleReader;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.IteratorSetting;
-import org.apache.accumulo.core.client.NamespaceNotFoundException;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.data.Key;
-import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
-import org.apache.accumulo.core.iterators.OptionDescriber;
-import org.apache.accumulo.core.iterators.OptionDescriber.IteratorOptions;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
-import org.apache.accumulo.core.iterators.user.AgeOffFilter;
-import org.apache.accumulo.core.iterators.user.RegExFilter;
-import org.apache.accumulo.core.iterators.user.ReqVisFilter;
-import org.apache.accumulo.core.iterators.user.VersioningIterator;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.accumulo.core.util.shell.ShellCommandException;
-import org.apache.accumulo.core.util.shell.ShellCommandException.ErrorCode;
-import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader;
-import org.apache.accumulo.start.classloader.vfs.ContextManager;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.Options;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.vfs2.FileSystemException;
-
-public class SetIterCommand extends Command {
-
- private Option allScopeOpt, mincScopeOpt, majcScopeOpt, scanScopeOpt, nameOpt, priorityOpt;
- private Option aggTypeOpt, ageoffTypeOpt, regexTypeOpt, versionTypeOpt, reqvisTypeOpt, classnameTypeOpt;
-
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException,
- TableNotFoundException, IOException, ShellCommandException {
-
- boolean tables = cl.hasOption(OptUtil.tableOpt().getOpt()) || !shellState.getTableName().isEmpty();
- boolean namespaces = cl.hasOption(OptUtil.namespaceOpt().getOpt());
-
- final int priority = Integer.parseInt(cl.getOptionValue(priorityOpt.getOpt()));
-
- final Map<String,String> options = new HashMap<String,String>();
- String classname = cl.getOptionValue(classnameTypeOpt.getOpt());
- if (cl.hasOption(aggTypeOpt.getOpt())) {
- Shell.log.warn("aggregators are deprecated");
- @SuppressWarnings("deprecation")
- String deprecatedClassName = org.apache.accumulo.core.iterators.AggregatingIterator.class.getName();
- classname = deprecatedClassName;
- } else if (cl.hasOption(regexTypeOpt.getOpt())) {
- classname = RegExFilter.class.getName();
- } else if (cl.hasOption(ageoffTypeOpt.getOpt())) {
- classname = AgeOffFilter.class.getName();
- } else if (cl.hasOption(versionTypeOpt.getOpt())) {
- classname = VersioningIterator.class.getName();
- } else if (cl.hasOption(reqvisTypeOpt.getOpt())) {
- classname = ReqVisFilter.class.getName();
- }
-
- ClassLoader classloader = getClassLoader(cl, shellState);
-
- // Get the iterator options, with potentially a name provided by the OptionDescriber impl or through user input
- String configuredName = setUpOptions(classloader, shellState.getReader(), classname, options);
-
- // Try to get the name provided by the setiter command
- String name = cl.getOptionValue(nameOpt.getOpt(), null);
-
- // Cannot continue if no name is provided
- if (null == name && null == configuredName) {
- throw new IllegalArgumentException("No provided or default name for iterator");
- } else if (null == name) {
- // Fall back to the name from OptionDescriber or user input if none is provided on setiter option
- name = configuredName;
- }
-
- if (namespaces) {
- try {
- setNamespaceProperties(cl, shellState, priority, options, classname, name);
- } catch (NamespaceNotFoundException e) {
- throw new IllegalArgumentException(e);
- }
- } else if (tables) {
- setTableProperties(cl, shellState, priority, options, classname, name);
- } else {
- throw new IllegalArgumentException("No table or namespace specified");
- }
- return 0;
- }
-
- private ClassLoader getClassLoader(final CommandLine cl, final Shell shellState) throws AccumuloException, TableNotFoundException, AccumuloSecurityException,
- IOException, FileSystemException {
-
- boolean tables = cl.hasOption(OptUtil.tableOpt().getOpt()) || !shellState.getTableName().isEmpty();
- boolean namespaces = cl.hasOption(OptUtil.namespaceOpt().getOpt());
-
- String classpath = null;
- Iterable<Entry<String,String>> tableProps;
-
- if (namespaces) {
- try {
- tableProps = shellState.getConnector().namespaceOperations().getProperties(OptUtil.getNamespaceOpt(cl, shellState));
- } catch (NamespaceNotFoundException e) {
- throw new IllegalArgumentException(e);
- }
- } else if (tables) {
- tableProps = shellState.getConnector().tableOperations().getProperties(OptUtil.getTableOpt(cl, shellState));
- } else {
- throw new IllegalArgumentException("No table or namespace specified");
- }
- for (Entry<String,String> entry : tableProps) {
- if (entry.getKey().equals(Property.TABLE_CLASSPATH.getKey())) {
- classpath = entry.getValue();
- }
- }
-
- ClassLoader classloader;
-
- if (classpath != null && !classpath.equals("")) {
- shellState.getConnector().instanceOperations().getSystemConfiguration().get(Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey() + classpath);
-
- try {
- AccumuloVFSClassLoader.getContextManager().setContextConfig(new ContextManager.DefaultContextsConfig(new Iterable<Map.Entry<String,String>>() {
- @Override
- public Iterator<Entry<String,String>> iterator() {
- try {
- return shellState.getConnector().instanceOperations().getSystemConfiguration().entrySet().iterator();
- } catch (AccumuloException e) {
- throw new RuntimeException(e);
- } catch (AccumuloSecurityException e) {
- throw new RuntimeException(e);
- }
- }
- }));
- } catch (IllegalStateException ise) {}
-
- classloader = AccumuloVFSClassLoader.getContextManager().getClassLoader(classpath);
- } else {
- classloader = AccumuloVFSClassLoader.getClassLoader();
- }
- return classloader;
- }
-
- protected void setTableProperties(final CommandLine cl, final Shell shellState, final int priority, final Map<String,String> options, final String classname,
- final String name) throws AccumuloException, AccumuloSecurityException, ShellCommandException, TableNotFoundException {
- // remove empty values
-
- final String tableName = OptUtil.getTableOpt(cl, shellState);
-
- if (!shellState.getConnector().tableOperations().testClassLoad(tableName, classname, SortedKeyValueIterator.class.getName())) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Servers are unable to load " + classname + " as type "
- + SortedKeyValueIterator.class.getName());
- }
-
- final String aggregatorClass = options.get("aggregatorClass");
- @SuppressWarnings("deprecation")
- String deprecatedAggregatorClassName = org.apache.accumulo.core.iterators.aggregation.Aggregator.class.getName();
- if (aggregatorClass != null && !shellState.getConnector().tableOperations().testClassLoad(tableName, aggregatorClass, deprecatedAggregatorClassName)) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Servers are unable to load " + aggregatorClass + " as type "
- + deprecatedAggregatorClassName);
- }
-
- for (Iterator<Entry<String,String>> i = options.entrySet().iterator(); i.hasNext();) {
- final Entry<String,String> entry = i.next();
- if (entry.getValue() == null || entry.getValue().isEmpty()) {
- i.remove();
- }
- }
- final EnumSet<IteratorScope> scopes = EnumSet.noneOf(IteratorScope.class);
- if (cl.hasOption(allScopeOpt.getOpt()) || cl.hasOption(mincScopeOpt.getOpt())) {
- scopes.add(IteratorScope.minc);
- }
- if (cl.hasOption(allScopeOpt.getOpt()) || cl.hasOption(majcScopeOpt.getOpt())) {
- scopes.add(IteratorScope.majc);
- }
- if (cl.hasOption(allScopeOpt.getOpt()) || cl.hasOption(scanScopeOpt.getOpt())) {
- scopes.add(IteratorScope.scan);
- }
- if (scopes.isEmpty()) {
- throw new IllegalArgumentException("You must select at least one scope to configure");
- }
- final IteratorSetting setting = new IteratorSetting(priority, name, classname, options);
- shellState.getConnector().tableOperations().attachIterator(tableName, setting, scopes);
- }
-
- protected void setNamespaceProperties(final CommandLine cl, final Shell shellState, final int priority, final Map<String,String> options,
- final String classname, final String name) throws AccumuloException, AccumuloSecurityException, ShellCommandException, NamespaceNotFoundException {
- // remove empty values
-
- final String namespace = OptUtil.getNamespaceOpt(cl, shellState);
-
- if (!shellState.getConnector().namespaceOperations().testClassLoad(namespace, classname, SortedKeyValueIterator.class.getName())) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Servers are unable to load " + classname + " as type "
- + SortedKeyValueIterator.class.getName());
- }
-
- final String aggregatorClass = options.get("aggregatorClass");
- @SuppressWarnings("deprecation")
- String deprecatedAggregatorClassName = org.apache.accumulo.core.iterators.aggregation.Aggregator.class.getName();
- if (aggregatorClass != null && !shellState.getConnector().namespaceOperations().testClassLoad(namespace, aggregatorClass, deprecatedAggregatorClassName)) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Servers are unable to load " + aggregatorClass + " as type "
- + deprecatedAggregatorClassName);
- }
-
- for (Iterator<Entry<String,String>> i = options.entrySet().iterator(); i.hasNext();) {
- final Entry<String,String> entry = i.next();
- if (entry.getValue() == null || entry.getValue().isEmpty()) {
- i.remove();
- }
- }
- final EnumSet<IteratorScope> scopes = EnumSet.noneOf(IteratorScope.class);
- if (cl.hasOption(allScopeOpt.getOpt()) || cl.hasOption(mincScopeOpt.getOpt())) {
- scopes.add(IteratorScope.minc);
- }
- if (cl.hasOption(allScopeOpt.getOpt()) || cl.hasOption(majcScopeOpt.getOpt())) {
- scopes.add(IteratorScope.majc);
- }
- if (cl.hasOption(allScopeOpt.getOpt()) || cl.hasOption(scanScopeOpt.getOpt())) {
- scopes.add(IteratorScope.scan);
- }
- if (scopes.isEmpty()) {
- throw new IllegalArgumentException("You must select at least one scope to configure");
- }
- final IteratorSetting setting = new IteratorSetting(priority, name, classname, options);
- shellState.getConnector().namespaceOperations().attachIterator(namespace, setting, scopes);
- }
-
- private static String setUpOptions(ClassLoader classloader, final ConsoleReader reader, final String className, final Map<String,String> options)
- throws IOException, ShellCommandException {
- String input;
- @SuppressWarnings("rawtypes")
- SortedKeyValueIterator untypedInstance;
- @SuppressWarnings("rawtypes")
- Class<? extends SortedKeyValueIterator> clazz;
- try {
- clazz = classloader.loadClass(className).asSubclass(SortedKeyValueIterator.class);
- untypedInstance = clazz.newInstance();
- } catch (ClassNotFoundException e) {
- StringBuilder msg = new StringBuilder("Unable to load ").append(className);
- if (className.indexOf('.') < 0) {
- msg.append("; did you use a fully qualified package name?");
- } else {
- msg.append("; class not found.");
- }
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, msg.toString());
- } catch (InstantiationException e) {
- throw new IllegalArgumentException(e.getMessage());
- } catch (IllegalAccessException e) {
- throw new IllegalArgumentException(e.getMessage());
- } catch (ClassCastException e) {
- StringBuilder msg = new StringBuilder(50);
- msg.append(className).append(" loaded successfully but does not implement SortedKeyValueIterator.");
- msg.append(" This class cannot be used with this command.");
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, msg.toString());
- }
-
- @SuppressWarnings("unchecked")
- SortedKeyValueIterator<Key,Value> skvi = (SortedKeyValueIterator<Key,Value>) untypedInstance;
- OptionDescriber iterOptions = null;
- if (OptionDescriber.class.isAssignableFrom(skvi.getClass())) {
- iterOptions = (OptionDescriber) skvi;
- }
-
- String iteratorName;
- if (null != iterOptions) {
- final IteratorOptions itopts = iterOptions.describeOptions();
- iteratorName = itopts.getName();
-
- if (iteratorName == null) {
- throw new IllegalArgumentException(className + " described its default distinguishing name as null");
- }
- String shortClassName = className;
- if (className.contains(".")) {
- shortClassName = className.substring(className.lastIndexOf('.') + 1);
- }
- final Map<String,String> localOptions = new HashMap<String,String>();
- do {
- // clean up the overall options that caused things to fail
- for (String key : localOptions.keySet()) {
- options.remove(key);
- }
- localOptions.clear();
-
- reader.println(itopts.getDescription());
-
- String prompt;
- if (itopts.getNamedOptions() != null) {
- for (Entry<String,String> e : itopts.getNamedOptions().entrySet()) {
- prompt = Shell.repeat("-", 10) + "> set " + shortClassName + " parameter " + e.getKey() + ", " + e.getValue() + ": ";
- reader.flush();
- input = reader.readLine(prompt);
- if (input == null) {
- reader.println();
- throw new IOException("Input stream closed");
- }
- // Places all Parameters and Values into the LocalOptions, even if the value is "".
- // This allows us to check for "" values when setting the iterators and allows us to remove
- // the parameter and value from the table property.
- localOptions.put(e.getKey(), input);
- }
- }
-
- if (itopts.getUnnamedOptionDescriptions() != null) {
- for (String desc : itopts.getUnnamedOptionDescriptions()) {
- reader.println(Shell.repeat("-", 10) + "> entering options: " + desc);
- input = "start";
- prompt = Shell.repeat("-", 10) + "> set " + shortClassName + " option (<name> <value>, hit enter to skip): ";
- while (true) {
- reader.flush();
- input = reader.readLine(prompt);
- if (input == null) {
- reader.println();
- throw new IOException("Input stream closed");
- } else {
- input = new String(input);
- }
-
- if (input.length() == 0)
- break;
-
- String[] sa = input.split(" ", 2);
- localOptions.put(sa[0], sa[1]);
- }
- }
- }
-
- options.putAll(localOptions);
- if (!iterOptions.validateOptions(options))
- reader.println("invalid options for " + clazz.getName());
-
- } while (!iterOptions.validateOptions(options));
- } else {
- reader.flush();
- reader.println("The iterator class does not implement OptionDescriber. Consider this for better iterator configuration using this setiter command.");
- iteratorName = reader.readLine("Name for iterator (enter to skip): ");
- if (null == iteratorName) {
- reader.println();
- throw new IOException("Input stream closed");
- } else if (StringUtils.isWhitespace(iteratorName)) {
- // Treat whitespace or empty string as no name provided
- iteratorName = null;
- }
-
- reader.flush();
- reader.println("Optional, configure name-value options for iterator:");
- String prompt = Shell.repeat("-", 10) + "> set option (<name> <value>, hit enter to skip): ";
- final HashMap<String,String> localOptions = new HashMap<String,String>();
-
- while (true) {
- reader.flush();
- input = reader.readLine(prompt);
- if (input == null) {
- reader.println();
- throw new IOException("Input stream closed");
- } else if (StringUtils.isWhitespace(input)) {
- break;
- }
-
- String[] sa = input.split(" ", 2);
- localOptions.put(sa[0], sa[1]);
- }
-
- options.putAll(localOptions);
- }
-
- return iteratorName;
- }
-
- @Override
- public String description() {
- return "sets a table-specific or namespace-specific iterator";
- }
-
- @Override
- public Options getOptions() {
- final Options o = new Options();
-
- priorityOpt = new Option("p", "priority", true, "the order in which the iterator is applied");
- priorityOpt.setArgName("pri");
- priorityOpt.setRequired(true);
-
- nameOpt = new Option("n", "name", true, "iterator to set");
- nameOpt.setArgName("itername");
-
- allScopeOpt = new Option("all", "all-scopes", false, "applied at scan time, minor and major compactions");
- mincScopeOpt = new Option(IteratorScope.minc.name(), "minor-compaction", false, "applied at minor compaction");
- majcScopeOpt = new Option(IteratorScope.majc.name(), "major-compaction", false, "applied at major compaction");
- scanScopeOpt = new Option(IteratorScope.scan.name(), "scan-time", false, "applied at scan time");
-
- final OptionGroup typeGroup = new OptionGroup();
- classnameTypeOpt = new Option("class", "class-name", true, "a java class that implements SortedKeyValueIterator");
- classnameTypeOpt.setArgName("name");
- aggTypeOpt = new Option("agg", "aggregator", false, "an aggregating type");
- regexTypeOpt = new Option("regex", "regular-expression", false, "a regex matching iterator");
- versionTypeOpt = new Option("vers", "version", false, "a versioning iterator");
- reqvisTypeOpt = new Option("reqvis", "require-visibility", false, "an iterator that omits entries with empty visibilities");
- ageoffTypeOpt = new Option("ageoff", "ageoff", false, "an aging off iterator");
-
- typeGroup.addOption(classnameTypeOpt);
- typeGroup.addOption(aggTypeOpt);
- typeGroup.addOption(regexTypeOpt);
- typeGroup.addOption(versionTypeOpt);
- typeGroup.addOption(reqvisTypeOpt);
- typeGroup.addOption(ageoffTypeOpt);
- typeGroup.setRequired(true);
-
- final OptionGroup tableGroup = new OptionGroup();
- tableGroup.addOption(OptUtil.tableOpt("table to configure iterators on"));
- tableGroup.addOption(OptUtil.namespaceOpt("namespace to configure iterators on"));
-
- o.addOption(priorityOpt);
- o.addOption(nameOpt);
- o.addOption(allScopeOpt);
- o.addOption(mincScopeOpt);
- o.addOption(majcScopeOpt);
- o.addOption(scanScopeOpt);
- o.addOptionGroup(typeGroup);
- o.addOptionGroup(tableGroup);
- return o;
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
deleted file mode 100644
index 513975c..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetScanIterCommand.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.IteratorSetting;
-import org.apache.accumulo.core.client.Scanner;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
-import org.apache.accumulo.core.security.Authorizations;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.ShellCommandException;
-import org.apache.accumulo.core.util.shell.ShellCommandException.ErrorCode;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.Options;
-
-public class SetScanIterCommand extends SetIterCommand {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException, TableNotFoundException,
- IOException, ShellCommandException {
- Shell.log.warn("Deprecated, use " + new SetShellIterCommand().getName());
- return super.execute(fullCommand, cl, shellState);
- }
-
- @Override
- protected void setTableProperties(final CommandLine cl, final Shell shellState, final int priority, final Map<String,String> options, final String classname,
- final String name) throws AccumuloException, AccumuloSecurityException, ShellCommandException, TableNotFoundException {
-
- final String tableName = OptUtil.getTableOpt(cl, shellState);
-
- // instead of setting table properties, just put the options in a list to use at scan time
- Class<?> loadClass;
- try {
- loadClass = getClass().getClassLoader().loadClass(classname);
- } catch (ClassNotFoundException e) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Unable to load " + classname);
- }
- try {
- loadClass.asSubclass(SortedKeyValueIterator.class);
- } catch (ClassCastException ex) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Unable to load " + classname + " as type "
- + SortedKeyValueIterator.class.getName());
- }
-
- for (Iterator<Entry<String,String>> i = options.entrySet().iterator(); i.hasNext();) {
- final Entry<String,String> entry = i.next();
- if (entry.getValue() == null || entry.getValue().isEmpty()) {
- i.remove();
- }
- }
-
- List<IteratorSetting> tableScanIterators = shellState.scanIteratorOptions.get(tableName);
- if (tableScanIterators == null) {
- tableScanIterators = new ArrayList<IteratorSetting>();
- shellState.scanIteratorOptions.put(tableName, tableScanIterators);
- }
- final IteratorSetting setting = new IteratorSetting(priority, name, classname);
- setting.addOptions(options);
-
- // initialize a scanner to ensure the new setting does not conflict with existing settings
- final String user = shellState.getConnector().whoami();
- final Authorizations auths = shellState.getConnector().securityOperations().getUserAuthorizations(user);
- final Scanner scanner = shellState.getConnector().createScanner(tableName, auths);
- for (IteratorSetting s : tableScanIterators) {
- scanner.addScanIterator(s);
- }
- scanner.addScanIterator(setting);
-
- // if no exception has been thrown, it's safe to add it to the list
- tableScanIterators.add(setting);
- Shell.log.debug("Scan iterators :" + shellState.scanIteratorOptions.get(tableName));
- }
-
- @Override
- public String description() {
- return "sets a table-specific scan iterator for this shell session";
- }
-
- @Override
- public Options getOptions() {
- // Remove the options that specify which type of iterator this is, since
- // they are all scan iterators with this command.
- final HashSet<OptionGroup> groups = new HashSet<OptionGroup>();
- final Options parentOptions = super.getOptions();
- final Options modifiedOptions = new Options();
- for (Iterator<?> it = parentOptions.getOptions().iterator(); it.hasNext();) {
- Option o = (Option) it.next();
- if (!IteratorScope.majc.name().equals(o.getOpt()) && !IteratorScope.minc.name().equals(o.getOpt()) && !IteratorScope.scan.name().equals(o.getOpt())) {
- modifiedOptions.addOption(o);
- OptionGroup group = parentOptions.getOptionGroup(o);
- if (group != null)
- groups.add(group);
- }
- }
- for (OptionGroup group : groups) {
- modifiedOptions.addOptionGroup(group);
- }
- return modifiedOptions;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
deleted file mode 100644
index b95725a..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SetShellIterCommand.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.IteratorSetting;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
-import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.ShellCommandException;
-import org.apache.accumulo.core.util.shell.ShellCommandException.ErrorCode;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.Options;
-
-public class SetShellIterCommand extends SetIterCommand {
- private Option profileOpt;
-
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException,
- TableNotFoundException, IOException, ShellCommandException {
- return super.execute(fullCommand, cl, shellState);
- }
-
- @Override
- protected void setTableProperties(final CommandLine cl, final Shell shellState, final int priority, final Map<String,String> options, final String classname,
- final String name) throws AccumuloException, AccumuloSecurityException, ShellCommandException, TableNotFoundException {
- // instead of setting table properties, just put the options in a list to use at scan time
-
- String profile = cl.getOptionValue(profileOpt.getOpt());
-
- // instead of setting table properties, just put the options in a list to use at scan time
- Class<?> loadClass;
- try {
- loadClass = getClass().getClassLoader().loadClass(classname);
- } catch (ClassNotFoundException e) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "Unable to load " + classname);
- }
- try {
- loadClass.asSubclass(SortedKeyValueIterator.class);
- } catch (ClassCastException ex) {
- throw new ShellCommandException(ErrorCode.INITIALIZATION_FAILURE, "xUnable to load " + classname + " as type "
- + SortedKeyValueIterator.class.getName());
- }
-
- for (Iterator<Entry<String,String>> i = options.entrySet().iterator(); i.hasNext();) {
- final Entry<String,String> entry = i.next();
- if (entry.getValue() == null || entry.getValue().isEmpty()) {
- i.remove();
- }
- }
-
- List<IteratorSetting> tableScanIterators = shellState.iteratorProfiles.get(profile);
- if (tableScanIterators == null) {
- tableScanIterators = new ArrayList<IteratorSetting>();
- shellState.iteratorProfiles.put(profile, tableScanIterators);
- }
- final IteratorSetting setting = new IteratorSetting(priority, name, classname);
- setting.addOptions(options);
-
- Iterator<IteratorSetting> iter = tableScanIterators.iterator();
- while (iter.hasNext()) {
- if (iter.next().getName().equals(name)) {
- iter.remove();
- }
- }
-
- tableScanIterators.add(setting);
- }
-
- @Override
- public String description() {
- return "adds an iterator to a profile for this shell session";
- }
-
- @Override
- public Options getOptions() {
- // Remove the options that specify which type of iterator this is, since
- // they are all scan iterators with this command.
- final HashSet<OptionGroup> groups = new HashSet<OptionGroup>();
- final Options parentOptions = super.getOptions();
- final Options modifiedOptions = new Options();
- for (Iterator<?> it = parentOptions.getOptions().iterator(); it.hasNext();) {
- Option o = (Option) it.next();
- if (!IteratorScope.majc.name().equals(o.getOpt()) && !IteratorScope.minc.name().equals(o.getOpt()) && !IteratorScope.scan.name().equals(o.getOpt())
- && !"table".equals(o.getLongOpt())) {
- modifiedOptions.addOption(o);
- OptionGroup group = parentOptions.getOptionGroup(o);
- if (group != null)
- groups.add(group);
- }
- }
- for (OptionGroup group : groups) {
- modifiedOptions.addOptionGroup(group);
- }
-
- profileOpt = new Option("pn", "profile", true, "iterator profile name");
- profileOpt.setRequired(true);
- profileOpt.setArgName("profile");
-
- modifiedOptions.addOption(profileOpt);
-
- return modifiedOptions;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
deleted file mode 100644
index d4c9739..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ShellPluginConfigurationCommand.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.util.Iterator;
-import java.util.Map.Entry;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.Options;
-import org.apache.log4j.Logger;
-
-public abstract class ShellPluginConfigurationCommand extends Command {
- private Option removePluginOption, pluginClassOption, listPluginOption;
-
- private String pluginType;
-
- private Property tableProp;
-
- private String classOpt;
-
- ShellPluginConfigurationCommand(final String typeName, final Property tableProp, final String classOpt) {
- this.pluginType = typeName;
- this.tableProp = tableProp;
- this.classOpt = classOpt;
- }
-
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws Exception {
- final String tableName = OptUtil.getTableOpt(cl, shellState);
-
- if (cl.hasOption(removePluginOption.getOpt())) {
- // Remove the property
- removePlugin(cl, shellState, tableName);
-
- shellState.getReader().println("Removed "+pluginType+" on " + tableName);
- } else if (cl.hasOption(listPluginOption.getOpt())) {
- // Get the options for this table
- final Iterator<Entry<String,String>> iter = shellState.getConnector().tableOperations().getProperties(tableName).iterator();
-
- while (iter.hasNext()) {
- Entry<String,String> ent = iter.next();
-
- // List all parameters with the property name
- if (ent.getKey().startsWith(tableProp.toString())) {
- shellState.getReader().println(ent.getKey() + ": " + ent.getValue());
- }
- }
- } else {
- // Set the plugin with the provided options
- String className = cl.getOptionValue(pluginClassOption.getOpt());
-
- // Set the plugin property on the table
- setPlugin(cl, shellState, tableName, className);
- }
-
- return 0;
- }
-
- protected void setPlugin(final CommandLine cl, final Shell shellState, final String tableName, final String className) throws AccumuloException, AccumuloSecurityException {
- shellState.getConnector().tableOperations().setProperty(tableName, tableProp.toString(), className);
- }
-
- protected void removePlugin(final CommandLine cl, final Shell shellState, final String tableName) throws AccumuloException, AccumuloSecurityException {
- shellState.getConnector().tableOperations().removeProperty(tableName, tableProp.toString());
- }
-
- public static <T> Class<? extends T> getPluginClass(final String tableName, final Shell shellState, final Class<T> clazz, final Property pluginProp) {
- Iterator<Entry<String,String>> props;
- try {
- props = shellState.getConnector().tableOperations().getProperties(tableName).iterator();
- } catch (AccumuloException e) {
- return null;
- } catch (TableNotFoundException e) {
- return null;
- }
-
- while (props.hasNext()) {
- final Entry<String,String> ent = props.next();
- if (ent.getKey().equals(pluginProp.toString())) {
- Class<? extends T> pluginClazz;
- try {
- pluginClazz = AccumuloVFSClassLoader.loadClass(ent.getValue(), clazz);
- } catch (ClassNotFoundException e) {
- Logger.getLogger(ShellPluginConfigurationCommand.class).warn("Class not found" + e.getMessage());
- return null;
- }
-
- return pluginClazz;
- }
- }
-
- return null;
- }
-
- @Override
- public Options getOptions() {
- final Options o = new Options();
- final OptionGroup actionGroup = new OptionGroup();
-
- pluginClassOption = new Option(classOpt, pluginType, true, "fully qualified name of the " + pluginType + " class to use");
- pluginClassOption.setArgName("className");
-
- // Action to take: apply (default), remove, list
- removePluginOption = new Option("r", "remove", false, "remove the current "+pluginType+"");
- listPluginOption = new Option("l", "list", false, "display the current "+pluginType+"");
-
- actionGroup.addOption(pluginClassOption);
- actionGroup.addOption(removePluginOption);
- actionGroup.addOption(listPluginOption);
- actionGroup.setRequired(true);
-
- o.addOptionGroup(actionGroup);
- o.addOption(OptUtil.tableOpt("table to set the "+pluginType+" on"));
-
- return o;
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SleepCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SleepCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SleepCommand.java
deleted file mode 100644
index ab69456..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SleepCommand.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.commons.cli.CommandLine;
-
-public class SleepCommand extends Command {
-
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws Exception {
- final double secs = Double.parseDouble(cl.getArgs()[0]);
- Thread.sleep((long) (secs * 1000));
- return 0;
- }
-
- @Override
- public String description() {
- return "sleeps for the given number of seconds";
- }
-
- @Override
- public int numArgs() {
- return 1;
- }
-
- @Override
- public String usage() {
- return getName() + " <seconds>";
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SystemPermissionsCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SystemPermissionsCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SystemPermissionsCommand.java
deleted file mode 100644
index 3dec6fc..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/SystemPermissionsCommand.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-
-import org.apache.accumulo.core.security.SystemPermission;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.commons.cli.CommandLine;
-
-public class SystemPermissionsCommand extends Command {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws IOException {
- for (String p : SystemPermission.printableValues()) {
- shellState.getReader().println(p);
- }
- return 0;
- }
-
- @Override
- public String description() {
- return "displays a list of valid system permissions";
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableCommand.java
deleted file mode 100644
index d77f6fb..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableCommand.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.accumulo.core.util.shell.Token;
-import org.apache.commons.cli.CommandLine;
-
-public class TableCommand extends Command {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
- final String tableName = cl.getArgs()[0];
- if (!shellState.getConnector().tableOperations().exists(tableName)) {
- throw new TableNotFoundException(null, tableName, null);
- }
- shellState.setTableName(tableName);
- return 0;
- }
-
- @Override
- public String description() {
- return "switches to the specified table";
- }
-
- @Override
- public void registerCompletion(final Token root, final Map<Command.CompletionSet,Set<String>> special) {
- registerCompletionForTables(root, special);
- }
-
- @Override
- public String usage() {
- return getName() + " <tableName>";
- }
-
- @Override
- public int numArgs() {
- return 1;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableOperation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableOperation.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableOperation.java
deleted file mode 100644
index 27946b8..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TableOperation.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import org.apache.accumulo.core.client.Instance;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.client.impl.Namespaces;
-import org.apache.accumulo.core.client.impl.Tables;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.accumulo.core.util.shell.Token;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.Options;
-
-public abstract class TableOperation extends Command {
-
- protected Option optTablePattern, optTableName, optNamespace;
- private boolean force = true;
- private boolean useCommandLine = true;
-
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws Exception {
- // populate the tableSet set with the tables you want to operate on
- final SortedSet<String> tableSet = new TreeSet<String>();
- if (cl.hasOption(optTablePattern.getOpt())) {
- for (String table : shellState.getConnector().tableOperations().list())
- if (table.matches(cl.getOptionValue(optTablePattern.getOpt()))) {
- tableSet.add(table);
- }
- } else if (cl.hasOption(optTableName.getOpt())) {
- tableSet.add(cl.getOptionValue(optTableName.getOpt()));
- } else if (cl.hasOption(optNamespace.getOpt())) {
- Instance instance = shellState.getInstance();
- String namespaceId = Namespaces.getNamespaceId(instance, cl.getOptionValue(optNamespace.getOpt()));
- for (String tableId : Namespaces.getTableIds(instance, namespaceId)) {
- tableSet.add(Tables.getTableName(instance, tableId));
- }
- } else if (useCommandLine && cl.getArgs().length > 0) {
- for (String tableName : cl.getArgs()) {
- tableSet.add(tableName);
- }
- } else {
- shellState.checkTableState();
- tableSet.add(shellState.getTableName());
- }
-
- if (tableSet.isEmpty())
- Shell.log.warn("No tables found that match your criteria");
-
- boolean more = true;
- // flush the tables
- for (String tableName : tableSet) {
- if (!more) {
- break;
- }
- if (!shellState.getConnector().tableOperations().exists(tableName)) {
- throw new TableNotFoundException(null, tableName, null);
- }
- boolean operate = true;
- if (!force) {
- shellState.getReader().flush();
- String line = shellState.getReader().readLine(getName() + " { " + tableName + " } (yes|no)? ");
- more = line != null;
- operate = line != null && (line.equalsIgnoreCase("y") || line.equalsIgnoreCase("yes"));
- }
- if (operate) {
- doTableOp(shellState, tableName);
- }
- }
-
- return 0;
- }
-
- protected abstract void doTableOp(Shell shellState, String tableName) throws Exception;
-
- @Override
- public String description() {
- return "makes a best effort to flush tables from memory to disk";
- }
-
- @Override
- public Options getOptions() {
- final Options o = new Options();
-
- optTablePattern = new Option("p", "pattern", true, "regex pattern of table names to operate on");
- optTablePattern.setArgName("pattern");
-
- optTableName = new Option(Shell.tableOption, "table", true, "name of a table to operate on");
- optTableName.setArgName("tableName");
-
- optNamespace = new Option(Shell.namespaceOption, "namespace", true, "name of a namespace to operate on");
- optNamespace.setArgName("namespace");
-
- final OptionGroup opg = new OptionGroup();
-
- opg.addOption(optTablePattern);
- opg.addOption(optTableName);
- opg.addOption(optNamespace);
-
- o.addOptionGroup(opg);
-
- return o;
- }
-
- @Override
- public int numArgs() {
- return useCommandLine ? Shell.NO_FIXED_ARG_LENGTH_CHECK : 0;
- }
-
- protected void force() {
- force = true;
- }
-
- protected void noForce() {
- force = false;
- }
-
- protected void disableUnflaggedTableOptions() {
- useCommandLine = false;
- }
-
- @Override
- public String usage() {
- return getName() + " [<table>{ <table>}]";
- }
-
- @Override
- public void registerCompletion(final Token root, final Map<Command.CompletionSet,Set<String>> special) {
- if (useCommandLine)
- registerCompletionForTables(root, special);
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablePermissionsCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablePermissionsCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablePermissionsCommand.java
deleted file mode 100644
index 1f92f21..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablePermissionsCommand.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-
-import org.apache.accumulo.core.security.TablePermission;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.commons.cli.CommandLine;
-
-public class TablePermissionsCommand extends Command {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws IOException {
- for (String p : TablePermission.printableValues()) {
- shellState.getReader().println(p);
- }
- return 0;
- }
-
- @Override
- public String description() {
- return "displays a list of valid table permissions";
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablesCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablesCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablesCommand.java
deleted file mode 100644
index a03a986..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TablesCommand.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.NamespaceNotFoundException;
-import org.apache.accumulo.core.client.impl.Tables;
-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.MapUtils;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Maps;
-
-public class TablesCommand extends Command {
- static final String NAME_AND_ID_FORMAT = "%-20s => %9s%n";
-
- private Option tableIdOption;
- private Option sortByTableIdOption;
- private Option disablePaginationOpt;
-
- @SuppressWarnings("unchecked")
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException, IOException,
- NamespaceNotFoundException {
-
- final String namespace = cl.hasOption(OptUtil.namespaceOpt().getOpt()) ? OptUtil.getNamespaceOpt(cl, shellState) : null;
- Map<String,String> tables = shellState.getConnector().tableOperations().tableIdMap();
-
- // filter only specified namespace
- tables = Maps.filterKeys(tables, new Predicate<String>() {
- @Override
- public boolean apply(String tableName) {
- return namespace == null || Tables.qualify(tableName).getFirst().equals(namespace);
- }
- });
-
- final boolean sortByTableId = cl.hasOption(sortByTableIdOption.getOpt());
- tables = new TreeMap<String,String>((sortByTableId ? MapUtils.invertMap(tables) : tables));
-
- Iterator<String> it = Iterators.transform(tables.entrySet().iterator(), new Function<Entry<String,String>,String>() {
- @Override
- public String apply(Map.Entry<String,String> entry) {
- String tableName = String.valueOf(sortByTableId ? entry.getValue() : entry.getKey());
- String tableId = String.valueOf(sortByTableId ? entry.getKey() : entry.getValue());
- if (namespace != null)
- tableName = Tables.qualify(tableName).getSecond();
- if (cl.hasOption(tableIdOption.getOpt()))
- return String.format(NAME_AND_ID_FORMAT, tableName, tableId);
- else
- return tableName;
- };
- });
-
- shellState.printLines(it, !cl.hasOption(disablePaginationOpt.getOpt()));
- return 0;
- }
-
- @Override
- public String description() {
- return "displays a list of all existing tables";
- }
-
- @Override
- public Options getOptions() {
- final Options o = new Options();
- tableIdOption = new Option("l", "list-ids", false, "display internal table ids along with the table name");
- o.addOption(tableIdOption);
- sortByTableIdOption = new Option("s", "sort-ids", false, "with -l: sort output by table ids");
- o.addOption(sortByTableIdOption);
- disablePaginationOpt = new Option("np", "no-pagination", false, "disable pagination of output");
- o.addOption(disablePaginationOpt);
- o.addOption(OptUtil.namespaceOpt("name of namespace to list only its tables"));
- return o;
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TraceCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TraceCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TraceCommand.java
deleted file mode 100644
index 281a33a..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/TraceCommand.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-import java.util.Map;
-
-import org.apache.accumulo.trace.instrument.Trace;
-import org.apache.accumulo.core.client.Scanner;
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.data.Range;
-import org.apache.accumulo.core.security.Authorizations;
-import org.apache.accumulo.core.trace.TraceDump;
-import org.apache.accumulo.core.trace.TraceDump.Printer;
-import org.apache.accumulo.core.util.BadArgumentException;
-import org.apache.accumulo.core.util.UtilWaitThread;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.commons.cli.CommandLine;
-import org.apache.hadoop.io.Text;
-
-public class TraceCommand extends DebugCommand {
-
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws IOException {
- if (cl.getArgs().length == 1) {
- if (cl.getArgs()[0].equalsIgnoreCase("on")) {
- Trace.on("shell:" + shellState.getPrincipal());
- } else if (cl.getArgs()[0].equalsIgnoreCase("off")) {
- if (Trace.isTracing()) {
- final long trace = Trace.currentTrace().traceId();
- Trace.off();
- StringBuffer sb = new StringBuffer();
- int traceCount = 0;
- for (int i = 0; i < 30; i++) {
- sb = new StringBuffer();
- try {
- final Map<String,String> properties = shellState.getConnector().instanceOperations().getSystemConfiguration();
- final String table = properties.get(Property.TRACE_TABLE.getKey());
- final String user = shellState.getConnector().whoami();
- final Authorizations auths = shellState.getConnector().securityOperations().getUserAuthorizations(user);
- final Scanner scanner = shellState.getConnector().createScanner(table, auths);
- scanner.setRange(new Range(new Text(Long.toHexString(trace))));
- final StringBuffer finalSB = sb;
- traceCount = TraceDump.printTrace(scanner, new Printer() {
- @Override
- public void print(final String line) {
- try {
- finalSB.append(line + "\n");
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
- });
- if (traceCount > 0) {
- shellState.getReader().print(sb.toString());
- break;
- }
- } catch (Exception ex) {
- shellState.printException(ex);
- }
- shellState.getReader().println("Waiting for trace information");
- shellState.getReader().flush();
- UtilWaitThread.sleep(500);
- }
- if (traceCount < 0) {
- // display the trace even though there are unrooted spans
- shellState.getReader().print(sb.toString());
- }
- } else {
- shellState.getReader().println("Not tracing");
- }
- } else
- throw new BadArgumentException("Argument must be 'on' or 'off'", fullCommand, fullCommand.indexOf(cl.getArgs()[0]));
- } else if (cl.getArgs().length == 0) {
- shellState.getReader().println(Trace.isTracing() ? "on" : "off");
- } else {
- shellState.printException(new IllegalArgumentException("Expected 0 or 1 argument. There were " + cl.getArgs().length + "."));
- printHelp(shellState);
- return 1;
- }
- return 0;
- }
-
- @Override
- public String description() {
- return "turns trace logging on or off";
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserCommand.java
deleted file mode 100644
index 07da450..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserCommand.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.accumulo.core.util.shell.Token;
-import org.apache.commons.cli.CommandLine;
-
-public class UserCommand extends Command {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException, IOException {
- // save old credentials and connection in case of failure
- String user = cl.getArgs()[0];
- byte[] pass;
-
- // We can't let the wrapping try around the execute method deal
- // with the exceptions because we have to do something if one
- // of these methods fails
- final String p = shellState.readMaskedLine("Enter password for user " + user + ": ", '*');
- if (p == null) {
- shellState.getReader().println();
- return 0;
- } // user canceled
- pass = p.getBytes(StandardCharsets.UTF_8);
- shellState.updateUser(user, new PasswordToken(pass));
- return 0;
- }
-
- @Override
- public String description() {
- return "switches to the specified user";
- }
-
- @Override
- public void registerCompletion(final Token root, final Map<Command.CompletionSet,Set<String>> special) {
- registerCompletionForUsers(root, special);
- }
-
- @Override
- public String usage() {
- return getName() + " <username>";
- }
-
- @Override
- public int numArgs() {
- return 1;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserPermissionsCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserPermissionsCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserPermissionsCommand.java
deleted file mode 100644
index a126159..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UserPermissionsCommand.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.security.NamespacePermission;
-import org.apache.accumulo.core.security.SystemPermission;
-import org.apache.accumulo.core.security.TablePermission;
-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;
-
-public class UserPermissionsCommand extends Command {
- private Option userOpt;
-
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException, IOException {
- final String user = cl.getOptionValue(userOpt.getOpt(), shellState.getConnector().whoami());
-
- String delim = "";
- shellState.getReader().print("System permissions: ");
- for (SystemPermission p : SystemPermission.values()) {
- if (p != null && shellState.getConnector().securityOperations().hasSystemPermission(user, p)) {
- shellState.getReader().print(delim + "System." + p.name());
- delim = ", ";
- }
- }
- shellState.getReader().println();
-
- boolean runOnce = true;
- for (String n : shellState.getConnector().namespaceOperations().list()) {
- delim = "";
- for (NamespacePermission p : NamespacePermission.values()) {
- if (p != null && shellState.getConnector().securityOperations().hasNamespacePermission(user, n, p)) {
- if (runOnce) {
- shellState.getReader().print("\nNamespace permissions (" + n + "): ");
- runOnce = false;
- }
- shellState.getReader().print(delim + "Namespace." + p.name());
- delim = ", ";
- }
- }
- runOnce = true;
- }
- shellState.getReader().println();
-
-
- runOnce = true;
- for (String t : shellState.getConnector().tableOperations().list()) {
- delim = "";
- for (TablePermission p : TablePermission.values()) {
- if (shellState.getConnector().securityOperations().hasTablePermission(user, t, p) && p != null) {
- if (runOnce) {
- shellState.getReader().print("\nTable permissions (" + t + "): ");
- runOnce = false;
- }
- shellState.getReader().print(delim + "Table." + p.name());
- delim = ", ";
- }
-
- }
- runOnce = true;
- }
- shellState.getReader().println();
-
- return 0;
- }
-
- @Override
- public String description() {
- return "displays a user's system, table, and namespace permissions";
- }
-
- @Override
- public Options getOptions() {
- Options o = new Options();
- userOpt = new Option(Shell.userOption, "user", true, "user to operate on");
- userOpt.setArgName("user");
- o.addOption(userOpt);
- return o;
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UsersCommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UsersCommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UsersCommand.java
deleted file mode 100644
index 023c38b..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/UsersCommand.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.commons.cli.CommandLine;
-
-public class UsersCommand extends Command {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws AccumuloException, AccumuloSecurityException, IOException {
- for (String user : shellState.getConnector().securityOperations().listLocalUsers()) {
- shellState.getReader().println(user);
- }
- return 0;
- }
-
- @Override
- public String description() {
- return "displays a list of existing users";
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/main/java/org/apache/accumulo/core/util/shell/commands/WhoAmICommand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/WhoAmICommand.java b/core/src/main/java/org/apache/accumulo/core/util/shell/commands/WhoAmICommand.java
deleted file mode 100644
index e7bb29d..0000000
--- a/core/src/main/java/org/apache/accumulo/core/util/shell/commands/WhoAmICommand.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.accumulo.core.util.shell.commands;
-
-import java.io.IOException;
-
-import org.apache.accumulo.core.util.shell.Shell;
-import org.apache.accumulo.core.util.shell.Shell.Command;
-import org.apache.commons.cli.CommandLine;
-
-public class WhoAmICommand extends Command {
- @Override
- public int execute(final String fullCommand, final CommandLine cl, final Shell shellState) throws IOException {
- shellState.getReader().println(shellState.getConnector().whoami());
- return 0;
- }
-
- @Override
- public String description() {
- return "reports the current user name";
- }
-
- @Override
- public int numArgs() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/test/java/org/apache/accumulo/core/util/format/DeleterFormatterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/util/format/DeleterFormatterTest.java b/core/src/test/java/org/apache/accumulo/core/util/format/DeleterFormatterTest.java
deleted file mode 100644
index 9223166..0000000
--- a/core/src/test/java/org/apache/accumulo/core/util/format/DeleterFormatterTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * 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.accumulo.core.util.format;
-
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.Map;
-import java.util.TreeMap;
-
-import jline.UnsupportedTerminal;
-import jline.console.ConsoleReader;
-
-import org.apache.accumulo.core.client.BatchWriter;
-import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.data.Key;
-import org.apache.accumulo.core.data.Mutation;
-import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.core.util.shell.Shell;
-import org.junit.Before;
-import org.junit.Test;
-
-public class DeleterFormatterTest {
- DeleterFormatter formatter;
- Map<Key,Value> data;
- BatchWriter writer;
- BatchWriter exceptionWriter;
- Shell shellState;
-
- ByteArrayOutputStream baos;
- ConsoleReader reader;
-
- SettableInputStream input;
-
- class SettableInputStream extends InputStream {
- ByteArrayInputStream bais;
-
- @Override
- public int read() throws IOException {
- return bais.read();
- }
-
- public void set(String in) {
- bais = new ByteArrayInputStream(in.getBytes(StandardCharsets.UTF_8));
- }
- };
-
- @Before
- public void setUp() throws IOException, MutationsRejectedException {
- input = new SettableInputStream();
- baos = new ByteArrayOutputStream();
-
- MutationsRejectedException mre = createMock(MutationsRejectedException.class);
-
- writer = createNiceMock(BatchWriter.class);
- exceptionWriter = createNiceMock(BatchWriter.class);
- exceptionWriter.close();
- expectLastCall().andThrow(mre);
- exceptionWriter.addMutation(anyObject(Mutation.class));
- expectLastCall().andThrow(mre);
-
- shellState = createNiceMock(Shell.class);
-
- reader = new ConsoleReader(input, baos, new UnsupportedTerminal());
- expect(shellState.getReader()).andReturn(reader).anyTimes();
-
- replay(writer, exceptionWriter, shellState);
-
- data = new TreeMap<Key,Value>();
- data.put(new Key("r", "cf", "cq"), new Value("value".getBytes(StandardCharsets.UTF_8)));
- }
-
- @Test
- public void testEmpty() {
- formatter = new DeleterFormatter(writer, Collections.<Key,Value> emptyMap().entrySet(), true, shellState, true);
- assertFalse(formatter.hasNext());
- }
-
- @Test
- public void testSingle() throws IOException {
- formatter = new DeleterFormatter(writer, data.entrySet(), true, shellState, true);
-
- assertTrue(formatter.hasNext());
- assertNull(formatter.next());
-
- verify("[DELETED]", " r ", "cf", "cq", "value");
- }
-
- @Test
- public void testNo() throws IOException {
- input.set("no\n");
- data.put(new Key("z"), new Value("v2".getBytes(StandardCharsets.UTF_8)));
- formatter = new DeleterFormatter(writer, data.entrySet(), true, shellState, false);
-
- assertTrue(formatter.hasNext());
- assertNull(formatter.next());
-
- verify("[SKIPPED]", " r ", "cf", "cq", "value");
-
- assertTrue(formatter.hasNext());
- }
-
- @Test
- public void testNoConfirmation() throws IOException {
- input.set("");
- data.put(new Key("z"), new Value("v2".getBytes(StandardCharsets.UTF_8)));
- formatter = new DeleterFormatter(writer, data.entrySet(), true, shellState, false);
-
- assertTrue(formatter.hasNext());
- assertNull(formatter.next());
-
- verify("[SKIPPED]", " r ", "cf", "cq", "value");
-
- assertFalse(formatter.hasNext());
- }
-
- @Test
- public void testYes() throws IOException {
- input.set("y\nyes\n");
- data.put(new Key("z"), new Value("v2".getBytes(StandardCharsets.UTF_8)));
- formatter = new DeleterFormatter(writer, data.entrySet(), true, shellState, false);
-
- assertTrue(formatter.hasNext());
- assertNull(formatter.next());
- verify("[DELETED]", " r ", "cf", "cq", "value");
-
- assertTrue(formatter.hasNext());
- assertNull(formatter.next());
- verify("[DELETED]", " z ", "v2");
- }
-
- @Test
- public void testMutationException() {
- formatter = new DeleterFormatter(exceptionWriter, data.entrySet(), true, shellState, true);
-
- assertTrue(formatter.hasNext());
- assertNull(formatter.next());
- assertFalse(formatter.hasNext());
- }
-
- private void verify(String... chunks) throws IOException {
- reader.flush();
-
- String output = baos.toString();
- for (String chunk : chunks) {
- assertTrue(output.contains(chunk));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/066043d4/core/src/test/java/org/apache/accumulo/core/util/shell/PasswordConverterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/util/shell/PasswordConverterTest.java b/core/src/test/java/org/apache/accumulo/core/util/shell/PasswordConverterTest.java
deleted file mode 100644
index d1d24a6..0000000
--- a/core/src/test/java/org/apache/accumulo/core/util/shell/PasswordConverterTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.accumulo.core.util.shell;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.util.Scanner;
-
-import org.apache.accumulo.core.util.shell.ShellOptionsJC.PasswordConverter;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import com.beust.jcommander.JCommander;
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.ParameterException;
-
-public class PasswordConverterTest {
-
- private class Password {
- @Parameter(names = "--password", converter = PasswordConverter.class)
- String password;
- }
-
- private String[] argv;
- private Password password;
- private static InputStream realIn;
-
- @BeforeClass
- public static void saveIn() {
- realIn = System.in;
- }
-
- @Before
- public void setup() throws IOException {
- argv = new String[] {"--password", ""};
- password = new Password();
-
- PipedInputStream in = new PipedInputStream();
- PipedOutputStream out = new PipedOutputStream(in);
- OutputStreamWriter osw = new OutputStreamWriter(out);
- osw.write("secret");
- osw.close();
-
- System.setIn(in);
- }
-
- @After
- public void teardown() {
- System.setIn(realIn);
- }
-
- @Test
- public void testPass() {
- String expected = String.valueOf(Math.random());
- argv[1] = "pass:" + expected;
- new JCommander(password, argv);
- assertEquals(expected, password.password);
- }
-
- @Test
- public void testEnv() {
- String name = System.getenv().keySet().iterator().next();
- argv[1] = "env:" + name;
- new JCommander(password, argv);
- assertEquals(System.getenv(name), password.password);
- }
-
- @Test
- public void testFile() throws FileNotFoundException {
- argv[1] = "file:pom.xml";
- Scanner scan = new Scanner(new File("pom.xml"));
- String expected = scan.nextLine();
- scan.close();
- new JCommander(password, argv);
- assertEquals(expected, password.password);
- }
-
- @Test(expected=ParameterException.class)
- public void testNoFile() throws FileNotFoundException {
- argv[1] = "file:doesnotexist";
- new JCommander(password, argv);
- }
-
- @Test
- public void testStdin() {
- argv[1] = "stdin";
- new JCommander(password, argv);
- assertEquals("stdin", password.password);
- }
-}