001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.flatfile.util; 018 019import java.io.InputStream; 020import java.lang.reflect.Constructor; 021 022import org.apache.commons.lang3.Validate; 023import org.apache.commons.lang3.reflect.ConstructorUtils; 024 025/** 026 * Basic FilterFactory that creates an instance of a given InputStream subclass with a (InputStream) constructor. 027 * @version $Revision: 1301244 $ $Date: 2012-03-15 17:16:23 -0500 (Thu, 15 Mar 2012) $ 028 */ 029public class BasicFilterFactory extends FilterFactory { 030 private static final long serialVersionUID = 9080292216759574895L; 031 032 private final Constructor<? extends InputStream> constructor; 033 034 /** 035 * Create a new BasicFilterFactory instance. 036 * @param type (Filter)InputStream type to instantiate. 037 */ 038 public BasicFilterFactory(Class<? extends InputStream> type) { 039 Validate.isAssignableFrom(InputStream.class, type); 040 this.constructor = 041 Validate.notNull(ConstructorUtils.getAccessibleConstructor(type, 042 InputStream.class), String.format( 043 "Constructor %s(%s) not found", type.getName(), 044 InputStream.class.getName())); 045 } 046 047 /** 048 * {@inheritDoc} 049 */ 050 protected InputStream iGetFilter(InputStream markIsSupported) { 051 try { 052 return constructor.newInstance(markIsSupported); 053 } catch (RuntimeException e) { 054 throw e; 055 } catch (Exception e) { 056 throw new RuntimeException(e); 057 } 058 } 059}