You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2008/09/30 22:34:31 UTC

svn commit: r700572 - in /mina/ftpserver/trunk/core/src: examples/java/org/apache/ftpserver/examples/ main/java/org/apache/ftpserver/ main/java/org/apache/ftpserver/config/spring/ main/java/org/apache/ftpserver/listener/ main/java/org/apache/ftpserver/...

Author: ngn
Date: Tue Sep 30 13:34:30 2008
New Revision: 700572

URL: http://svn.apache.org/viewvc?rev=700572&view=rev
Log:
Make listeners immutable (FTPSERVER-187)

Added:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java   (with props)
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/AbstractListener.java   (contents, props changed)
      - copied, changed from r693183, mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/AbstractListener.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectPickPortTest.java   (with props)
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java   (with props)
Removed:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/AbstractListener.java
Modified:
    mina/ftpserver/trunk/core/src/examples/java/org/apache/ftpserver/examples/EmbeddingFtpServer.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ListenerBeanDefinitionParser.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/Listener.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectTest.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/InetAddressBlacklistTest.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/SubnetBlacklistTest.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ssl/SSLTestTemplate.java
    mina/ftpserver/trunk/core/src/test/resources/spring-config/config-property-placeholder.xml
    mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml

Modified: mina/ftpserver/trunk/core/src/examples/java/org/apache/ftpserver/examples/EmbeddingFtpServer.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/examples/java/org/apache/ftpserver/examples/EmbeddingFtpServer.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/examples/java/org/apache/ftpserver/examples/EmbeddingFtpServer.java (original)
+++ mina/ftpserver/trunk/core/src/examples/java/org/apache/ftpserver/examples/EmbeddingFtpServer.java Tue Sep 30 13:34:30 2008
@@ -22,14 +22,19 @@
 import java.io.File;
 
 import org.apache.ftpserver.FtpServer;
