org.apache.accumulo.shell.commands.ExtensionCommand.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.accumulo.shell.commands.ExtensionCommand.java

Source

/*
 * 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.shell.commands;

import java.util.HashSet;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.TreeSet;

import org.apache.accumulo.shell.Shell;
import org.apache.accumulo.shell.Shell.Command;
import org.apache.accumulo.shell.ShellExtension;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;

public class ExtensionCommand extends Command {

    protected Option enable, disable, list;

    private ServiceLoader<ShellExtension> extensions = null;

    private Set<String> loadedHeaders = new HashSet<String>();
    private Set<String> loadedCommands = new HashSet<String>();
    private Set<String> loadedExtensions = new TreeSet<String>();

    @Override
    public int execute(String fullCommand, CommandLine cl, Shell shellState) throws Exception {
        if (cl.hasOption(enable.getOpt())) {
            extensions = ServiceLoader.load(ShellExtension.class);
            for (ShellExtension se : extensions) {

                loadedExtensions.add(se.getExtensionName());
                String header = "-- " + se.getExtensionName() + " Extension Commands ---------";
                loadedHeaders.add(header);
                shellState.commandGrouping.put(header, se.getCommands());

                for (Command cmd : se.getCommands()) {
                    String name = se.getExtensionName() + "::" + cmd.getName();
                    loadedCommands.add(name);
                    shellState.commandFactory.put(name, cmd);
                }
            }
        } else if (cl.hasOption(disable.getOpt())) {
            // Remove the headers
            for (String header : loadedHeaders) {
                shellState.commandGrouping.remove(header);
            }
            // remove the commands
            for (String name : loadedCommands) {
                shellState.commandFactory.remove(name);
            }
            // Reset state
            loadedExtensions.clear();
            extensions.reload();
        } else if (cl.hasOption(list.getOpt())) {
            shellState.printLines(loadedExtensions.iterator(), true);
        } else {
            printHelp(shellState);
        }
        return 0;
    }

    @Override
    public String description() {
        return "Enable, disable, or list shell extensions";
    }

    @Override
    public int numArgs() {
        return 0;
    }

    @Override
    public String getName() {
        return "extensions";
    }

    @Override
    public Options getOptions() {
        final Options o = new Options();
        enable = new Option("e", "enable", false, "enable shell extensions");
        disable = new Option("d", "disable", false, "disable shell extensions");
        list = new Option("l", "list", false, "list shell extensions");
        o.addOption(enable);
        o.addOption(disable);
        o.addOption(list);
        return o;
    }

}