001    /*
002     * Copyright (C) 2012 eXo Platform SAS.
003     *
004     * This is free software; you can redistribute it and/or modify it
005     * under the terms of the GNU Lesser General Public License as
006     * published by the Free Software Foundation; either version 2.1 of
007     * the License, or (at your option) any later version.
008     *
009     * This software is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012     * Lesser General Public License for more details.
013     *
014     * You should have received a copy of the GNU Lesser General Public
015     * License along with this software; if not, write to the Free
016     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018     */
019    
020    package org.crsh.shell;
021    
022    import org.crsh.keyboard.KeyHandler;
023    
024    /**
025     * A shell process.
026     */
027    public interface ShellProcess {
028    
029      /**
030       * Begin the process. The client of this method should make no assumption whether the process is executed
031       * in a synchronous or asynchronous manner. The process will be termined when the process signals it
032       * with an invocation of the {@link ShellProcessContext#end(ShellResponse)} method.
033       *
034       * @param processContext the process context
035       * @throws IllegalStateException if the process is already executing or has been executed
036       */
037      void execute(ShellProcessContext processContext) throws IllegalStateException;
038    
039      /**
040       * Returns the key handler or null if the process won't handle key events.
041       *
042       * @return the key handler for this process
043       */
044      KeyHandler getKeyHandler() throws IllegalStateException;
045    
046      /**
047       * Signals the process it should be cancelled. This method cannot be be called before the process has started,
048       * it can be called multiple times after the process has started. The cancellation of the process is asynchronous,
049       * the cancellation of the process will terminate the current context lifecycle by calling the
050       * {@link org.crsh.shell.ShellProcessContext#end(ShellResponse)} method.
051       *
052       * @throws IllegalStateException if the execution has not yet started
053       */
054      void cancel() throws IllegalStateException;
055    
056    }