1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 * 19 */ 20 package org.apache.mina.integration.spring; 21 22 import java.util.List; 23 24 import org.apache.mina.common.DefaultIoFilterChainBuilder; 25 import org.apache.mina.common.IoFilter; 26 import org.springframework.beans.factory.config.AbstractFactoryBean; 27 import org.springframework.util.Assert; 28 29 /** 30 * Spring {@link org.springframework.beans.factory.FactoryBean} 31 * which creates {@link DefaultIoFilterChainBuilder} instances. This 32 * factory bean makes it possible to configure the filters to be added to all the 33 * sessions created by an {@link org.apache.mina.common.IoAcceptor} 34 * or {@link org.apache.mina.common.IoConnector} using Spring. 35 * <p> 36 * The filters may be set up in two ways. By creating 37 * {@link IoFilterMapping} objects which associate a name with an {@link IoFilter} 38 * instance and set them using {@link #setFilterMappings(IoFilterMapping[])} or 39 * by using {@link #setFilters(IoFilter[])} directly which assigns automatically 40 * generated names to each {@link IoFilter}. Use the 41 * {@link #setFilterNamePrefix(String)} method to set the prefix used for 42 * auto generated names. 43 * </p> 44 * 45 * @author The Apache Directory Project (mina-dev@directory.apache.org) 46 * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (Fri, 13 Jul 2007) $ 47 */ 48 public class DefaultIoFilterChainBuilderFactoryBean extends AbstractFactoryBean { 49 private IoFilterMapping[] filterMappings = new IoFilterMapping[0]; 50 51 private String prefix = "filter"; 52 53 protected Object createInstance() throws Exception { 54 DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder(); 55 for (int i = 0; i < filterMappings.length; i++) { 56 String name = filterMappings[i].getName(); 57 if (name == null) { 58 name = prefix + i; 59 } 60 builder.addLast(name, filterMappings[i].getFilter()); 61 } 62 63 return builder; 64 } 65 66 public Class getObjectType() { 67 return DefaultIoFilterChainBuilder.class; 68 } 69 70 /** 71 * Sets the prefix used to create the names for automatically named filters 72 * added using {@link #setFilters(IoFilter[])}. The default prefix is 73 * <tt>filter</tt>. 74 * 75 * @param prefix the prefix. 76 * @throws IllegalArgumentException if the specified value is 77 * <code>null</code>. 78 */ 79 public void setFilterNamePrefix(String prefix) { 80 Assert.notNull(prefix, "Property 'filterNamePrefix' may not be null"); 81 this.prefix = prefix; 82 } 83 84 /** 85 * Sets a number of filters which will be added to the filter 86 * chain created by this factory bean. The specified list must contain either 87 * {@link IoFilter} or {@link IoFilterMapping} objects. Filters which 88 * haven't been wrapped in {@link IoFilterMapping} objects will be assigned 89 * automatically generated names (<code><filterNamePrefix>0</code>, 90 * <code><filterNamePrefix>1</code>, etc). 91 * 92 * @param filters the list of {@link IoFilter} and/or 93 * {@link IoFilterMapping} objects. 94 * @throws IllegalArgumentException if the specified value is 95 * <code>null</code> or contains objects of the wrong type. 96 * @see #setFilterNamePrefix(String) 97 */ 98 public void setFilters(List filters) { 99 Assert.notNull(filters, "Property 'filters' may not be null"); 100 IoFilterMapping[] filterMappings = new IoFilterMapping[filters.size()]; 101 102 for (int i = 0; i < filterMappings.length; i++) { 103 Object o = filters.get(i); 104 if (o instanceof IoFilterMapping) { 105 filterMappings[i] = (IoFilterMapping) o; 106 } else if (o instanceof IoFilter) { 107 filterMappings[i] = new IoFilterMapping(); 108 filterMappings[i].setFilter((IoFilter) o); 109 } else { 110 throw new IllegalArgumentException( 111 "List may only contain " 112 + "IoFilter or IoFilterMapping objects. Found object of " 113 + "type " + o.getClass().getName() 114 + " at position " + i + "."); 115 } 116 } 117 118 this.filterMappings = filterMappings; 119 } 120 121 }