You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by er...@apache.org on 2010/09/04 10:03:54 UTC

svn commit: r992557 - in /james/server/trunk: mailets/src/main/java/org/apache/james/transport/mailets/ spoolmanager/src/main/java/org/apache/james/transport/mailets/ spring-deployment/src/main/config/james/ user-api/src/main/java/org/apache/james/api/...

Author: eric
Date: Sat Sep  4 08:03:53 2010
New Revision: 992557

URL: http://svn.apache.org/viewvc?rev=992557&view=rev
Log:
XMLVirtualUserTable and JDBCVirtualUserTable work symetric (+ code format + deprecate some mailets usage) (JAMES-745)

Modified:
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/XMLVirtualUserTable.java
    james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java
    james/server/trunk/spring-deployment/src/main/config/james/spoolmanager.xml
    james/server/trunk/spring-deployment/src/main/config/james/sqlResources.xml
    james/server/trunk/user-api/src/main/java/org/apache/james/api/vut/VirtualUserTable.java
    james/server/trunk/user-function/pom.xml
    james/server/trunk/user-function/src/main/java/org/apache/james/vut/JDBCVirtualUserTable.java
    james/server/trunk/user-function/src/main/java/org/apache/james/vut/XMLVirtualUserTable.java
    james/server/trunk/user-function/src/test/java/org/apache/james/vut/JDBCVirtualUserTableTest.java
    james/server/trunk/user-function/src/test/java/org/apache/james/vut/XMLVirtualUserTableTest.java
    james/server/trunk/user-function/src/test/resources/sqlResources.xml
    james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/AbstractVirtualUserTable.java
    james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/VirtualUserTableUtil.java
    james/server/trunk/user-library/src/test/java/org/apache/james/vut/AbstractVirtualUserTableTest.java

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/AbstractVirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -47,7 +47,10 @@ import org.apache.oro.text.regex.Malform
  * Provides an abstraction of common functionality needed for implementing
  * a Virtual User Table. Override the <code>mapRecipients</code> method to
  * map virtual recipients to real recipients.
+ * 
+ * @deprecated use the definitions in virtualusertable-store.xml instead
  */
