001    package org.crsh.processor.term;
002    
003    import org.crsh.plugin.CRaSHPlugin;
004    import org.crsh.shell.impl.async.AsyncShell;
005    import org.crsh.shell.impl.command.CRaSH;
006    import org.crsh.shell.impl.command.CRaSHSession;
007    import org.crsh.term.BaseTerm;
008    import org.crsh.term.spi.TermIO;
009    import org.crsh.term.spi.TermIOHandler;
010    
011    import java.security.Principal;
012    
013    /**
014     * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
015     */
016    public class ProcessorIOHandler extends CRaSHPlugin<TermIOHandler> implements TermIOHandler {
017    
018      /** . */
019      private CRaSH crash;
020    
021      @Override
022      public TermIOHandler getImplementation() {
023        return this;
024      }
025    
026      @Override
027      public void init() {
028        this.crash = new CRaSH(getContext());
029      }
030    
031      @Override
032      public void destroy() {
033      }
034    
035      public void handle(final TermIO io, Principal user) {
036        CRaSHSession shell = crash.createSession(user);
037        AsyncShell asyncShell = new AsyncShell(getContext().getExecutor(), shell);
038        BaseTerm term = new BaseTerm(io);
039        Processor processor = new Processor(term, asyncShell);
040        processor.addListener(io);
041        processor.addListener(asyncShell);
042        processor.addListener(shell);
043        processor.run();
044      }
045    }