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 020 package org.crsh.command; 021 022 import org.crsh.stream.Filter; 023 import org.crsh.util.Utils; 024 025 import 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 */ 033 public abstract class Pipe<C, P> implements Filter<C, P, InvocationContext<P>> { 034 035 /** . */ 036 protected InvocationContext<P> context; 037 038 public final Class<P> getProducedType() { 039 return (Class<P>)Utils.resolveToClass(getClass(), Pipe.class, 1); 040 } 041 042 public final Class<C> getConsumedType() { 043 return (Class<C>)Utils.resolveToClass(getClass(), Pipe.class, 0); 044 } 045 046 public void open(InvocationContext<P> consumer) throws Exception { 047 this.context = consumer; 048 049 // 050 open(); 051 } 052 053 /** 054 * Open pipe. 055 */ 056 public void open() throws Exception { 057 } 058 059 public void provide(C element) throws Exception { 060 } 061 062 /** 063 * Flush pipe. 064 * 065 * @throws IOException any io exception 066 */ 067 public void flush() throws IOException { 068 context.flush(); 069 } 070 071 /** 072 * Close pipe. 073 * 074 * @throws Exception any exception 075 */ 076 public void close() throws Exception { 077 context.close(); 078 } 079 }