+@Deprecated
 public abstract class AbstractVirtualUserTable extends GenericMailet
 {
     static private final String MARKER = "org.apache.james.transport.mailets.AbstractVirtualUserTable.mapped";

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/JDBCVirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -89,7 +89,10 @@ import java.util.Map;
  *   &lt;table&gt;db://maildb/VirtualUserTable&lt;/table&gt;
  *   &lt;sqlquery&gt;sqlquery&lt;/sqlquery&gt;
  * &lt;/mailet&gt;
+ * 
+ * @deprecated use the definitions in virtualusertable-store.xml instead
  */
+@Deprecated
 public class JDBCVirtualUserTable extends AbstractVirtualUserTable
 {
     protected DataSource datasource;

Modified: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/XMLVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/XMLVirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/XMLVirtualUserTable.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/XMLVirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -56,7 +56,11 @@ import org.apache.mailet.MailAddress;
  * 2. user@*         - catchall mapping for user anywhere
  * 3. *@domain       - catchall mapping for anyone at domain
  * 4. null           - no valid mapping
+ * 
+ * @deprecated use the definitions in virtualusertable-store.xml instead
+ * 
  */
+@Deprecated
 public class XMLVirtualUserTable extends AbstractVirtualUserTable
 {
   /**

Modified: james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java (original)
+++ james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java Sat Sep  4 08:03:53 2010
@@ -48,7 +48,11 @@ import org.apache.mailet.MailAddress;
  * 
  * <usersRepository>LocalAdmins</usersRepository>: specific users repository
  * name. Default to empty. If empty does lookup the default userRepository.
+ * 
+ * @deprecated use org.apache.james.transport.mailets.VirtualUserTable
+ * 
  */
+@Deprecated
 public class UsersRepositoryAliasingForwarding extends AbstractVirtualUserTableMailet {
 
     /**

Modified: james/server/trunk/spring-deployment/src/main/config/james/spoolmanager.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/spoolmanager.xml?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/src/main/config/james/spoolmanager.xml (original)
+++ james/server/trunk/spring-deployment/src/main/config/james/spoolmanager.xml Sat Sep  4 08:03:53 2010
@@ -33,7 +33,7 @@
          <!-- This mailet redirects mail for the user 'postmaster' at any local domain to -->
          <!-- the postmaster address specified for the server. The postmaster address -->
          <!-- is required by rfc822. Do not remove this mailet unless you are meeting -->
-         <!-- this requirement through other means (e.g. a XML/JDBCVirtualUserTable mailet) -->
+         <!-- this requirement through other means (e.g. a XML/JDBCVirtualUserTable defined in virtualusertable-store.xml) -->
          <mailet match="All" class="PostmasterAlias"/>
 
          <!-- Checks that the email Sender is associated with a valid domain. -->
@@ -180,6 +180,9 @@ Regards, Postmaster XXX.YYY
          -->
 
          <!--
+         
+         XMLVirtualUserTable is deprecated - Use the definitions in virtualusertable-store.xml
+         
          <mailet match="All" class="XMLVirtualUserTable">
             <!- 1:1 mapping ->
             <mapping>morgoth@middle-earth=sauron@mordor</mapping>
@@ -196,6 +199,7 @@ Regards, Postmaster XXX.YYY
                                   regex:(.*)-off@listserver:${1}-unsubscribe@listserver
             </mapping>
          </mailet>
+         
          -->
 
          <!-- Anti-spam processing -->
@@ -393,12 +397,11 @@ Regards, Postmaster XXX.YYY
          </mailet>
          -->
 
-
+         <!--  The VirtualUserTable will use the definitions found in virtualusertable-store.xml -->
          <mailet match="All" class="VirtualUserTable">
              <virtualusertable>DefaultVirtualUserTable</virtualusertable>
          </mailet>
 
-
          <!-- Is the recipient is for a local account, deliver it locally -->
          <mailet match="RecipientIsLocal" class="LocalDelivery"/>
 

Modified: james/server/trunk/spring-deployment/src/main/config/james/sqlResources.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/sqlResources.xml?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/src/main/config/james/sqlResources.xml (original)
+++ james/server/trunk/spring-deployment/src/main/config/james/sqlResources.xml Sat Sep  4 08:03:53 2010
@@ -897,9 +897,9 @@
 <sqlDefs name="org.apache.james.vut.JDBCVirtualUserTable">
 
     <!-- Statements used to check whether a particular message exists in this repository. -->
-    <sql name="selectMappings" db="derby">select VirtualUserTable.target_address,(VirtualUserTable."user" || '@' ||VirtualUserTable.domain) from VirtualUserTable, VirtualUserTable as VUTDomains where ((VirtualUserTable."user") like ? or (VirtualUserTable."user") like '\%' escape '\') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like '\%' escape '\')) order by 2 desc</sql>
-    <sql name="selectMappings">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user like '\%') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like '\%')) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1</sql>
-    <sql name="selectMappings" db="postgresql">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user like E'%') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like E'%')) order by (VirtualUserTable.user || '@' || VirtualUserTable.domain) desc limit 1</sql>
+    <sql name="selectMappings" db="derby">select VirtualUserTable.target_address,(VirtualUserTable."user" || '@' ||VirtualUserTable.domain) from VirtualUserTable, VirtualUserTable as VUTDomains where ((VirtualUserTable."user") like ? or (VirtualUserTable."user") = '*') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain = '*')) order by 2 desc</sql>
+    <sql name="selectMappings">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user = '*') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain = '*')) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1</sql>
+    <sql name="selectMappings" db="postgresql">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user = '*') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain = '*')) order by (VirtualUserTable.user || '@' || VirtualUserTable.domain) desc limit 1</sql>
     
     <sql name="selectUserDomainMapping" db="derby">select VirtualUserTable.target_address from VirtualUserTable where VirtualUserTable."user" = ? and VirtualUserTable.domain = ? </sql>
     <sql name="selectUserDomainMapping">select VirtualUserTable.target_address from VirtualUserTable where VirtualUserTable.user = ? and VirtualUserTable.domain = ? </sql>

Modified: james/server/trunk/user-api/src/main/java/org/apache/james/api/vut/VirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-api/src/main/java/org/apache/james/api/vut/VirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-api/src/main/java/org/apache/james/api/vut/VirtualUserTable.java (original)
+++ james/server/trunk/user-api/src/main/java/org/apache/james/api/vut/VirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -16,24 +16,19 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
-
 package org.apache.james.api.vut;
 
 import java.util.Collection;
 
-
 /**
- * Interface which should be implemented of classes which map recipients
- *
+ * Interface which should be implemented of classes which map recipients.
  */
 public interface VirtualUserTable {
     
     /**
      * The component role used by components implementing this service
      */
-    public static final String ROLE = "org.apache.james.api.vut.VirtualUserTable";
+    public static final String ROLE = VirtualUserTable.class.getName();
     
     /**
      * The prefix which is used for error mappings
@@ -51,6 +46,11 @@ public interface VirtualUserTable {
     public static final String ALIASDOMAIN_PREFIX = "domain:";
     
     /**
+     * The wildcard used for alias domain mappings
+     */
+    public final static String WILDCARD = "*";
+
+    /**
      * Return the mapped MailAddress for the given address. Return null if no 
      * matched mapping was found
      * 
@@ -59,4 +59,5 @@ public interface VirtualUserTable {
      * @throws ErrorMappingException get thrown if an error mapping was found
      */
     public Collection<String> getMappings(String user, String domain) throws ErrorMappingException;
+
 }

Modified: james/server/trunk/user-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/pom.xml?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-function/pom.xml (original)
+++ james/server/trunk/user-function/pom.xml Sat Sep  4 08:03:53 2010
@@ -59,13 +59,6 @@
             </goals>
           </execution>
         </executions>
-        <dependencies>
-          <dependency>
-          <groupId>org.apache.james</groupId>
-          <artifactId>james-server-user-api</artifactId>
-          <version>${pom.version}</version>
-        </dependency>
-    </dependencies>
       </plugin>
     </plugins>
   </build>

Modified: james/server/trunk/user-function/src/main/java/org/apache/james/vut/JDBCVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/src/main/java/org/apache/james/vut/JDBCVirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-function/src/main/java/org/apache/james/vut/JDBCVirtualUserTable.java (original)
+++ james/server/trunk/user-function/src/main/java/org/apache/james/vut/JDBCVirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -16,10 +16,6 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
-
-
 package org.apache.james.vut;
 
 import java.io.InputStream;
@@ -55,11 +51,9 @@ public class JDBCVirtualUserTable extend
 
     private DataSourceSelector datasources = null;
     private DataSource dataSourceComponent = null;
-    private String tableName = "VirtualUserTable";
     private String dataSourceName = null;
     
-    private static String WILDCARD = "%";
-
+    private String tableName = "VirtualUserTable";
 
     /**
      * Contains all of the sql strings for this component.
@@ -73,12 +67,9 @@ public class JDBCVirtualUserTable extend
     
     private FileSystem fileSystem;
 
-    protected String datasourceName;
-    
-    
-    
-    public void doConfigure(HierarchicalConfiguration arg0) throws ConfigurationException {
-        String destination = arg0.getString("[@destinationURL]",null);
+    public void doConfigure(HierarchicalConfiguration conf) throws ConfigurationException {
+        
+        String destination = conf.getString("[@destinationURL]",null);
     
         if (destination == null) {
             throw new ConfigurationException("destinationURL must configured");
@@ -107,17 +98,18 @@ public class JDBCVirtualUserTable extend
                 new StringBuffer(256)
                         .append("Malformed destinationURL - Must be of the format '")
                         .append("db://<data-source>'.  Was passed ")
-                        .append(arg0.getString("[@destinationURL]"));
+                        .append(conf.getString("[@destinationURL]"));
             throw new ConfigurationException(exceptionBuffer.toString());
         }
+        
         if (urlParams.size() >= 1) {
             dataSourceName = (String)urlParams.get(0);
         }
+        
         if (urlParams.size() >= 2) {
             tableName = (String)urlParams.get(1);
         }
 
-
         if (getLogger().isDebugEnabled()) {
             StringBuffer logBuffer =
                 new StringBuffer(128)
@@ -127,12 +119,13 @@ public class JDBCVirtualUserTable extend
             getLogger().debug(logBuffer.toString());
         }
     
-        sqlFileName = arg0.getString("sqlFile");
+        sqlFileName = conf.getString("sqlFile");
         
     }
 
     @PostConstruct
     public void init() throws Exception {
+        
         setDataSource(datasources.getDataSource(dataSourceName));
     
         StringBuffer logBuffer = null;
@@ -148,6 +141,7 @@ public class JDBCVirtualUserTable extend
             // Initialise the sql strings.
 
             InputStream sqlFile = null;
+            
             try {
                 sqlFile = fileSystem.getResource(sqlFileName);
             } catch (Exception e) {
@@ -178,9 +172,9 @@ public class JDBCVirtualUserTable extend
 
             // Check if the required table exists. If not, create it.
             DatabaseMetaData dbMetaData = conn.getMetaData();
+            
             // Need to ask in the case that identifiers are stored, ask the DatabaseMetaInfo.
             // Try UPPER, lower, and MixedCase, to see if the table is there.
-           
             if (!(theJDBCUtil.tableExists(dbMetaData, tableName))) {
             
                 // Users table doesn't exist - create it.
@@ -214,7 +208,6 @@ public class JDBCVirtualUserTable extend
         }
     };
     
-    
     public void setDataSource(DataSource dataSourceComponent) {
         this.dataSourceComponent = dataSourceComponent;
     }
@@ -281,16 +274,18 @@ public class JDBCVirtualUserTable extend
      * @see org.apache.james.impl.vut.AbstractVirtualUserTable#addMappingInternal(String, String, String)
      */
     public boolean addMappingInternal(String user, String domain, String regex) throws InvalidMappingException {
+
         String newUser = getUserString(user);
         String newDomain = getDomainString(domain);
         Collection<String> map =  getUserDomainMappings(newUser,newDomain);
 
         if (map != null && map.size() != 0) {
             map.add(regex);
-        
             return updateMapping(newUser,newDomain,VirtualUserTableUtil.CollectionToMapping(map));
         }
+    
         return addRawMapping(newUser,newDomain,regex);
+    
     }
     
     /**
@@ -517,5 +512,5 @@ public class JDBCVirtualUserTable extend
         }
         return null;
     }
+    
 }
-

Modified: james/server/trunk/user-function/src/main/java/org/apache/james/vut/XMLVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/src/main/java/org/apache/james/vut/XMLVirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-function/src/main/java/org/apache/james/vut/XMLVirtualUserTable.java (original)
+++ james/server/trunk/user-function/src/main/java/org/apache/james/vut/XMLVirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -16,12 +16,8 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
-
 package org.apache.james.vut;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -33,19 +29,22 @@ import org.apache.commons.configuration.
 import org.apache.james.impl.vut.AbstractVirtualUserTable;
 import org.apache.james.impl.vut.VirtualUserTableUtil;
 
+/**
+ *
+ */
 public class XMLVirtualUserTable extends AbstractVirtualUserTable {
+    
     /**
      * Holds the configured mappings
      */
     private Map<String,String> mappings;
     
-    private final static String WILDCARD = "*";
-
     /**
      * @see org.apache.james.impl.vut.AbstractVirtualUserTable#doConfigure(org.apache.commons.configuration.HierarchicalConfiguration)
      */
     @SuppressWarnings("unchecked")
     public void doConfigure(HierarchicalConfiguration arg0) throws ConfigurationException {
+
         List<String> mapConf = arg0.getList("mapping");
     
         mappings = new HashMap<String,String>();
@@ -58,9 +57,6 @@ public class XMLVirtualUserTable extends
             throw new ConfigurationException("No mapping configured");
         }
         
-        // Add domains of the mappings map to the domains List
-        Iterator<String> keys = mappings.keySet().iterator();
-        
     }
     
     /**
@@ -79,7 +75,6 @@ public class XMLVirtualUserTable extends
             return null;
         } else {
             return VirtualUserTableUtil.getTargetString(user, domain, mappings);
-    
         }
     }
 
@@ -114,7 +109,6 @@ public class XMLVirtualUserTable extends
         if ( mappings != null && mappings.size() > 0) {
             Map<String,Collection<String>> mappingsNew = new HashMap<String,Collection<String>>();
             Iterator<String> maps = mappings.keySet().iterator();
-                
             while (maps.hasNext()) {
                 String key = maps.next();
                 mappingsNew.put(key, VirtualUserTableUtil.mappingToCollection(mappings.get(key).toString()));
@@ -124,4 +118,5 @@ public class XMLVirtualUserTable extends
             return null;
         }
     }
+    
 }

Modified: james/server/trunk/user-function/src/test/java/org/apache/james/vut/JDBCVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/src/test/java/org/apache/james/vut/JDBCVirtualUserTableTest.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-function/src/test/java/org/apache/james/vut/JDBCVirtualUserTableTest.java (original)
+++ james/server/trunk/user-function/src/test/java/org/apache/james/vut/JDBCVirtualUserTableTest.java Sat Sep  4 08:03:53 2010
@@ -16,9 +16,6 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
-
 package org.apache.james.vut;
 
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
@@ -31,9 +28,9 @@ import org.apache.james.test.util.Util;
 public class JDBCVirtualUserTableTest extends AbstractVirtualUserTableTest {
     
     /**
-     * @see org.apache.james.vut.AbstractVirtualUserTableTest#getVirtalUserTable()
+     * @see org.apache.james.vut.AbstractVirtualUserTableTest#getVirtualUserTable()
      */
-    protected AbstractVirtualUserTable getVirtalUserTable() throws Exception {
+    protected AbstractVirtualUserTable getVirtualUserTable() throws Exception {
         JDBCVirtualUserTable mr = new JDBCVirtualUserTable();
         mr.setLog(new SimpleLog("MockLog"));
         mr.setDataSourceSelector(Util.getDataSourceSelector());

Modified: james/server/trunk/user-function/src/test/java/org/apache/james/vut/XMLVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/src/test/java/org/apache/james/vut/XMLVirtualUserTableTest.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-function/src/test/java/org/apache/james/vut/XMLVirtualUserTableTest.java (original)
+++ james/server/trunk/user-function/src/test/java/org/apache/james/vut/XMLVirtualUserTableTest.java Sat Sep  4 08:03:53 2010
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
 package org.apache.james.vut;
 
 import java.util.ArrayList;
@@ -31,37 +29,28 @@ import org.apache.james.api.vut.manageme
 import org.apache.james.impl.vut.AbstractVirtualUserTable;
 import org.apache.james.impl.vut.VirtualUserTableUtil;
 
-
 public class XMLVirtualUserTableTest extends AbstractVirtualUserTableTest {
+
     private DefaultConfigurationBuilder defaultConfiguration = new DefaultConfigurationBuilder();
     
-    
     @Override
     protected void setUp() throws Exception {
         defaultConfiguration.setDelimiterParsingDisabled(true);
-        
         super.setUp();
     }
 
-
-
-    protected AbstractVirtualUserTable getVirtalUserTable() throws Exception {
+    protected AbstractVirtualUserTable getVirtualUserTable() throws Exception {
         XMLVirtualUserTable mr = new XMLVirtualUserTable();
         mr.setDNSService(setUpDNSServer());
         mr.setLog(new SimpleLog("MockLog"));
-       
         return mr;
     }
     
-    
-
     /**
      * @see org.apache.james.vut.AbstractVirtualUserTableTest#addMapping(java.lang.String, java.lang.String, java.lang.String, int)
      */
     protected boolean addMapping(String user, String domain, String mapping, int type) throws InvalidMappingException {
-        if (user == null) user = "*";
-        if (domain == null) domain = "*";
-        
+
         Collection<String> mappings = virtualUserTable.getUserDomainMappings(user, domain);
 
         if (mappings == null) {
@@ -81,7 +70,7 @@ public class XMLVirtualUserTableTest ext
         }
         
         if (mappings.size() > 0) { 
-            defaultConfiguration.addProperty("mapping",user + "@" + domain +"=" + VirtualUserTableUtil.CollectionToMapping(mappings));
+            defaultConfiguration.addProperty("mapping",user + "@" + domain + "=" + VirtualUserTableUtil.CollectionToMapping(mappings));
         }
     
         try {
@@ -93,21 +82,21 @@ public class XMLVirtualUserTableTest ext
                 return true;
             }
         }
+            
         return true;
+    
     }
 
     /**
      * @see org.apache.james.vut.AbstractVirtualUserTableTest#removeMapping(java.lang.String, java.lang.String, java.lang.String, int)
      */
     protected boolean removeMapping(String user, String domain, String mapping, int type) throws InvalidMappingException {       
-        if (user == null) user = "*";
-        if (domain == null) domain = "*";
-        
+
         Collection<String> mappings = virtualUserTable.getUserDomainMappings(user, domain);
         
         if (mappings == null) {
             return false;
-        }  
+        }
     
         removeMappingsFromConfig(user,domain, mappings);
     
@@ -134,10 +123,11 @@ public class XMLVirtualUserTableTest ext
                return true;
            }
         }
+            
         return true;
+
     }
     
-    
     @SuppressWarnings("unchecked")
     private void removeMappingsFromConfig(String user, String domain, Collection<String> mappings) {
         List<String> confs = defaultConfiguration.getList("mapping");
@@ -152,7 +142,6 @@ public class XMLVirtualUserTableTest ext
         }
         // clear old values
         defaultConfiguration.clear();
-        
         // add stored mappings
         for (int i = 0; i < stored.size(); i++) {
             defaultConfiguration.addProperty("mapping", stored.get(i));

Modified: james/server/trunk/user-function/src/test/resources/sqlResources.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/src/test/resources/sqlResources.xml?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-function/src/test/resources/sqlResources.xml (original)
+++ james/server/trunk/user-function/src/test/resources/sqlResources.xml Sat Sep  4 08:03:53 2010
@@ -442,217 +442,6 @@
     </sql>
 </sqlDefs>
 
-<!-- SQL statements to support the JDBCSpoolRepository class -->
-<!-- -->
-<!-- The JDBCSpoolRepository allows James to use a JDBC compliant database -->
-<!-- to hold messages that are on the spool. -->
-<sqlDefs name="org.apache.james.mailrepository.JDBCSpoolRepository">
-
-    <!-- Statements used to check whether a particular message exists in this repository. -->
-    <sql name="checkMessageExistsSQL">SELECT count(*) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to update a message stored in this repository. -->
-    <sql name="updateMessageSQL">UPDATE ${table} SET message_state = ?, error_message = ?, sender = ?, recipients = ?, remote_host = ?, remote_addr = ?, last_updated = ? WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to update the body of a message stored in this repository. -->
-    <sql name="updateMessageBodySQL">UPDATE ${table} SET message_body = ? WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to update the attributes of a message stored in this repository. -->
-    <sql name="updateMessageAttributesSQL">UPDATE ${table} SET message_attributes = ? WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to insert a message into this repository. -->
-    <sql name="insertMessageSQL">INSERT INTO ${table} (message_name,
-    repository_name, message_state, error_message, sender, recipients,
-    remote_host, remote_addr, last_updated, message_body,
-    message_attributes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)</sql>
-
-    <!-- Statements used to retrieve a message stored in this repository. -->
-    <sql name="retrieveMessageSQL">SELECT message_state, error_message, sender, recipients, remote_host, remote_addr, last_updated FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to retrieve the body of a message stored in this repository. -->
-    <sql name="retrieveMessageBodySQL">SELECT message_body FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to retrieve the attributes of a message stored in this repository. -->
-    <sql name="retrieveMessageAttributesSQL">SELECT message_attributes FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    
-    <!-- Statements used to retrieve the size of the body of a message stored in this repository. -->
-    <!-- NOTE: This statement is optional and need not be implemented for a particular database to be supported. -->
-    <sql name="retrieveMessageBodySizeSQL" db="mssql">SELECT datalength(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="mysql">SELECT length(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="hypersonic">SELECT length(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="hsqldb">SELECT length(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="postgresql">SELECT length(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="oracle">SELECT dbms_lob.getlength(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="db2">SELECT length(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-    <sql name="retrieveMessageBodySizeSQL" db="ingres">SELECT length(message_body) FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to delete a message stored in this repository. -->
-    <sql name="removeMessageSQL">DELETE FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
-
-    <!-- Statements used to list all messages stored in this repository. -->
-    <sql name="listMessagesSQL">SELECT message_name, message_state, last_updated, error_message FROM ${table} WHERE repository_name = ? ORDER BY last_updated ASC</sql>
-
-    <!-- Statements used to create the table associated with this class. -->
-    <sql name="createTable" db="hypersonic">
-        CREATE TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (255) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) NULL ,
-            sender varchar (255) NULL ,
-            recipients varchar NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body varchar NOT NULL ,
-            message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="hsqldb">
-        CREATE CACHED TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (255) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) NULL ,
-            sender varchar (255) NULL ,
-            recipients varchar NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body varchar NOT NULL ,
-            message_attributes varchar NULL ,
-            last_updated timestamp NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="mysql">
-        CREATE TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (100) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) NULL ,
-            sender varchar (255) NULL ,
-            recipients text NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body longblob NOT NULL ,
-            message_attributes longblob NULL ,
-            last_updated datetime NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="mssql">
-        CREATE TABLE [${table}] (
-            [message_name] [varchar] (200) NOT NULL,
-            [repository_name] [varchar] (255) NOT NULL,
-            [message_state] [varchar] (30) NOT NULL ,
-            [error_message] [varchar] (1000) NULL ,
-            [sender] [varchar] (255) NULL ,
-            [recipients] [text] NOT NULL ,
-            [remote_host] [varchar] (255) NOT NULL ,
-            [remote_addr] [varchar] (20) NOT NULL ,
-            [message_body] [image] NOT NULL ,
-            [message_attributes] [image] NULL ,
-            [last_updated] [datetime] NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="oracle">
-        CREATE TABLE ${table} (
-            message_name varchar2(200) NOT NULL ,
-            repository_name varchar2(255) NOT NULL ,
-            message_state varchar2(30) NOT NULL ,
-            error_message varchar2(200) NULL ,
-            sender varchar2(255) NULL ,
-            recipients varchar2(1000) NOT NULL ,
-            remote_host varchar2(255) NOT NULL ,
-            remote_addr varchar2(20) NOT NULL ,
-            message_body blob NOT NULL ,
-            message_attributes blob NULL ,
-            last_updated date NOT NULL ,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="postgresql">
-        CREATE TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (255) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) NULL ,
-            sender varchar (255) NULL ,
-            recipients text NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body bytea NOT NULL ,
-            message_attributes bytea NULL ,
-            last_updated timestamp NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="sapdb">
-        CREATE TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (255) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) NULL ,
-            sender varchar (255) NULL ,
-            recipients long NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body long byte NOT NULL ,
-            message_attributes long byte NULL ,
-            last_updated date NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="db2">
-        CREATE TABLE ${table} (
-            message_name varchar(200) NOT NULL ,
-            repository_name varchar(255) NOT NULL ,
-            message_state varchar(30) NOT NULL ,
-            error_message varchar(200) ,
-            sender varchar(255) ,
-            recipients varchar(1000) NOT NULL ,
-            remote_host varchar(100) NOT NULL ,
-            remote_addr varchar(20) NOT NULL ,
-            message_body blob NOT NULL ,
-            message_attributes blob ,
-            last_updated timestamp NOT NULL ,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-    <sql name="createTable" db="ingres">
-        CREATE TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (255) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) ,
-            sender varchar (255) ,
-            recipients LONG VARCHAR NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body LONG BYTE NOT NULL ,
-            message_attributes LONG BYTE ,
-            last_updated DATE NOT NULL
-        )
-    </sql>
-    <sql name="createTable" db="derby">
-        CREATE TABLE ${table} (
-            message_name varchar (200) NOT NULL,
-            repository_name varchar (255) NOT NULL,
-            message_state varchar (30) NOT NULL ,
-            error_message varchar (200) ,
-            sender varchar (255) ,
-            recipients long varchar NOT NULL ,
-            remote_host varchar (255) NOT NULL ,
-            remote_addr varchar (20) NOT NULL ,
-            message_body blob NOT NULL ,
-            message_attributes blob ,
-            last_updated timestamp NOT NULL,
-            PRIMARY KEY (repository_name, message_name)
-        )
-    </sql>
-</sqlDefs>
 
 <!-- SQL statements to support the BayesianAnalysis and the BayesianAnalysisFeeder mailets -->
 <!-- -->
@@ -900,6 +689,86 @@
 
 </sqlDefs>
 
+<sqlDefs name="NetworkWhiteList">
+
+    <sql name="networkWhiteListTableName">networkWhitelist</sql>
+
+    <!-- Statements used to retrieve a single entry. -->
+    <sql name="selectNetwork">SELECT network FROM networkWhitelist where (localUser=? AND localHost=?)</sql>
+
+    <!-- Statements used to create the "whitelist" table. -->
+    <sql name="createNetworkWhiteListTable" db="hypersonic">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL,
+            PRIMARY KEY (localUser, localHost)
+        )    </sql>
+    <sql name="createNetworkWhiteListTable" db="hsqldb">
+        CREATE CACHED TABLE ${table} (
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )    </sql>
+    <sql name="createNetworkWhiteListTable" db="mysql">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) character set latin1 NOT NULL,
+            network varchar (255) NOT NULL
+        ) TYPE=InnoDB
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="mssql">
+        CREATE TABLE [networkWhitelist] (
+            [localUser] [varchar] (64) NOT NULL,
+            [localHost] [varchar] (255) NOT NULL,
+            [network] [varchar] (255) NOT NULL
+        )
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="oracle">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="postgresql">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="sapdb">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="db2">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="ingres">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )
+    </sql>
+    <sql name="createNetworkWhiteListTable" db="derby">
+        CREATE TABLE networkWhitelist (
+            localUser varchar (64) NOT NULL,
+            localHost varchar (255) NOT NULL,
+            network varchar (255) NOT NULL
+        )
+    </sql>
+
+</sqlDefs>
 <!-- SQL statements to support the GreyList Handler-->
 <!-- -->
 <sqlDefs name="GreyList">
@@ -1028,8 +897,9 @@
 <sqlDefs name="org.apache.james.vut.JDBCVirtualUserTable">
 
     <!-- Statements used to check whether a particular message exists in this repository. -->
-    <sql name="selectMappings" db="derby">select VirtualUserTable.target_address,(VirtualUserTable."user" || '@' ||VirtualUserTable.domain) from VirtualUserTable, VirtualUserTable as VUTDomains where ((VirtualUserTable."user") like ? or (VirtualUserTable."user") like '\%' escape '\') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like '\%' escape '\')) order by 2 desc</sql>
-    <sql name="selectMappings">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user like '\%') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like '\%')) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1</sql>
+    <sql name="selectMappings" db="derby">select VirtualUserTable.target_address,(VirtualUserTable."user" || '@' ||VirtualUserTable.domain) from VirtualUserTable, VirtualUserTable as VUTDomains where ((VirtualUserTable."user") like ? or (VirtualUserTable."user") = '*') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain = '*')) order by 2 desc</sql>
+    <sql name="selectMappings">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user = '*') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain = '*')) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1</sql>
+    <sql name="selectMappings" db="postgresql">select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user = '*') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain = '*')) order by (VirtualUserTable.user || '@' || VirtualUserTable.domain) desc limit 1</sql>
     
     <sql name="selectUserDomainMapping" db="derby">select VirtualUserTable.target_address from VirtualUserTable where VirtualUserTable."user" = ? and VirtualUserTable.domain = ? </sql>
     <sql name="selectUserDomainMapping">select VirtualUserTable.target_address from VirtualUserTable where VirtualUserTable.user = ? and VirtualUserTable.domain = ? </sql>