+import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.ssl.impl.DefaultSslConfiguration;
+import org.apache.ftpserver.usermanager.PropertiesUserManager;
 
 public class EmbeddingFtpServer {
 
     public static void main(String[] args) throws Exception {
         FtpServer server = new FtpServer();
-        // set the port of the default listener
-        server.getListener("default").setPort(2221);
+        
+        ListenerFactory factory = new ListenerFactory();
+        
+        // set the port of the listener
+        factory.setPort(2221);
 
         // define SSL configuration
         DefaultSslConfiguration ssl = new DefaultSslConfiguration();
@@ -37,9 +42,17 @@
         ssl.setKeystorePassword("password");
 
         // set the SSL configuration for the listener
-        server.getListener("default").setSslConfiguration(ssl);
-        server.getListener("default").setImplicitSsl(true);
+        factory.setSslConfiguration(ssl);
+        factory.setImplicitSsl(true);
 
+        // replace the default listener
+        server.addListener("default", factory.createListener());
+        
+        PropertiesUserManager userManager = new PropertiesUserManager();
+        userManager.setFile(new File("myusers.properties"));
+        
+        server.setUserManager(userManager);
+        
         // start the server
         server.start();
     }

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java Tue Sep 30 13:34:30 2008
@@ -35,6 +35,7 @@
 import org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer;
 import org.apache.ftpserver.interfaces.FtpServerContext;
 import org.apache.ftpserver.listener.Listener;
+import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.listener.nio.NioListener;
 import org.apache.ftpserver.message.MessageResource;
 import org.apache.ftpserver.message.impl.DefaultMessageResource;
@@ -81,7 +82,7 @@
 
     public DefaultFtpServerContext() throws Exception {
         // create the default listener
-        listeners.put("default", new NioListener());
+        listeners.put("default", new ListenerFactory().createListener());
     }
 
     /**

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ListenerBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ListenerBeanDefinitionParser.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ListenerBeanDefinitionParser.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ListenerBeanDefinitionParser.java Tue Sep 30 13:34:30 2008
@@ -28,12 +28,14 @@
 import org.apache.ftpserver.DefaultDataConnectionConfiguration.Active;
 import org.apache.ftpserver.DefaultDataConnectionConfiguration.Passive;
 import org.apache.ftpserver.interfaces.DataConnectionConfiguration;
+import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.listener.nio.NioListener;
 import org.apache.ftpserver.ssl.SslConfiguration;
 import org.apache.ftpserver.ssl.impl.DefaultSslConfiguration;
 import org.apache.mina.filter.firewall.Subnet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.BeanDefinitionHolder;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
@@ -56,8 +58,8 @@
      * {@inheritDoc}
      */
     @Override
-    protected Class<NioListener> getBeanClass(final Element element) {
-        return NioListener.class;
+    protected Class<?> getBeanClass(final Element element) {
+        return null;
     }
 
     /**
@@ -106,20 +108,36 @@
     protected void doParse(final Element element,
             final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
+
+        BeanDefinitionBuilder factoryBuilder = BeanDefinitionBuilder.genericBeanDefinition(ListenerFactory.class);
+
         if (StringUtils.hasText(element.getAttribute("port"))) {
-            builder.addPropertyValue("port", Integer.parseInt(element
+            factoryBuilder.addPropertyValue("port", Integer.parseInt(element
                     .getAttribute("port")));
         }
 
         SslConfiguration ssl = parseSsl(element);
         if (ssl != null) {
-            builder.addPropertyValue("sslConfiguration", ssl);
+            factoryBuilder.addPropertyValue("sslConfiguration", ssl);
         }
 
         Element dataConElm = SpringUtil.getChildElement(element,
                 FtpServerNamespaceHandler.FTPSERVER_NS, "data-connection");
         DataConnectionConfiguration dc = parseDataConnection(dataConElm, ssl);
-        builder.addPropertyValue("dataConnectionConfiguration", dc);
+        factoryBuilder.addPropertyValue("dataConnectionConfiguration", dc);
+
+        if (StringUtils.hasText(element.getAttribute("idle-timeout"))) {
+            factoryBuilder.addPropertyValue("idleTimeout", SpringUtil.parseInt(
+                    element, "idle-timeout", 300));
+        }
+
+        InetAddress localAddress = SpringUtil.parseInetAddress(element,
+                "local-address");
+        if (localAddress != null) {
+            factoryBuilder.addPropertyValue("serverAddress", localAddress);
+        }
+        factoryBuilder.addPropertyValue("implicitSsl", SpringUtil.parseBoolean(
+                element, "implicit-ssl", false));
 
         Element blacklistElm = SpringUtil.getChildElement(element,
                 FtpServerNamespaceHandler.FTPSERVER_NS, "blacklist");
@@ -132,24 +150,16 @@
                 subnets.add(parseSubnet(block));
             }
 
-            builder.addPropertyValue("blockedSubnets", subnets);
+            factoryBuilder.addPropertyValue("blockedSubnets", subnets);
         }
-
-        if (StringUtils.hasText(element.getAttribute("idle-timeout"))) {
-            builder.addPropertyValue("idleTimeout", SpringUtil.parseInt(
-                    element, "idle-timeout", 300));
-        }
-        if (StringUtils.hasText(element.getAttribute("port"))) {
-            builder.addPropertyValue("port", SpringUtil.parseInt(element,
-                    "port", 21));
-        }
-        InetAddress localAddress = SpringUtil.parseInetAddress(element,
-                "local-address");
-        if (localAddress != null) {
-            builder.addPropertyValue("serverAddress", localAddress);
-        }
-        builder.addPropertyValue("implicitSsl", SpringUtil.parseBoolean(
-                element, "implicit-ssl", false));
+        
+        
+        BeanDefinitionHolder factoryHolder = new BeanDefinitionHolder(factoryBuilder.getBeanDefinition(), "listener-factory");
+        registerBeanDefinition(factoryHolder, parserContext.getRegistry());
+
+        // set the factory on the listener bean
+        builder.getRawBeanDefinition().setFactoryBeanName("listener-factory");
+        builder.getRawBeanDefinition().setFactoryMethodName("createListener");
     }
 
     private SslConfiguration parseSsl(final Element parent) {

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/Listener.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/Listener.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/Listener.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/Listener.java Tue Sep 30 13:34:30 2008
@@ -20,12 +20,14 @@
 package org.apache.ftpserver.listener;
 
 import java.net.InetAddress;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.ftpserver.interfaces.DataConnectionConfiguration;
 import org.apache.ftpserver.interfaces.FtpIoSession;
 import org.apache.ftpserver.interfaces.FtpServerContext;
 import org.apache.ftpserver.ssl.SslConfiguration;
+import org.apache.mina.filter.firewall.Subnet;
 
 /**
  * Interface for the component responsible for waiting for incoming socket
@@ -98,16 +100,6 @@
     boolean isImplicitSsl();
 
     /**
-     * Should this listener be in SSL mode automatically or must the client
-     * explicitly request to use SSL
-     * 
-     * @param implicitSsl
-     *            true is the listener should automatically be in SSL mode,
-     *            false otherwise
-     */
-    void setImplicitSsl(boolean implicitSsl);
-
-    /**
      * Get the {@link SslConfiguration} used for this listener
      * 
      * @return The current {@link SslConfiguration}
@@ -115,14 +107,6 @@
     SslConfiguration getSslConfiguration();
 
     /**
-     * Set the {@link SslConfiguration} used for this listener
-     * 
-     * @param sslConfiguration
-     *            The {@link SslConfiguration}
-     */
-    void setSslConfiguration(SslConfiguration sslConfiguration);
-
-    /**
      * Get the port on which this listener is waiting for requests. For
      * listeners where the port is automatically assigned, this will return the
      * bound port.
@@ -132,15 +116,6 @@
     int getPort();
 
     /**
-     * Set the port on which this listener will accept requests. Or set to 0
-     * (zero) is the port should be automatically assigned
-     * 
-     * @param port
-     *            The port to use.
-     */
-    void setPort(int port);
-
-    /**
      * Get the {@link InetAddress} used for binding the local socket. Defaults
      * to null, that is, the server binds to all available network interfaces
      * 
@@ -149,27 +124,31 @@
     InetAddress getServerAddress();
 
     /**
-     * Set the {@link InetAddress} used for binding the local socket. Defaults
-     * to null, that is, the server binds to all available network interfaces
+     * Get configuration for data connections made within this listener
      * 
-     * @param serverAddress
-     *            The local socket {@link InetAddress}
+     * @return The data connection configuration
      */
-    void setServerAddress(InetAddress serverAddress);
+    DataConnectionConfiguration getDataConnectionConfiguration();
 
     /**
-     * Get configuration for data connections made within this listener
+     * Get the number of seconds during which no network activity 
+     * is allowed before a session is closed due to inactivity.  
+     * @return The idle time out
+     */
+    int getIdleTimeout();
+
+    /**
+     * Retrieves the {@link InetAddress} for which this listener blocks
+     * connections
      * 
-     * @return The data connection configuration
+     * @return The list of {@link InetAddress}es
      */
-    DataConnectionConfiguration getDataConnectionConfiguration();
+    List<InetAddress> getBlockedAddresses();
 
     /**
-     * Set configuration for data connections made within this listener
+     * Retrieves the {@link Subnet}s for this listener blocks connections
      * 
-     * @param dataConnectionConfig
-     *            The data connection configuration
+     * @return The list of {@link Subnet}s
      */
-    void setDataConnectionConfiguration(
-            DataConnectionConfiguration dataConnectionConfig);
+    List<Subnet> getBlockedSubnets();
 }
\ No newline at end of file

Added: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java?rev=700572&view=auto
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java (added)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java Tue Sep 30 13:34:30 2008
@@ -0,0 +1,250 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.listener;
+
+import java.net.InetAddress;
+import java.util.List;
+
+import org.apache.ftpserver.DefaultDataConnectionConfiguration;
+import org.apache.ftpserver.interfaces.DataConnectionConfiguration;
+import org.apache.ftpserver.listener.Listener;
+import org.apache.ftpserver.listener.nio.NioListener;
+import org.apache.ftpserver.ssl.SslConfiguration;
+import org.apache.mina.filter.firewall.Subnet;
+
+/**
+ * Factory for listeners. Listeners themselves are immutable and must be 
+ * created using this factory.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ListenerFactory {
+
+    private InetAddress serverAddress;
+
+    private int port = 21;
+
+    private SslConfiguration ssl;
+
+    private boolean implicitSsl = false;
+
+    private DataConnectionConfiguration dataConnectionConfig = new DefaultDataConnectionConfiguration();
+
+    private int idleTimeout = 300;
+    
+    private List<InetAddress> blockedAddresses;
+
+    private List<Subnet> blockedSubnets;
+
+    /**
+     * Default constructor
+     */
+    public ListenerFactory() {
+        // do nothing
+    }
+
+    /**
+     * Copy constructor, will copy properties from the provided listener.
+     * @param listener The listener which properties will be used for this factory
+     */
+    public ListenerFactory(Listener listener) {
+        serverAddress = listener.getServerAddress();
+        port = listener.getPort();
+        ssl = listener.getSslConfiguration();
+        implicitSsl = listener.isImplicitSsl();
+        dataConnectionConfig = listener.getDataConnectionConfiguration();
+        idleTimeout = listener.getIdleTimeout();
+        blockedAddresses = listener.getBlockedAddresses();
+        blockedSubnets = listener.getBlockedSubnets();
+    }
+
+    
+    /**
+     * Create a listener based on the settings of this factory. The listener is immutable.
+     * @return The created listener
+     */
+    public Listener createListener() {
+        return new NioListener(serverAddress, port, implicitSsl, ssl,
+                dataConnectionConfig, idleTimeout, blockedAddresses, blockedSubnets);
+    }
+
+    /**
+     * Is listeners created by this factory in SSL mode automatically or must the client explicitly
+     * request to use SSL
+     * 
+     * @return true is listeners created by this factory is automatically in SSL mode, false
+     *         otherwise
+     */
+    public boolean isImplicitSsl() {
+        return implicitSsl;
+    }
+
+    /**
+     * Should listeners created by this factory be in SSL mode automatically or must the client
+     * explicitly request to use SSL
+     * 
+     * @param implicitSsl
+     *            true is listeners created by this factory should automatically be in SSL mode,
+     *            false otherwise
+     */
+    public void setImplicitSsl(boolean implicitSsl) {
+        this.implicitSsl = implicitSsl;
+    }
+
+    /**
+     * Get the port on which listeners created by this factory is waiting for requests. 
+     * 
+     * @return The port
+     */
+    public int getPort() {
+        return port;
+    }
+
+    /**
+     * Set the port on which listeners created by this factory will accept requests. Or set to 0
+     * (zero) is the port should be automatically assigned
+     * 
+     * @param port
+     *            The port to use.
+     */
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    /**
+     * Get the {@link InetAddress} used for binding the local socket. Defaults
+     * to null, that is, the server binds to all available network interfaces
+     * 
+     * @return The local socket {@link InetAddress}, if set
+     */
+    public InetAddress getServerAddress() {
+        return serverAddress;
+    }
+
+    /**
+     * Set the {@link InetAddress} used for binding the local socket. Defaults
+     * to null, that is, the server binds to all available network interfaces
+     * 
+     * @param serverAddress
+     *            The local socket {@link InetAddress}
+     */
+    public void setServerAddress(InetAddress serverAddress) {
+        this.serverAddress = serverAddress;
+    }
+
+    /**
+     * Get the {@link SslConfiguration} used for listeners created by this factory
+     * 
+     * @return The {@link SslConfiguration}
+     */
+    public SslConfiguration getSslConfiguration() {
+        return ssl;
+    }
+
+    /**
+     * Set the {@link SslConfiguration} to use by listeners created by this factory
+     * @param ssl The {@link SslConfiguration}
+     */
+    public void setSslConfiguration(SslConfiguration ssl) {
+        this.ssl = ssl;
+    }
+
+    /**
+     * Get configuration for data connections made within listeners created by this factory
+     * 
+     * @return The data connection configuration
+     */
+    public DataConnectionConfiguration getDataConnectionConfiguration() {
+        return dataConnectionConfig;
+    }
+
+    /**
+     * Set configuration for data connections made within listeners created by this factory
+     * 
+     * @param dataConnectionConfig
+     *            The data connection configuration
+     */
+    public void setDataConnectionConfiguration(
+            DataConnectionConfiguration dataConnectionConfig) {
+        this.dataConnectionConfig = dataConnectionConfig;
+    }
+
+    /**
+     * Get the number of seconds during which no network activity 
+     * is allowed before a session is closed due to inactivity.  
+     * @return The idle time out
+     */
+    public int getIdleTimeout() {
+        return idleTimeout;
+    }
+
+    /**
+     * Set the number of seconds during which no network activity 
+     * is allowed before a session is closed due to inactivity.  
+     *
+     * @param idleTimeout The idle timeout in seconds
+     */
+    public void setIdleTimeout(int idleTimeout) {
+        this.idleTimeout = idleTimeout;
+    }
+
+    /**
+     * Retrives the {@link InetAddress} for which listeners created by this factory blocks
+     * connections
+     * 
+     * @return The list of {@link InetAddress}es
+     */
+    public List<InetAddress> getBlockedAddresses() {
+        return blockedAddresses;
+    }
+
+    /**
+     * Sets the {@link InetAddress} that listeners created by this factory will block from
+     * connecting
+     * 
+     * @param blockedAddresses
+     *            The list of {@link InetAddress}es
+     */
+    public void setBlockedAddresses(
+            List<InetAddress> blockedAddresses) {
+        this.blockedAddresses = blockedAddresses;
+    }
+
+    /**
+     * Retrives the {@link Subnet}s for which listeners created by this factory blocks connections
+     * 
+     * @return The list of {@link Subnet}s
+     */
+    public List<Subnet> getBlockedSubnets() {
+        return blockedSubnets;
+    }
+
+    /**
+     * Sets the {@link Subnet}s that listeners created by this factory will block from connecting
+     * 
+     * @param blockedAddresses
+     *            The list of {@link Subnet}s
+     */
+    public void setBlockedSubnets(List<Subnet> blockedSubnets) {
+        this.blockedSubnets = blockedSubnets;
+    }
+
+}

