blob: 278f40660ee9da065fec82d19bff4c6715e5961a [file] [log] [blame]
/*
**
** 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.annotation.UnsupportedAppUsage;
import android.os.ShellCommand;
import java.io.PrintStream;
public abstract class BaseCommand {
@UnsupportedAppUsage
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.
*/
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.
*/
public void showUsage() {
onShowUsage(System.err);
}
/**
* 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.
*/
public abstract void onRun() throws Exception;
/**
* 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.
*/
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.
*/
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.
*/
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.
*/
public String nextArgRequired() {
return mArgs.getNextArgRequired();
}
/**
* Return the original raw argument list supplied to the command.
*/
public String[] getRawArgs() {
return mRawArgs;
}
}