Modified: james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/AbstractVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/AbstractVirtualUserTable.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/AbstractVirtualUserTable.java (original)
+++ james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/AbstractVirtualUserTable.java Sat Sep  4 08:03:53 2010
@@ -16,9 +16,6 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
-
 package org.apache.james.impl.vut;
 
 import java.net.InetAddress;
@@ -27,7 +24,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.logging.Logger;
 
@@ -60,7 +56,9 @@ public abstract class AbstractVirtualUse
        
     // TODO: Should we use true or false as default ?
     private boolean recursive = true;
+
     private HierarchicalConfiguration config;
+    
     private Log logger;
 
     @Resource(name="dnsserver")
@@ -82,16 +80,13 @@ public abstract class AbstractVirtualUse
         this.logger = logger;
     }
     
-    
     protected void doConfigure(HierarchicalConfiguration conf) throws ConfigurationException {
-        
     }
     
     public void setRecursiveMapping(boolean recursive) {
         this.recursive = recursive;
     }
     
-    
     /**
      * Set the mappingLimit
      * 
@@ -110,8 +105,7 @@ public abstract class AbstractVirtualUse
         return getMappings(user,domain,mappingLimit);
     }
     
-
-    public Collection<String> getMappings(String user,String domain,int mappingLimit) throws ErrorMappingException {
+    public Collection<String> getMappings(String user, String domain, int mappingLimit) throws ErrorMappingException {
 
         // We have to much mappings throw ErrorMappingException to avoid infinity loop
         if (mappingLimit == 0) throw new ErrorMappingException("554 Too many mappings to process");
@@ -186,8 +180,11 @@ public abstract class AbstractVirtualUse
                     }
                 } 
             }
+        
             return mappings;
+        
         }
+        
         return null;
     }
     
@@ -274,6 +271,7 @@ public abstract class AbstractVirtualUse
      * @see org.apache.james.api.vut.management.VirtualUserTableManagement#addMapping(java.lang.String, java.lang.String, java.lang.String)
      */
     public synchronized boolean addMapping(String user, String domain, String mapping) throws InvalidMappingException {
+
         String map = mapping.toLowerCase();
         
         if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
@@ -286,12 +284,14 @@ public abstract class AbstractVirtualUse
         } else {
             return addAddressMapping(user,domain,map);
         }