Propchange: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ListenerFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/AbstractListener.java (from r693183, mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/AbstractListener.java)
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/AbstractListener.java?p2=mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/AbstractListener.java&p1=mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/AbstractListener.java&r1=693183&r2=700572&rev=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/AbstractListener.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/AbstractListener.java Tue Sep 30 13:34:30 2008
@@ -17,13 +17,17 @@
  * under the License.
  */
 
-package org.apache.ftpserver.listener;
+package org.apache.ftpserver.listener.nio;
 
 import java.net.InetAddress;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.ftpserver.DefaultDataConnectionConfiguration;
 import org.apache.ftpserver.interfaces.DataConnectionConfiguration;
+import org.apache.ftpserver.listener.Listener;
 import org.apache.ftpserver.ssl.SslConfiguration;
+import org.apache.mina.filter.firewall.Subnet;
 
 /**
  * Common base class for listener implementations
@@ -40,9 +44,34 @@
     private SslConfiguration ssl;
 
     private boolean implicitSsl = false;
+    
+    private int idleTimeout;
+    
+    private List<InetAddress> blockedAddresses;
+
+    private List<Subnet> blockedSubnets;
 
     private DataConnectionConfiguration dataConnectionConfig = new DefaultDataConnectionConfiguration();
 
+    public AbstractListener(InetAddress serverAddress, int port, boolean implicitSsl, 
+            SslConfiguration sslConfiguration, DataConnectionConfiguration dataConnectionConfig,
+            int idleTimeout, List<InetAddress> blockedAddresses, List<Subnet> blockedSubnets) {
+        this.serverAddress = serverAddress;
+        this.port = port;
+        this.implicitSsl = implicitSsl;
+        this.dataConnectionConfig = dataConnectionConfig;
+        this.ssl = sslConfiguration;
+        this.idleTimeout = idleTimeout;
+        
+        if(blockedAddresses != null) {
+            this.blockedAddresses = Collections.unmodifiableList(blockedAddresses);
+        }
+        if(blockedSubnets != null) {
+            this.blockedSubnets = Collections.unmodifiableList(blockedSubnets);
+        }
+        
+    }
+    
     /**
      * {@inheritDoc}
      */
