001 package org.crsh.command; 002 003 import java.io.PrintWriter; 004 import java.util.ArrayList; 005 import java.util.Collections; 006 import java.util.List; 007 import java.util.Map; 008 009 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ 010 class InnerInvocationContext<P> implements InvocationContext<Void, P> { 011 012 /** . */ 013 final InvocationContext<?, ?> outter; 014 015 /** . */ 016 final Class<? extends P> producedType; 017 018 /** . */ 019 List<P> products; 020 021 /** . */ 022 final boolean piped; 023 024 InnerInvocationContext( 025 InvocationContext<?, ?> outter, 026 Class<? extends P> producedType, 027 boolean piped) { 028 this.outter = outter; 029 this.products = Collections.emptyList(); 030 this.producedType = producedType; 031 this.piped = piped; 032 } 033 034 public int getWidth() { 035 return outter.getWidth(); 036 } 037 038 public String getProperty(String propertyName) { 039 return outter.getProperty(propertyName); 040 } 041 042 public String readLine(String msg, boolean echo) { 043 return outter.readLine(msg, echo); 044 } 045 046 public PrintWriter getWriter() { 047 return outter.getWriter(); 048 } 049 050 public boolean isPiped() { 051 return piped; 052 } 053 054 public Iterable<Void> consume() throws IllegalStateException { 055 throw new IllegalStateException(); 056 } 057 058 public void produce(P product) { 059 if (products.isEmpty()) { 060 products = new ArrayList<P>(); 061 } 062 products.add(product); 063 } 064 065 public Map<String, Object> getAttributes() { 066 return outter.getAttributes(); 067 } 068 }