Author: norman
Date: Sun Nov 19 13:51:01 2006
New Revision: 476937

URL: http://svn.apache.org/viewvc?view=rev&rev=476937
Log:
Fix a bug on detecting duplicate mappings. See JAMES-706

Modified:
    
james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
    james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java
    
james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java

Modified: 
james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java?view=diff&rev=476937&r1=476936&r2=476937
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
 (original)
+++ 
james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
 Sun Nov 19 13:51:01 2006
@@ -36,7 +36,7 @@
  * Management for VirtualUserTables
  * 
  */
-public class VirtualUserTableManagement implements Serviceable, 
VirtualUserTableManagementService {
+public class VirtualUserTableManagement implements Serviceable, 
VirtualUserTableManagementService, VirtualUserTableManagmentMBean {
 
     VirtualUserTableStore store;
     org.apache.james.services.VirtualUserTableManagement defaultVUT;    

Modified: 
james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java?view=diff&rev=476937&r1=476936&r2=476937
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTable.java 
Sun Nov 19 13:51:01 2006
@@ -37,6 +37,16 @@
     public static final String ROLE = 
"org.apache.james.services.VirtualUserTable";
     
     /**
+     * The prefix which is used for error mappings
+     */
+    public static final String ERROR_PREFIX = "error:";
+    
+    /**
+     * The prefix which is used for regex prefix
+     */
+    public static final String REGEX_PREFIX = "regex:";
+    
+    /**
      * Return the mapped MailAddress for the given address. Return null if no 
      * matched mapping was found
      * 

Modified: 
james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java?view=diff&rev=476937&r1=476936&r2=476937
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java 
(original)
+++ 
james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java 
Sun Nov 19 13:51:01 2006
@@ -73,8 +73,8 @@
         // Only non-null mappings are translated
         if (targetString != null) {
             Collection mappings = new ArrayList();
-            if (targetString.startsWith("error:")) {
-                throw new 
ErrorMappingException(targetString.substring("error:".length()));
+            if (targetString.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+                throw new 
ErrorMappingException(targetString.substring(VirtualUserTable.ERROR_PREFIX.length()));
 
             } else {
                 Iterator map= 
VirtualUserTableUtil.getMappings(targetString).iterator();
@@ -83,7 +83,7 @@
                     String target;
                     String targetAddress = map.next().toString();
 
-                    if (targetAddress.startsWith("regex:")) {
+                    if 
(targetAddress.startsWith(VirtualUserTable.REGEX_PREFIX)) {
                         try {
                             targetAddress = VirtualUserTableUtil.regexMap(new 
MailAddress(user,domain), targetAddress);
                         } catch (MalformedPatternException e) {
@@ -129,7 +129,7 @@
         
         if (checkMapping(user,domain,regex) == true) {
             getLogger().info("Add regex mapping => " + regex + " for user: " + 
user + " domain: " + domain);
-            return addMappingInternal(user, domain, "regex:" + regex);
+            return addMappingInternal(user, domain, 
VirtualUserTable.REGEX_PREFIX + regex);
         } else {
             return false;
         }
@@ -142,7 +142,7 @@
      */
     public synchronized boolean removeRegexMapping(String user, String domain, 
String regex) throws InvalidMappingException {
         getLogger().info("Remove regex mapping => " + regex + " for user: " + 
user + " domain: " + domain);
-        return removeMappingInternal(user,domain,"regex:" + regex);
+        return removeMappingInternal(user,domain,VirtualUserTable.REGEX_PREFIX 
+ regex);
     }
     
     /**
@@ -182,7 +182,7 @@
     public synchronized boolean addErrorMapping(String user, String domain, 
String error) throws InvalidMappingException {   
         if (checkMapping(user,domain,error) == true) {          
             getLogger().info("Add error mapping => " + error + " for user: " + 
user + " domain: " + domain);
-            return addMappingInternal(user,domain, "error:" + error);
+            return addMappingInternal(user,domain, 
VirtualUserTable.ERROR_PREFIX + error);
         } else {
             return false;
         } 
@@ -193,7 +193,7 @@
      */
     public synchronized boolean removeErrorMapping(String user, String domain, 
String error) throws InvalidMappingException {
         getLogger().info("Remove error mapping => " + error + " for user: " + 
user + " domain: " + domain);     
-        return removeMappingInternal(user,domain,"error:" + error);
+        return removeMappingInternal(user,domain,VirtualUserTable.ERROR_PREFIX 
+ error);
     }
 
 
@@ -202,13 +202,11 @@
      */
     public boolean addMapping(String user, String domain, String mapping) 
throws InvalidMappingException {
         String map = mapping.toLowerCase();
-        String errorPrefix = "error:";
-        String regexPrefix = "regex:";
     
-        if (map.startsWith(errorPrefix)) {
-            return 
addErrorMapping(user,domain,map.substring(errorPrefix.length()));
-        } else if (map.startsWith(regexPrefix)) {
-            return 
addRegexMapping(user,domain,map.substring(regexPrefix.length()));
+        if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+            return 
addErrorMapping(user,domain,map.substring(VirtualUserTable.ERROR_PREFIX.length()));
+        } else if (map.startsWith(VirtualUserTable.REGEX_PREFIX)) {
+            return 
addRegexMapping(user,domain,map.substring(VirtualUserTable.REGEX_PREFIX.length()));
         } else {
             return addAddressMapping(user,domain,map);
         }
@@ -219,13 +217,11 @@
      */
     public boolean removeMapping(String user, String domain, String mapping) 
throws InvalidMappingException {
         String map = mapping.toLowerCase();
-        String errorPrefix = "error:";
-        String regexPrefix = "regex:";
     
-        if (map.startsWith(errorPrefix)) {
-            return 
removeErrorMapping(user,domain,map.substring(errorPrefix.length()));
-        } else if (map.startsWith(regexPrefix)) {
-            return 
removeRegexMapping(user,domain,map.substring(regexPrefix.length()));
+        if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
+            return 
removeErrorMapping(user,domain,map.substring(VirtualUserTable.ERROR_PREFIX.length()));
+        } else if (map.startsWith(VirtualUserTable.REGEX_PREFIX)) {
+            return 
removeRegexMapping(user,domain,map.substring(VirtualUserTable.REGEX_PREFIX.length()));
         } else {
             return removeAddressMapping(user,domain,map);
         }
@@ -272,12 +268,7 @@
    }
     
    private boolean checkMapping(String user,String domain, String mapping) {
-       Collection mappings;
-       try {
-           mappings = getMappings(user,domain);
-       } catch (ErrorMappingException e) {
-           return false;
-       }
+       Collection mappings = getUserDomainMappings(user,domain);
        if (mappings != null && mappings.contains(mapping)) {
            return false;
        } else {
@@ -323,6 +314,13 @@
     }
     
     /**
+     * @see 
org.apache.james.services.VirtualUserTableManagement#getUserDomainMappings(java.lang.String,
 java.lang.String)
+     */
+    public Collection getUserDomainMappings(String user, String domain) {
+        return getUserDomainMappingsInternal(user, domain);
+    }
+    
+    /**
      * @see org.apache.james.services.DomainList#setAutoDetect(boolean)
      */
     public synchronized void setAutoDetect(boolean autoDetect) {
@@ -381,4 +379,13 @@
      * @return domains  the domains
      */
     protected abstract List getDomainsInternal();
+    
+    /**
+     * Return Collection of all mappings for the given username and domain
+     * 
+     * @param user the user
+     * @param domain the domain
+     * @return Collection which hold the mappings
+     */
+    protected abstract Collection getUserDomainMappingsInternal(String user, 
String domain);
 }

Modified: 
james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java?view=diff&rev=476937&r1=476936&r2=476937
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java 
Sun Nov 19 13:51:01 2006
@@ -475,7 +475,7 @@
     /**
      * @see 
org.apache.james.vut.AbstractVirtualUserTable#mapAddress(java.lang.String, 
java.lang.String)
      */
-    public Collection getUserDomainMappings(String user, String domain) throws 
InvalidMappingException {
+    protected Collection getUserDomainMappingsInternal(String user, String 
domain) {
         Connection conn = null;
         PreparedStatement mappingStmt = null;
         

Modified: 
james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java?view=diff&rev=476937&r1=476936&r2=476937
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java 
Sun Nov 19 13:51:01 2006
@@ -105,9 +105,9 @@
     }
 
     /**
-     * @see 
org.apache.james.services.VirtualUserTableManagement#getUserDomainMappings(java.lang.String,
 java.lang.String)
+     * @see 
org.apache.james.vut.AbstractVirtualUserTable#getUserDomainMappingsInternal(java.lang.String,
 java.lang.String)
      */
-    public Collection getUserDomainMappings(String user, String domain) {
+    public Collection getUserDomainMappingsInternal(String user, String 
domain) {
         Object maps = mappings.get(user + "@" + domain);
         if (maps != null) {
             return mappingToCollection(maps.toString());



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to