/**
 * Copyright (c) 2010-2012 EBM WebSourcing, 2012-2013 Linagora
 * 
 * This program/library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 2.1 of the License, or (at your
 * option) any later version.
 * 
 * This program/library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
 * for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program/library; If not, see <http://www.gnu.org/licenses/>
 * for the GNU Lesser General Public License version 2.1.
 */
package org.ow2.petals.cli.shell;

/**
 * This class is the abstract shell implementation for petals CLI for scripting use.
 *
 * @author Sebastien Andre - EBM WebSourcing
 * @author Christophe DENEUX - EBM WebSourcing
 */
public abstract class PetalsScriptShell extends PetalsScript {

    /**
     * Unrecognized arguments on the command line
     */
    final String[] argv;

    /**
     * @param argv
     * @param isYesFlagEnable
     *            Flag to enable the automatic confirmation
     */
    public PetalsScriptShell(final String[] argv, final boolean isDebugModeEnable,
            final boolean isYesFlagEnable) {
        super(System.out, System.err, isDebugModeEnable, isYesFlagEnable);
        this.argv = argv;
    }

    /**
     * Callback invoked before starting script
     */
    @Override
	protected void onStart() {

        // Use unrecognized arguments on command line as properties
        if (this.argv != null) {
            for (int i = 0; i < this.argv.length; i++) {
                System.setProperty("argv_" + i, this.argv[i]);
            }
        }
    }

    /**
     * Callback invoked before executing a script line
     */
    @Override
	protected void onLine() {

        // Nothing to do before reading a line of the commands flow script
    }

    /**
     * Command execution error callback.
     */
    @Override
	protected void onError(final Exception e, final int lineNumber) {

        this.printError(e, "ERROR on line " + lineNumber + ": " + e.getMessage());
    }

}
