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.util.concurrent.ExecutorService; 012 import java.util.concurrent.Executors; 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 ExecutorService executor; 021 022 /** . */ 023 private CRaSH crash; 024 025 @Override 026 public TermIOHandler getImplementation() { 027 return this; 028 } 029 030 @Override 031 public void init() { 032 this.executor = Executors.newFixedThreadPool(3); 033 this.crash = new CRaSH(getContext()); 034 } 035 036 @Override 037 public void destroy() { 038 if (executor != null) { 039 executor.shutdown(); 040 } 041 } 042 043 public void handle(final TermIO io) { 044 CRaSHSession shell = crash.createSession(); 045 AsyncShell asyncShell = new AsyncShell(executor, shell); 046 BaseTerm term = new BaseTerm(io); 047 Processor processor = new Processor(term, asyncShell); 048 processor.addListener(io); 049 processor.addListener(asyncShell); 050 processor.addListener(shell); 051 052 // 053 processor.run(); 054 } 055 }