001 package org.crsh.processor.jline; 002 003 import org.crsh.shell.ShellProcessContext; 004 import org.crsh.shell.ShellResponse; 005 006 import java.io.IOException; 007 import java.util.concurrent.CountDownLatch; 008 import java.util.concurrent.atomic.AtomicReference; 009 010 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ 011 class JLineProcessContext implements ShellProcessContext { 012 013 /** . */ 014 private static final Character NO_ECHO = (char)0; 015 016 /** . */ 017 final JLineProcessor processor; 018 019 /** . */ 020 final CountDownLatch latch = new CountDownLatch(1); 021 022 /** . */ 023 final AtomicReference<ShellResponse> resp = new AtomicReference<ShellResponse>(); 024 025 public JLineProcessContext(JLineProcessor processor) { 026 this.processor = processor; 027 } 028 029 public int getWidth() { 030 return processor.reader.getTerminal().getWidth(); 031 } 032 033 public String getProperty(String name) { 034 return null; 035 } 036 037 public String readLine(String msg, boolean echo) { 038 try { 039 if (echo) { 040 return processor.reader.readLine(msg); 041 } else { 042 return processor.reader.readLine(msg, NO_ECHO); 043 } 044 } 045 catch (IOException e) { 046 return null; 047 } 048 } 049 050 public void end(ShellResponse response) { 051 resp.set(response); 052 latch.countDown(); 053 } 054 }