@@ -53,24 +82,18 @@
     /**
      * {@inheritDoc}
      */
-    public void setImplicitSsl(boolean implicitSsl) {
-        this.implicitSsl = implicitSsl;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public int getPort() {
         return port;
     }
 
     /**
-     * {@inheritDoc}
+     * Used internally to update the port after binding
+     * @param port
      */
-    public void setPort(int port) {
+    protected void setPort(int port) {
         this.port = port;
     }
-
+    
     /**
      * {@inheritDoc}
      */
@@ -81,36 +104,42 @@
     /**
      * {@inheritDoc}
      */
-    public void setServerAddress(InetAddress serverAddress) {
-        this.serverAddress = serverAddress;
+    public SslConfiguration getSslConfiguration() {
+        return ssl;
     }
 
     /**
      * {@inheritDoc}
      */
-    public SslConfiguration getSslConfiguration() {
-        return ssl;
+    public DataConnectionConfiguration getDataConnectionConfiguration() {
+        return dataConnectionConfig;
     }
 
     /**
-     * {@inheritDoc}
+     * Get the number of seconds during which no network activity 
+     * is allowed before a session is closed due to inactivity.  
+     * @return The idle time out
      */
-    public void setSslConfiguration(SslConfiguration ssl) {
-        this.ssl = ssl;
+    public int getIdleTimeout() {
+        return idleTimeout;
     }
 
     /**
-     * {@inheritDoc}
+     * Retrives the {@link InetAddress} for which this listener blocks
+     * connections
+     * 
+     * @return The list of {@link InetAddress}es
      */
-    public DataConnectionConfiguration getDataConnectionConfiguration() {
-        return dataConnectionConfig;
+    public List<InetAddress> getBlockedAddresses() {
+        return blockedAddresses;
     }
 
     /**
-     * {@inheritDoc}
+     * Retrieves the {@link Subnet}s for this listener blocks connections
+     * 
+     * @return The list of {@link Subnet}s
      */
-    public void setDataConnectionConfiguration(
-            DataConnectionConfiguration dataConnectionConfig) {
-        this.dataConnectionConfig = dataConnectionConfig;
+    public List<Subnet> getBlockedSubnets() {
+        return blockedSubnets;
     }
 }

Propchange: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/AbstractListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/nio/NioListener.java Tue Sep 30 13:34:30 2008
@@ -33,9 +33,9 @@
 import org.apache.ftpserver.FtpHandler;
 import org.apache.ftpserver.filter.FtpLoggingFilter;
 import org.apache.ftpserver.impl.DefaultFtpHandler;
+import org.apache.ftpserver.interfaces.DataConnectionConfiguration;
 import org.apache.ftpserver.interfaces.FtpIoSession;
 import org.apache.ftpserver.interfaces.FtpServerContext;
-import org.apache.ftpserver.listener.AbstractListener;
 import org.apache.ftpserver.listener.Listener;
 import org.apache.ftpserver.ssl.ClientAuth;
 import org.apache.ftpserver.ssl.SslConfiguration;
@@ -74,20 +74,17 @@
 
     private FtpHandler handler = new DefaultFtpHandler();
 
-    private int idleTimeout = 300;
-
-    private List<InetAddress> blockedAddresses;
-
-    private List<Subnet> blockedSubnets;
-
     private FtpServerContext context;
 
-    public int getIdleTimeout() {
-        return idleTimeout;
-    }
-
-    public void setIdleTimeout(int idleTimeout) {
-        this.idleTimeout = idleTimeout;
+    public NioListener(InetAddress serverAddress, int port,
+            boolean implicitSsl,
+            SslConfiguration sslConfiguration,
+            DataConnectionConfiguration dataConnectionConfig, 
+            int idleTimeout, List<InetAddress> blockedAddresses, List<Subnet> blockedSubnets) {
+        super(serverAddress, port, implicitSsl, sslConfiguration, dataConnectionConfig, 
+                idleTimeout, blockedAddresses, blockedSubnets);   
+        
+        updateBlacklistFilter();
     }
 
     private void updateBlacklistFilter() {
@@ -96,10 +93,10 @@
                     .getFilterChain().get("ipFilter");
 
             if (filter != null) {
-                if (blockedAddresses != null) {
-                    filter.setBlacklist(blockedAddresses);
-                } else if (blockedSubnets != null) {
-                    filter.setSubnetBlacklist(blockedSubnets);
+                if (getBlockedAddresses() != null) {
+                    filter.setBlacklist(getBlockedAddresses());
+                } else if (getBlockedSubnets() != null) {
+                    filter.setSubnetBlacklist(getBlockedSubnets());
                 } else {
                     // an empty list clears the blocked addresses
                     filter.setSubnetBlacklist(new ArrayList<Subnet>());
@@ -127,7 +124,7 @@
         acceptor.setReuseAddress(true);
         acceptor.getSessionConfig().setReadBufferSize(2048);
         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,
-                idleTimeout);
+                getIdleTimeout());
         // Decrease the default receiver buffer size
         ((SocketSessionConfig) acceptor.getSessionConfig())
                 .setReceiveBufferSize(512);
@@ -231,82 +228,7 @@
             acceptor.unbind(address);
         }
     }
-
-    /**
-     * Get the {@link ExecutorService} used for processing requests. The default
-     * value is a cached thread pool.
-     * 
-     * @return The {@link ExecutorService}
-     */
-    public ExecutorService getFilterExecutor() {
-        return filterExecutor;
-    }
-
-    /**
-     * Set the {@link ExecutorService} used for processing requests
-     * 
-     * @param filterExecutor
-     *            The {@link ExecutorService}
-     */
-    public void setFilterExecutor(ExecutorService filterExecutor) {
-        this.filterExecutor = filterExecutor;
-    }
-
-    public FtpHandler getHandler() {
-        return handler;
-    }
-
-    public void setHandler(FtpHandler handler) {
-        this.handler = handler;
-
-        if (acceptor != null) {
-            ((FtpHandlerAdapter) acceptor.getHandler()).setFtpHandler(handler);
-        }
-    }
-
-    /**
-     * Retrives the {@link InetAddress} for which this listener blocks
-     * connections
-     * 
-     * @return The list of {@link InetAddress}es
-     */
-    public synchronized List<InetAddress> getBlockedAddresses() {
-        return blockedAddresses;
-    }
-
-    /**
-     * Sets the {@link InetAddress} that this listener will block from
-     * connecting
-     * 
-     * @param blockedAddresses
-     *            The list of {@link InetAddress}es
-     */
-    public synchronized void setBlockedAddresses(
-            List<InetAddress> blockedAddresses) {
-        this.blockedAddresses = blockedAddresses;
-        updateBlacklistFilter();
-    }
-
-    /**
-     * Retrives the {@link Subnet}s for which this acceptor blocks connections
-     * 
-     * @return The list of {@link Subnet}s
-     */
-    public synchronized List<Subnet> getBlockedSubnets() {
-        return blockedSubnets;
-    }
-
-    /**
-     * Sets the {@link Subnet}s that this listener will block from connecting
-     * 
-     * @param blockedAddresses
-     *            The list of {@link Subnet}s
-     */
-    public synchronized void setBlockedSubnets(List<Subnet> blockedSubnets) {
-        this.blockedSubnets = blockedSubnets;
-        updateBlacklistFilter();
-    }
-
+    
     /**
      * @see Listener#getActiveSessions()
      */

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ClientTestTemplate.java Tue Sep 30 13:34:30 2008
@@ -30,6 +30,7 @@
 import org.apache.commons.net.ftp.FTPConnectionClosedException;
 import org.apache.ftpserver.DefaultFtpServerContext;
 import org.apache.ftpserver.FtpServer;
+import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.listener.nio.NioListener;
 import org.apache.ftpserver.test.TestUtil;
 import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
@@ -82,9 +83,10 @@
 
         DefaultFtpServerContext context = new DefaultFtpServerContext();
 
-        NioListener listener = new NioListener();
-        listener.setPort(port);
-        context.setListener("default", listener);
+        ListenerFactory factory = new ListenerFactory();
+        
+        factory.setPort(port);
+        context.setListener("default", factory.createListener());
 
         PropertiesUserManager userManager = new PropertiesUserManager();
         userManager.setAdminName("admin");

Added: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectPickPortTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectPickPortTest.java?rev=700572&view=auto
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectPickPortTest.java (added)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectPickPortTest.java Tue Sep 30 13:34:30 2008
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.clienttests;
+
+import org.apache.ftpserver.FtpServer;
+import org.apache.ftpserver.listener.ListenerFactory;
+import org.apache.ftpserver.listener.nio.NioListener;
+
+/**
+*
+* @author The Apache MINA Project (dev@mina.apache.org)
+* @version $Rev$, $Date$
+*
+*/
+public class ConnectPickPortTest extends ClientTestTemplate {
+
+    @Override
+    protected boolean isConnectClient() {
+        return false;
+    }
+
+    @Override
+    protected boolean isStartServer() {
+        return false;
+    }
+
+    @Override
+    protected FtpServer createServer() throws Exception {
+        FtpServer server = super.createServer();
+        
+        ListenerFactory factory = new ListenerFactory();
+        factory.setPort(0);
+        
+        server.addListener("default", factory.createListener());
+        
+        return server;
+    }
+
+    public void testPortWithZeroPort() throws Exception {
+        assertEquals(0, ((NioListener) server.getServerContext().getListener(
+                "default")).getPort());
+
+        server.start();
+
+        assertTrue(((NioListener) server.getServerContext().getListener(
+                "default")).getPort() > 0);
+    }
+}

Propchange: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectPickPortTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectTest.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ConnectTest.java Tue Sep 30 13:34:30 2008
@@ -39,18 +39,6 @@
         return false;
     }
 
-    public void testPortWithZeroPort() throws Exception {
-        ((NioListener) server.getServerContext().getListener("default"))
-                .setPort(0);
-        assertEquals(0, ((NioListener) server.getServerContext().getListener(
-                "default")).getPort());
-
-        server.start();
-
-        assertTrue(((NioListener) server.getServerContext().getListener(
-                "default")).getPort() > 0);
-    }
-
     public void testPort() throws Exception {
         assertEquals(port, ((NioListener) server.getServerContext()
                 .getListener("default")).getPort());

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/InetAddressBlacklistTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/InetAddressBlacklistTest.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/InetAddressBlacklistTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/InetAddressBlacklistTest.java Tue Sep 30 13:34:30 2008
@@ -25,7 +25,7 @@
 
 import org.apache.commons.net.ftp.FTPConnectionClosedException;
 import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.listener.nio.NioListener;
+import org.apache.ftpserver.listener.ListenerFactory;
 
 /**
 *
@@ -37,14 +37,15 @@
     protected FtpServer createServer() throws Exception {
         FtpServer server = super.createServer();
 
-        NioListener listener = (NioListener) server.getServerContext()
-                .getListener("default");
+        ListenerFactory factory = new ListenerFactory(server.getListener("default"));
 
         List<InetAddress> blockedAddresses = new ArrayList<InetAddress>();
         blockedAddresses.add(InetAddress.getByName("localhost"));
 
-        listener.setBlockedAddresses(blockedAddresses);
+        factory.setBlockedAddresses(blockedAddresses);
 
+        server.addListener("default", factory.createListener());
+        
         return server;
     }
 

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/SubnetBlacklistTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/SubnetBlacklistTest.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/SubnetBlacklistTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/SubnetBlacklistTest.java Tue Sep 30 13:34:30 2008
@@ -25,6 +25,7 @@
 
 import org.apache.commons.net.ftp.FTPConnectionClosedException;
 import org.apache.ftpserver.FtpServer;
+import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.listener.nio.NioListener;
 import org.apache.mina.filter.firewall.Subnet;
 
@@ -38,14 +39,15 @@
     protected FtpServer createServer() throws Exception {
         FtpServer server = super.createServer();
 
-        NioListener listener = (NioListener) server.getServerContext()
-                .getListener("default");
+        ListenerFactory factory = new ListenerFactory(server.getListener("default"));
 
         List<Subnet> blockedSubnets = new ArrayList<Subnet>();
         blockedSubnets.add(new Subnet(InetAddress.getByName("localhost"), 32));
 
-        listener.setBlockedSubnets(blockedSubnets);
+        factory.setBlockedSubnets(blockedSubnets);
 
+        server.addListener("default", factory.createListener());
+        
         return server;
     }
 

Added: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java?rev=700572&view=auto
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java (added)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java Tue Sep 30 13:34:30 2008
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.config.spring;
+
+import java.net.InetAddress;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.ftpserver.interfaces.DataConnectionConfiguration;
+import org.apache.ftpserver.interfaces.FtpIoSession;
+import org.apache.ftpserver.interfaces.FtpServerContext;
+import org.apache.ftpserver.listener.Listener;
+import org.apache.ftpserver.ssl.SslConfiguration;
+import org.apache.mina.filter.firewall.Subnet;
+
+/**
+ * Used for testing creation of custom listeners from Spring config
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ *
+ */
+public class MyCustomListener implements Listener {
+
+    private int port;
+    
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public Set<FtpIoSession> getActiveSessions() {
+        return null;
+    }
+
+    public DataConnectionConfiguration getDataConnectionConfiguration() {
+        return null;
+    }
+
+    public int getIdleTimeout() {
+        return 0;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public InetAddress getServerAddress() {
+        return null;
+    }
+
+    public SslConfiguration getSslConfiguration() {
+        return null;
+    }
+
+    public boolean isImplicitSsl() {
+        return false;
+    }
+
+    public boolean isStopped() {
+        return false;
+    }
+
+    public boolean isSuspended() {
+        return false;
+    }
+
+    public void resume() {
+        
+    }
+
+    public void start(FtpServerContext serverContext) throws Exception {
+        
+    }
+
+    public void stop() {
+        
+    }
+
+    public void suspend() {
+        
+    }
+
+    public List<InetAddress> getBlockedAddresses() {
+        return null;
+    }
+
+    public List<Subnet> getBlockedSubnets() {
+        return null;
+    }
+
+}

Propchange: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java Tue Sep 30 13:34:30 2008
@@ -98,13 +98,13 @@
 
         listener = listeners.get("listener1");
         assertNotNull(listener);
-        assertTrue(listener instanceof NioListener);
-        assertEquals(2223, ((NioListener) listener).getPort());
+        assertTrue(listener instanceof MyCustomListener);
+        assertEquals(2223, listener.getPort());
 
         listener = listeners.get("listener2");
         assertNotNull(listener);
-        assertTrue(listener instanceof NioListener);
-        assertEquals(2224, ((NioListener) listener).getPort());
+        assertTrue(listener instanceof MyCustomListener);
+        assertEquals(2224, listener.getPort());
 
         DefaultCommandFactory cf = (DefaultCommandFactory) server
                 .getServerContext().getCommandFactory();

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ssl/SSLTestTemplate.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ssl/SSLTestTemplate.java?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ssl/SSLTestTemplate.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ssl/SSLTestTemplate.java Tue Sep 30 13:34:30 2008
@@ -33,6 +33,7 @@
 import org.apache.ftpserver.DefaultFtpServerContext;
 import org.apache.ftpserver.FtpServer;
 import org.apache.ftpserver.clienttests.ClientTestTemplate;
+import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.listener.nio.NioListener;
 import org.apache.ftpserver.ssl.impl.DefaultSslConfiguration;
 import org.apache.ftpserver.test.TestUtil;
@@ -60,9 +61,9 @@
         FtpServer server = super.createServer();
         DefaultFtpServerContext context = (DefaultFtpServerContext) server
                 .getServerContext();
-        NioListener listener = (NioListener) context.getListener("default");
-
-        listener.setImplicitSsl(useImplicit());
+        ListenerFactory factory = new ListenerFactory(context.getListener("default"));
+        
+        factory.setImplicitSsl(useImplicit());
 
         DefaultSslConfiguration sslConfig = new DefaultSslConfiguration();
         sslConfig.setKeystoreFile(FTPSERVER_KEYSTORE);
@@ -71,7 +72,7 @@
         sslConfig.setClientAuthentication(getClientAuth());
         sslConfig.setKeyPassword(KEYSTORE_PASSWORD);
 
-        listener.setSslConfiguration(sslConfig);
+        factory.setSslConfiguration(sslConfig);
 
         DefaultSslConfiguration dataSslConfig = new DefaultSslConfiguration();
         dataSslConfig.setKeystoreFile(FTPSERVER_KEYSTORE);
@@ -83,8 +84,10 @@
         DefaultDataConnectionConfiguration dataConfig = new DefaultDataConnectionConfiguration();
         dataConfig.setSslConfiguration(dataSslConfig);
 
-        listener.setDataConnectionConfiguration(dataConfig);
+        factory.setDataConnectionConfiguration(dataConfig);
 
+        server.addListener("default", factory.createListener());
+        
         return server;
     }
 

Modified: mina/ftpserver/trunk/core/src/test/resources/spring-config/config-property-placeholder.xml
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/resources/spring-config/config-property-placeholder.xml?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/resources/spring-config/config-property-placeholder.xml (original)
+++ mina/ftpserver/trunk/core/src/test/resources/spring-config/config-property-placeholder.xml Tue Sep 30 13:34:30 2008
@@ -31,12 +31,12 @@
     <server id="server">
 		<listeners>
 			<listener name="listener0">
-                <beans:bean class="org.apache.ftpserver.listener.nio.NioListener">
+                <beans:bean class="org.apache.ftpserver.config.spring.MyCustomListener">
                     <beans:property name="port" value="${port1}"/>
                 </beans:bean>
 			</listener>
             <listener name="listener1">
-                <beans:bean class="org.apache.ftpserver.listener.nio.NioListener">
+                <beans:bean class="org.apache.ftpserver.config.spring.MyCustomListener">
                     <beans:property name="port" value="${port2}"/>
                 </beans:bean>
             </listener>

Modified: mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml?rev=700572&r1=700571&r2=700572&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml (original)
+++ mina/ftpserver/trunk/core/src/test/resources/spring-config/config-spring-1.xml Tue Sep 30 13:34:30 2008
@@ -45,13 +45,13 @@
 				<blacklist>1.2.3.0/16, 1.2.4.0/16, 1.2.3.4</blacklist>				
 			</nio-listener>
 			<listener name="listener1">
-				    <beans:bean id="listener1" class="org.apache.ftpserver.listener.nio.NioListener">
+				    <beans:bean id="listener1" class="org.apache.ftpserver.config.spring.MyCustomListener">
         <beans:property name="port" value="2223"/>
     </beans:bean>
 
 			</listener>
 			<listener name="listener2">
-				<beans:bean class="org.apache.ftpserver.listener.nio.NioListener">
+				<beans:bean class="org.apache.ftpserver.config.spring.MyCustomListener">
 					<beans:property name="port" value="2224"/>
 				</beans:bean>
 			</listener>