diff options
Diffstat (limited to 'src/com/cyanogenmod/filemanager/commands/shell/Program.java')
| -rw-r--r-- | src/com/cyanogenmod/filemanager/commands/shell/Program.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/filemanager/commands/shell/Program.java b/src/com/cyanogenmod/filemanager/commands/shell/Program.java new file mode 100644 index 0000000..ae811c0 --- /dev/null +++ b/src/com/cyanogenmod/filemanager/commands/shell/Program.java @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2012 The CyanogenMod 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.cyanogenmod.filemanager.commands.shell; + +import com.cyanogenmod.filemanager.commands.Executable; +import com.cyanogenmod.filemanager.console.CommandNotFoundException; +import com.cyanogenmod.filemanager.console.ExecutionException; +import com.cyanogenmod.filemanager.console.InsufficientPermissionsException; +import com.cyanogenmod.filemanager.console.NoSuchFileOrDirectory; + +import java.io.OutputStream; + + +/** + * An abstract class that represents a command that need a shell + * to be executed. + */ +public abstract class Program extends Command implements Executable { + + /** + * An interface for transmitting data to the program + */ + public interface ProgramListener { + /** + * Invoked when a request the program need to write in the shell program. + * + * @param data The data to write to the shell console + * @param offset The initial position in buffer to store the bytes read from this stream + * @param byteCount The maximum number of bytes to store in b + * @return boolean If the write was transmitted successfully + * @throws ExecutionException If the console is not ready + */ + boolean onRequestWrite(byte[] data, int offset, int byteCount) throws ExecutionException; + + /** + * Method that returns the output stream of the console. + * + * @return OutputStream The output stream of the console + */ + OutputStream getOutputStream(); + } + + // The listener for the program + private ProgramListener mProgramListener; + + /** + * @Constructor of <code>Program</code> + * + * @param id The resource identifier of the command + * @param args Arguments of the command (will be formatted with the arguments from + * the command definition) + * @throws InvalidCommandDefinitionException If the command has an invalid definition + */ + public Program(String id, String... args) throws InvalidCommandDefinitionException { + super(id, args); + } + + /** + * @Constructor of <code>Program</code> + * + * @param id The resource identifier of the command + * @param prepare Indicates if the argument must be prepared + * @param args Arguments of the command (will be formatted with the arguments from + * the command definition) + * @throws InvalidCommandDefinitionException If the command has an invalid definition + */ + public Program(String id, boolean prepare, String... args) + throws InvalidCommandDefinitionException { + super(id, prepare, args); + } + + /** + * Method that returns the program listener + * + * @return ProgramListener The program listener + */ + protected ProgramListener getProgramListener() { + return this.mProgramListener; + } + + /** + * Method that sets the program listener + * + * @param programListener The program listener + */ + public void setProgramListener(ProgramListener programListener) { + this.mProgramListener = programListener; + } + + /** + * Method that returns if the standard error must be + * ignored safely by the shell, and don't check for errors + * like <code>NoSuchFileOrDirectory</code> or + * <code>Permission denied</code> by the shell. + * + * @return boolean If the standard error must be ignored + * @hide + */ + @SuppressWarnings("static-method") + public boolean isIgnoreShellStdErrCheck() { + return false; + } + + /** + * Method that checks if the standard errors has exceptions. + * + * @param exitCode Program exit code + * @param err Standard Error buffer + * @throws InsufficientPermissionsException If an operation requires elevated permissions + * @throws NoSuchFileOrDirectory If the file or directory was not found + * @throws CommandNotFoundException If the command was not found + * @throws ExecutionException If the another exception is detected in the standard error + * @hide + */ + @SuppressWarnings("unused") + public void checkStdErr(int exitCode, String err) + throws InsufficientPermissionsException, NoSuchFileOrDirectory, + CommandNotFoundException, ExecutionException { + /**NON BLOCK**/ + } + +} |
