/* * 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**/ } }