Author: ngn
Date: Sat Nov 15 13:46:14 2008
New Revision: 717933

URL: http://svn.apache.org/viewvc?rev=717933&view=rev
Log:
Allow the XML config to use the Spring beans:map element for defining ftplets

Added:
    
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FtpletsConfigTest.java
Modified:
    
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java
    
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java?rev=717933&r1=717932&r2=717933&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java
 Sat Nov 15 13:46:14 2008
@@ -184,18 +184,25 @@
     private Map parseFtplets(final Element childElm,
             final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
-        ManagedMap ftplets = new ManagedMap();
 
         List<Element> childs = SpringUtil.getChildElements(childElm);
 
-        for (Element ftpletElm : childs) {
-            ftplets
-                    .put(ftpletElm.getAttribute("name"), SpringUtil
-                            .parseSpringChildElement(ftpletElm, parserContext,
-                                    builder));
+        if(childs.size() > 0 && childs.get(0).getLocalName().equals("map")) {
+            // using a beans:map element
+            return (Map) parserContext.getDelegate().parseMapElement(
+                    childs.get(0),
+                    builder.getBeanDefinition());
+        } else {
+            ManagedMap ftplets = new ManagedMap();
+            for (Element ftpletElm : childs) {
+                ftplets
+                        .put(ftpletElm.getAttribute("name"), SpringUtil
+                                .parseSpringChildElement(ftpletElm, 
parserContext,
+                                        builder));
+            }
+    
+            return ftplets;
         }
-
-        return ftplets;
     }
 
     /**

Modified: 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd?rev=717933&r1=717932&r2=717933&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd
 Sat Nov 15 13:46:14 2008
@@ -143,7 +143,7 @@
        <!-- Element used to configure Ftplets for used with the server -->
        <xs:element name="ftplets">
                <xs:complexType>
-                       <xs:sequence>
+                       <xs:choice>
                                <xs:element name="ftplet" maxOccurs="unbounded">
                                        <xs:complexType>
                                                <xs:sequence>
@@ -155,7 +155,8 @@
                                                <xs:attribute name="name" 
use="required" type="xs:string" />
                                        </xs:complexType>
                                </xs:element>
-                       </xs:sequence>
+                               <xs:element ref="beans:map" />
+                       </xs:choice>
                </xs:complexType>
        </xs:element>
 

Added: 
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FtpletsConfigTest.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FtpletsConfigTest.java?rev=717933&view=auto
==============================================================================
--- 
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FtpletsConfigTest.java
 (added)
+++ 
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/config/spring/FtpletsConfigTest.java
 Sat Nov 15 13:46:14 2008
@@ -0,0 +1,72 @@
+/*
+ * 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.io.File;
+import java.util.Map;
+
+import org.apache.ftpserver.FtpServer;
+import org.apache.ftpserver.ftplet.Ftplet;
+import org.apache.ftpserver.ftpletcontainer.FtpletContainer;
+import org.apache.ftpserver.impl.DefaultFtpServer;
+import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
+import org.apache.ftpserver.usermanager.Md5PasswordEncryptor;
+import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
+import org.apache.ftpserver.usermanager.impl.PropertiesUserManager;
+
+/**
+*
+* @author The Apache MINA Project ([EMAIL PROTECTED])
+* @version $Rev$, $Date$
+*
+*/
+public class FtpletsConfigTest extends SpringConfigTestTemplate {
+
+    private static final String USER_FILE_PATH = 
"src/test/resources/users.properties";
+    
+    private Map<String, Ftplet> createFtplets(String config) {
+        DefaultFtpServer server = (DefaultFtpServer) createServer("<ftplets>" 
+ config + "</ftplets>");
+
+        return server.getFtplets();
+    }
+
+    public void testFtplet() throws Throwable {
+        Map<String, Ftplet> ftplets = createFtplets("<ftplet name=\"foo\">" +
+                       "<beans:bean class=\"" + TestFtplet.class.getName() +  
"\">" +
+                        "<beans:property name=\"foo\" value=\"123\" />" +
+                        "</beans:bean></ftplet>");
+
+        assertEquals(1, ftplets.size());
+        assertEquals(123, ((TestFtplet)ftplets.get("foo")).getFoo());
+    }
+
+    public void testFtpletMap() throws Throwable {
+        Map<String, Ftplet> ftplets = createFtplets("<beans:map>" + 
+                
"<beans:entry><beans:key><beans:value>foo</beans:value></beans:key>" +
+                        "<beans:bean class=\"" + TestFtplet.class.getName() +  
"\">" +
+                        "<beans:property name=\"foo\" value=\"123\" />" +
+                        "</beans:bean>" +
+                        "</beans:entry></beans:map>");
+
+        assertEquals(1, ftplets.size());
+        assertEquals(123, ((TestFtplet)ftplets.get("foo")).getFoo());
+    }
+
+}


Reply via email to