001/* 002 * Copyright (C) 2012 eXo Platform SAS. 003 * 004 * This is free software; you can redistribute it and/or modify it 005 * under the terms of the GNU Lesser General Public License as 006 * published by the Free Software Foundation; either version 2.1 of 007 * the License, or (at your option) any later version. 008 * 009 * This software is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * You should have received a copy of the GNU Lesser General Public 015 * License along with this software; if not, write to the Free 016 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 017 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 018 */ 019 020package org.crsh.command; 021 022import org.crsh.io.Filter; 023import org.crsh.util.Utils; 024 025import java.io.IOException; 026 027/** 028 * A command pipe. 029 * 030 * @param <C> the consumed generic type 031 * @param <P> the produced generic type 032 */ 033public abstract class Pipe<C, P> implements Filter<C, P, InvocationContext<P>> { 034 035 /** . */ 036 protected InvocationContext<P> context; 037 038 public final boolean isPiped() { 039 return context.isPiped(); 040 } 041 042 public final Class<P> getProducedType() { 043 return (Class<P>)Utils.resolveToClass(getClass(), Pipe.class, 1); 044 } 045 046 public final Class<C> getConsumedType() { 047 return (Class<C>)Utils.resolveToClass(getClass(), Pipe.class, 0); 048 } 049 050 public void open(InvocationContext<P> consumer) { 051 this.context = consumer; 052 053 // 054 open(); 055 } 056 057 /** 058 * Open pipe. 059 */ 060 public void open() throws ScriptException { 061 } 062 063 /** 064 * Extends the throw clause of the {@link org.crsh.io.Consumer#provide(Object)} method. 065 * 066 * @param element the provided element 067 * @throws ScriptException any script exception 068 * @throws IOException any io exception 069 */ 070 public void provide(C element) throws ScriptException, IOException { 071 } 072 073 /** 074 * Flush pipe. 075 * 076 * @throws ScriptException any script exception 077 * @throws IOException any io exception 078 */ 079 public void flush() throws ScriptException, IOException { 080 context.flush(); 081 } 082 083 /** 084 * Close pipe. 085 * 086 * @throws ScriptException any script exception 087 */ 088 public void close() throws ScriptException, IOException { 089 context.close(); 090 } 091}