+        
     }
     
     /**
      * @see org.apache.james.api.vut.management.VirtualUserTableManagement#removeMapping(java.lang.String, java.lang.String, java.lang.String)
      */
     public synchronized boolean removeMapping(String user, String domain, String mapping) throws InvalidMappingException {
+
         String map = mapping.toLowerCase();
     
         if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
@@ -304,6 +304,7 @@ public abstract class AbstractVirtualUse
         } else {
             return removeAddressMapping(user,domain,map);
         }
+        
     }
     
     /**
@@ -321,38 +322,15 @@ public abstract class AbstractVirtualUse
     }
     
     
-   private boolean checkMapping(String user,String domain, String mapping) {
+    private boolean checkMapping(String user,String domain, String mapping) {
        Collection<String> mappings = getUserDomainMappings(user,domain);
        if (mappings != null && mappings.contains(mapping)) {
            return false;
        } else {
            return true;
        }
-   }
-
- 
-    /**
-     * Return a List which holds all ipAddress of the domains in the given List
-     * 
-     * @param domains List of domains
-     * @return domainIP List of ipaddress for domains
-     */
-    private static List<String> getDomainsIP(List<String> domains,DNSService dns,Log log) {
-        List<String> domainIP = new ArrayList<String>();
-        if (domains.size() > 0 ) {
-            for (int i = 0; i < domains.size(); i++) {
-                List<String> domList = getDomainIP(domains.get(i).toString(),dns,log);
-                
-                for(int i2 = 0; i2 < domList.size();i2++) {
-                    if(domainIP.contains(domList.get(i2)) == false) {
-                        domainIP.add(domList.get(i2));
-                    }
-                }
-            }
-        }
-        return domainIP;    
     }
