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