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