-    
+
     /**
      * @see #getDomainsIP(List, DNSService, Logger)
      */
@@ -402,8 +380,9 @@ public abstract class AbstractVirtualUse
      * @param domain the domain
      * @return the mappings
      */
-    private String mapAddress(String user,String domain) {
-       String mappings = mapAddressInternal(user, domain);
+    private String mapAddress(String user, String domain) {
+
+        String mappings = mapAddressInternal(user, domain);
 
         // check if we need to sort
         // TODO: Maybe we should just return the aliasdomain mapping
@@ -486,4 +465,5 @@ public abstract class AbstractVirtualUse
      *    <code>MailAddress</code>es to <code>String</code>s.
      */
     protected abstract String mapAddressInternal(String user, String domain);
+    
 }

Modified: james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/VirtualUserTableUtil.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/VirtualUserTableUtil.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/VirtualUserTableUtil.java (original)
+++ james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/VirtualUserTableUtil.java Sat Sep  4 08:03:53 2010
@@ -16,9 +16,6 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
-
-
 package org.apache.james.impl.vut;
 
 import java.util.ArrayList;
@@ -44,8 +41,8 @@ public class VirtualUserTableUtil {
 
     private VirtualUserTableUtil() {}
     
-
-    public static String QUERY = "select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user like '\\%') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like '\\%' and VUTDomains.domain like ?)) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1";
+    // @deprecated QUERY is deprecated - SQL queries are now located in sqlResources.xml
+    public static String QUERY = "select VirtualUserTable.target_address from VirtualUserTable, VirtualUserTable as VUTDomains where (VirtualUserTable.user like ? or VirtualUserTable.user like '\\%') and (VirtualUserTable.domain like ? or (VirtualUserTable.domain like '%*%' and VUTDomains.domain like ?)) order by concat(VirtualUserTable.user,'@',VirtualUserTable.domain) desc limit 1";
     
     /**
      * Processes regex virtual user mapping
@@ -58,7 +55,7 @@ public class VirtualUserTableUtil {
      * @param targetString a String specifying the mapping
      * @throws MalformedPatternException 
      */
-     public static String regexMap( MailAddress address, String targetString) throws MalformedPatternException {
+    public static String regexMap( MailAddress address, String targetString) throws MalformedPatternException {
         String result = null;
         int identifierLength = VirtualUserTable.REGEX_PREFIX.length();
 
@@ -85,16 +82,16 @@ public class VirtualUserTableUtil {
             result = XMLResources.replaceParameters(targetString.substring(msgPos + 1), parameters);
         }    
         return result;
-    }
+     }
      
-     /**
-      * Returns the real recipient given a virtual username and domain.
-      * 
-      * @param user the virtual user
-      * @param domain the virtual domain
-      * @return the real recipient address, or <code>null</code> if no mapping exists
-      */
-     public static String getTargetString(String user, String domain, Map mappings) {
+    /**
+     * Returns the real recipient given a virtual username and domain.
+     * 
+     * @param user the virtual user
+     * @param domain the virtual domain
+     * @return the real recipient address, or <code>null</code> if no mapping exists
+     */
+    public static String getTargetString(String user, String domain, Map mappings) {
          StringBuffer buf;
          String target;
          
@@ -162,7 +159,7 @@ public class VirtualUserTableUtil {
      */
      public static Collection<String> getMappings(String rawMapping) {
         return mappingToCollection(rawMapping);
-    }
+     }
      
      /**
       * Convert a raw mapping String to a Collection
@@ -180,9 +177,8 @@ public class VirtualUserTableUtil {
              map.add(raw);
          }
          return map;
-    }
+     }
      
-
      /**
       * Convert a Collection which holds mappings to a raw mapping String
       * 
@@ -203,4 +199,5 @@ public class VirtualUserTableUtil {
          }  
          return mapping.toString();  
     }
+     
 }

Modified: james/server/trunk/user-library/src/test/java/org/apache/james/vut/AbstractVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/user-library/src/test/java/org/apache/james/vut/AbstractVirtualUserTableTest.java?rev=992557&r1=992556&r2=992557&view=diff
==============================================================================
--- james/server/trunk/user-library/src/test/java/org/apache/james/vut/AbstractVirtualUserTableTest.java (original)
+++ james/server/trunk/user-library/src/test/java/org/apache/james/vut/AbstractVirtualUserTableTest.java Sat Sep  4 08:03:53 2010
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
 package org.apache.james.vut;
 
 import java.net.InetAddress;
@@ -25,6 +24,8 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.Map;
 
+import junit.framework.TestCase;
+
 import org.apache.james.api.dnsservice.DNSService;
 import org.apache.james.api.dnsservice.TemporaryResolutionException;
 import org.apache.james.api.vut.ErrorMappingException;
@@ -33,35 +34,35 @@ import org.apache.james.api.vut.manageme
 import org.apache.james.impl.vut.AbstractVirtualUserTable;
 import org.apache.james.lifecycle.LifecycleUtil;
 
-import junit.framework.TestCase;
-
 public abstract class AbstractVirtualUserTableTest extends TestCase {
 
     protected AbstractVirtualUserTable virtualUserTable;
+    
     protected final static int REGEX_TYPE = 0;
     protected final static int ERROR_TYPE = 1;
     protected final static int ADDRESS_TYPE = 2;
     protected final static int ALIASDOMAIN_TYPE = 3;
-    
+
     protected void setUp() throws Exception {
-        virtualUserTable = getVirtalUserTable();
+        virtualUserTable = getVirtualUserTable();
     }
-    
+
     protected void tearDown() throws Exception {
-        Map<String,Collection<String>> mappings = virtualUserTable.getAllMappings();
         
+        Map<String,Collection<String>> mappings = virtualUserTable.getAllMappings();
+
         if (mappings != null) {
             Iterator<String> mappingsIt = virtualUserTable.getAllMappings().keySet().iterator();
-    
-    
+
+
             while(mappingsIt.hasNext()) {
                 String key = mappingsIt.next().toString();
                 String args[] = key.split("@");
-        
+
                 Collection<String> map = mappings.get(key);
-        
+
                 Iterator<String> mapIt = map.iterator();
-        
+
                 while (mapIt.hasNext()) {
                     try {
                         removeMapping(args[0], args[1], mapIt.next().toString());
@@ -71,9 +72,11 @@ public abstract class AbstractVirtualUse
                 }
             }
         }
+        
         LifecycleUtil.dispose(virtualUserTable);
-    }
     
+    }
+
     private void removeMapping(String user, String domain, String rawMapping) throws InvalidMappingException {
         if (rawMapping.startsWith(VirtualUserTable.ERROR_PREFIX)) {
             removeMapping(user, domain, rawMapping.substring(VirtualUserTable.ERROR_PREFIX.length()), ERROR_TYPE);
@@ -85,73 +88,70 @@ public abstract class AbstractVirtualUse
             removeMapping(user, domain, rawMapping, ADDRESS_TYPE);
         }
     }
-    
-    protected abstract AbstractVirtualUserTable getVirtalUserTable() throws Exception;
-    
+
+    protected abstract AbstractVirtualUserTable getVirtualUserTable() throws Exception;
+
     protected abstract boolean addMapping(String user , String domain, String mapping,int type)throws InvalidMappingException;
-    
+
     protected abstract boolean removeMapping(String user, String domain, String mapping, int type) throws InvalidMappingException;
-    
- 
+
     protected DNSService setUpDNSServer() {
+        
         DNSService dns = new DNSService() {
             public String getHostName(InetAddress inet) {
                 return "test";
             }
-            
             public InetAddress[] getAllByName(String name) throws UnknownHostException {
                 return new InetAddress[] { InetAddress.getByName("127.0.0.1")};        
             }
-            
             public InetAddress getLocalHost() throws UnknownHostException {
                 return InetAddress.getLocalHost();
             }
-
-            
             @SuppressWarnings("unchecked")
             public Collection findMXRecords(String hostname)
-                    throws TemporaryResolutionException {
+            throws TemporaryResolutionException {
                 throw new UnsupportedOperationException("Should never be called");
             }
-
             @SuppressWarnings("unchecked")
             public Collection findTXTRecords(String hostname) {
                 throw new UnsupportedOperationException("Should never be called");
             }
-
             public InetAddress getByName(String host)
-                    throws UnknownHostException {
+            throws UnknownHostException {
                 throw new UnsupportedOperationException("Should never be called");
             }
-
             @SuppressWarnings("unchecked")
             public Iterator getSMTPHostAddresses(String domainName)
-                    throws TemporaryResolutionException {
+            throws TemporaryResolutionException {
                 throw new UnsupportedOperationException("Should never be called");
             }
         };
+        
         return dns;
-    }
     
+    }
+
     public void testStoreAndRetrieveRegexMapping() throws ErrorMappingException {
+        
         String user = "test";
         String domain = "localhost";
         String regex = "(.*):{$1}@localhost";
         String regex2 = "(.+):{$1}@test"; 
         String invalidRegex = ".*):";
         boolean catched = false;
-        try {
         
+        try {
+
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
-        
+
             assertTrue("Added virtual mapping", addMapping(user, domain, regex, REGEX_TYPE));
             assertTrue("Added virtual mapping", addMapping(user, domain, regex2, REGEX_TYPE));
 
             assertEquals("Two mappings",virtualUserTable.getMappings(user, domain).size(), 2);           
             assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
-           
+
             assertTrue("remove virtual mapping", removeMapping(user, domain, regex, REGEX_TYPE));
-        
+
             try {
                 assertTrue("Added virtual mapping", virtualUserTable.addRegexMapping(user, domain, invalidRegex));
             } catch (InvalidMappingException e) {
@@ -161,34 +161,35 @@ public abstract class AbstractVirtualUse
 
             assertTrue("remove virtual mapping", removeMapping(user, domain, regex2, REGEX_TYPE));
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
-            
+
             assertNull("No mappings",virtualUserTable.getAllMappings());
-            
+
         } catch (InvalidMappingException e) {
             fail("Storing failed");
         }
-    
+
     }
-    
+
 
     public void testStoreAndRetrieveAddressMapping() throws ErrorMappingException {
+        
         String user = "test";
         String domain = "localhost";
         String address = "test@localhost2";
         String address2 = "test@james";
-        
+
         try {
-        
+
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
-        
+
             assertTrue("Added virtual mapping", addMapping(user, domain, address, ADDRESS_TYPE));
             assertTrue("Added virtual mapping", addMapping(user, domain, address2, ADDRESS_TYPE));
 
             assertEquals("Two mappings",virtualUserTable.getMappings(user, domain).size(),2);
             assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
-        
+
             assertTrue("remove virtual mapping", removeMapping(user, domain, address, ADDRESS_TYPE));
-        
+
             /* TEMPORARILY REMOVE JDBC specific test 
             String invalidAddress= ".*@localhost2:";
             boolean catched = false;
@@ -200,30 +201,31 @@ public abstract class AbstractVirtualUse
                 } 
                 assertTrue("Invalid Mapping throw exception" , catched);
             }         
-            */
-            
+             */
+
             assertTrue("remove virtual mapping", removeMapping(user, domain, address2, ADDRESS_TYPE));
-            
+
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
             assertNull("No mappings",virtualUserTable.getAllMappings());
-            
+
         } catch (InvalidMappingException e) {
             fail("Storing failed");
         }
-        
-    
+
+
     }
 
-    public void testStoreAndRetrieveErrorMapping() throws ErrorMappingException { 
+    public void testStoreAndRetrieveErrorMapping() throws ErrorMappingException {
+        
         String user = "test";
         String domain = "localhost";
         String error = "bounce!";
         boolean catched = false;
-        
+
         try {
-        
+
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
-        
+
             assertTrue("Added virtual mapping", addMapping(user, domain, error, ERROR_TYPE));
             assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
 
@@ -237,44 +239,44 @@ public abstract class AbstractVirtualUse
             assertTrue("remove virtual mapping", removeMapping(user, domain, error, ERROR_TYPE));
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
             assertNull("No mappings",virtualUserTable.getAllMappings());
-            
+
         } catch (InvalidMappingException e) {
-             fail("Storing failed");
+            fail("Storing failed");
         }
 
     }
-    
-    public void testStoreAndRetrieveWildCardAddressMapping() throws ErrorMappingException {        
+
+    public void testStoreAndRetrieveWildCardAddressMapping() throws ErrorMappingException {
+
         String user = "test";
         String user2 = "test2";
         String domain = "localhost";
         String address = "test@localhost2";
         String address2 = "test@james";
 
+        try {
 
-       try {
-                 
-            assertNull("No mapping",virtualUserTable.getMappings(user, domain));
-        
-            assertTrue("Added virtual mapping", addMapping(null, domain, address, ADDRESS_TYPE));
+            assertNull("No mapping", virtualUserTable.getMappings(user, domain));
+
+            assertTrue("Added virtual mapping", addMapping(VirtualUserTable.WILDCARD, domain, address, ADDRESS_TYPE));
             assertTrue("Added virtual mapping", addMapping(user, domain, address2, ADDRESS_TYPE));
 
-          
-            assertTrue("One mappings",virtualUserTable.getMappings(user, domain).size() == 1);
-            assertTrue("One mappings",virtualUserTable.getMappings(user2, domain).size() == 1);
-           
+            assertTrue("One mappings", virtualUserTable.getMappings(user, domain).size() == 1);
+            assertTrue("One mappings", virtualUserTable.getMappings(user2, domain).size() == 1);
+
             assertTrue("remove virtual mapping", removeMapping(user, domain, address2, ADDRESS_TYPE));
-            assertTrue("remove virtual mapping", removeMapping(null, domain, address, ADDRESS_TYPE));
-            assertNull("No mapping",virtualUserTable.getMappings(user, domain));
-            assertNull("No mapping",virtualUserTable.getMappings(user2, domain));
-      
+            assertTrue("remove virtual mapping", removeMapping(VirtualUserTable.WILDCARD, domain, address, ADDRESS_TYPE));
+            assertNull("No mapping", virtualUserTable.getMappings(user, domain));
+            assertNull("No mapping", virtualUserTable.getMappings(user2, domain));
+
         } catch (InvalidMappingException e) {
-           fail("Storing failed");
+            fail("Storing failed");
         }
-    
+
     }
-    
+
     public void testRecursiveMapping() throws ErrorMappingException {
+        
         String user1 = "user1";
         String user2 = "user2";
         String user3 = "user3";
@@ -282,12 +284,12 @@ public abstract class AbstractVirtualUse
         String domain2 = "domain2";
         String domain3 = "domain3";
         boolean exception1 = false;
-    
+
         virtualUserTable.setRecursiveMapping(true);
-       
+
         try {
             assertNull("No mappings",virtualUserTable.getAllMappings());
-     
+
             assertTrue("Add mapping", addMapping(user1, domain1, user2 + "@" + domain2, ADDRESS_TYPE));
             assertTrue("Add mapping", addMapping(user2, domain2, user3 + "@" + domain3, ADDRESS_TYPE));
             assertEquals("Recursive mapped", virtualUserTable.getMappings(user1, domain1).iterator().next(),user3 + "@" + domain3);
@@ -299,38 +301,42 @@ public abstract class AbstractVirtualUse
                 exception1 = true;
             }
             assertTrue("Exception thrown on to many mappings", exception1);
-            
+
             // disable recursive mapping
             virtualUserTable.setRecursiveMapping(false);
             assertEquals("Not recursive mapped", virtualUserTable.getMappings(user1, domain1).iterator().next(),user2 + "@" + domain2);
-            
+
         } catch (InvalidMappingException e) {
             fail("Storing failed");
         }
     }
-   
-    
+
+
     public void testAliasDomainMapping() throws ErrorMappingException {
+        
         String domain = "realdomain";
         String aliasDomain = "aliasdomain";
         String user = "user";
         String user2 = "user2";
-    
+
         assertNull("No mappings",virtualUserTable.getAllMappings());
-        try {
-            assertTrue("Add mapping",addMapping(null, aliasDomain, user2 + "@" + domain, ADDRESS_TYPE));
-            assertTrue("Add aliasDomain mapping", addMapping(null, aliasDomain, domain, ALIASDOMAIN_TYPE));
         
+        try {
+            
+            assertTrue("Add mapping",addMapping(VirtualUserTable.WILDCARD, aliasDomain, user2 + "@" + domain, ADDRESS_TYPE));
+            assertTrue("Add aliasDomain mapping", addMapping(VirtualUserTable.WILDCARD, aliasDomain, domain, ALIASDOMAIN_TYPE));
+
             Iterator<String> mappings = virtualUserTable.getMappings(user, aliasDomain).iterator();
             assertEquals("Domain mapped as first ", mappings.next(), user + "@" + domain);
             assertEquals("Address mapped as second ", mappings.next(), user2 + "@" + domain);
-            
-            assertTrue("Remove mapping", removeMapping(null, aliasDomain, user2 + "@" + domain, ADDRESS_TYPE));
-            assertTrue("Remove aliasDomain mapping", removeMapping(null, aliasDomain, domain, ALIASDOMAIN_TYPE));
-        
+
+            assertTrue("Remove mapping", removeMapping(VirtualUserTable.WILDCARD, aliasDomain, user2 + "@" + domain, ADDRESS_TYPE));
+            assertTrue("Remove aliasDomain mapping", removeMapping(VirtualUserTable.WILDCARD, aliasDomain, domain, ALIASDOMAIN_TYPE));
+
         } catch (InvalidMappingException e) {
             fail("Storing failed");
         }
+
     }
-    
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org