001 package org.crsh.term.processor;
002
003 import org.crsh.plugin.CRaSHPlugin;
004 import org.crsh.shell.concurrent.AsyncShell;
005 import org.crsh.shell.impl.CRaSH;
006 import org.crsh.shell.impl.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 import java.util.concurrent.ExecutorService;
013 import java.util.concurrent.Executors;
014
015 /**
016 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
017 */
018 public class ProcessorIOHandler extends CRaSHPlugin<TermIOHandler> implements TermIOHandler {
019
020 /** . */
021 private ExecutorService executor;
022
023 /** . */
024 private CRaSH crash;
025
026 @Override
027 public TermIOHandler getImplementation() {
028 return this;
029 }
030
031 @Override
032 public void init() {
033 this.executor = Executors.newFixedThreadPool(3);
034 this.crash = new CRaSH(getContext());
035 }
036
037 @Override
038 public void destroy() {
039 if (executor != null) {
040 executor.shutdown();
041 }
042 }
043
044 public void handle(final TermIO io, Principal user) {
045 CRaSHSession shell = crash.createSession(user);
046 AsyncShell asyncShell = new AsyncShell(executor, shell);
047 BaseTerm term = new BaseTerm(io);
048 Processor processor = new Processor(term, asyncShell);
049 processor.addListener(io);
050 processor.addListener(asyncShell);
051 processor.addListener(shell);
052
053 //
054 processor.run();
055 }
056 }