/*
**
** Copyright 2013, The Android Open Source Project
**
** Licensed 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 com.android.internal.os;

import android.os.ShellCommand;

import java.io.PrintStream;

public abstract class BaseCommand {

    final protected ShellCommand mArgs = new ShellCommand() {
        @Override public int onCommand(String cmd) {
            return 0;
        }
        @Override public void onHelp() {
        }
    };

    // These are magic strings understood by the Eclipse plugin.
    public static final String FATAL_ERROR_CODE = "Error type 1";
    public static final String NO_SYSTEM_ERROR_CODE = "Error type 2";
    public static final String NO_CLASS_ERROR_CODE = "Error type 3";

    private String[] mRawArgs;

    
Call to run the command.
/** * Call to run the command. */
public void run(String[] args) { if (args.length < 1) { onShowUsage(System.out); return; } mRawArgs = args; mArgs.init(null, null, null, null, args, null, 0); try { onRun(); } catch (IllegalArgumentException e) { onShowUsage(System.err); System.err.println(); System.err.println("Error: " + e.getMessage()); } catch (Exception e) { e.printStackTrace(System.err); System.exit(1); } }
Convenience to show usage information to error output.
/** * Convenience to show usage information to error output. */
public void showUsage() { onShowUsage(System.err); }
Convenience to show usage information to error output along with an error message.
/** * Convenience to show usage information to error output along * with an error message. */
public void showError(String message) { onShowUsage(System.err); System.err.println(); System.err.println(message); }
Implement the command.
/** * Implement the command. */
public abstract void onRun() throws Exception;
Print help text for the command.
/** * Print help text for the command. */
public abstract void onShowUsage(PrintStream out);
Return the next option on the command line -- that is an argument that starts with '-'. If the next argument is not an option, null is returned.
/** * Return the next option on the command line -- that is an argument that * starts with '-'. If the next argument is not an option, null is returned. */
public String nextOption() { return mArgs.getNextOption(); }
Return the next argument on the command line, whatever it is; if there are no arguments left, return null.
/** * Return the next argument on the command line, whatever it is; if there are * no arguments left, return null. */
public String nextArg() { return mArgs.getNextArg(); }
Peek the next argument on the command line, whatever it is; if there are no arguments left, return null.
/** * Peek the next argument on the command line, whatever it is; if there are * no arguments left, return null. */
public String peekNextArg() { return mArgs.peekNextArg(); }
Return the next argument on the command line, whatever it is; if there are no arguments left, throws an IllegalArgumentException to report this to the user.
/** * Return the next argument on the command line, whatever it is; if there are * no arguments left, throws an IllegalArgumentException to report this to the user. */
public String nextArgRequired() { return mArgs.getNextArgRequired(); }
Return the original raw argument list supplied to the command.
/** * Return the original raw argument list supplied to the command. */
public String[] getRawArgs() { return mRawArgs; } }