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 no...@apache.org on 2006/10/18 13:59:57 UTC

svn commit: r465225 - in /james/server/trunk/src: java/org/apache/james/userrepository/ test/org/apache/james/userrepository/

Author: norman
Date: Wed Oct 18 04:59:54 2006
New Revision: 465225

URL: http://svn.apache.org/viewvc?view=rev&rev=465225
Log:
Implement VirtualUserTable in UserRepositories.
Add tests

Modified:
    james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
    james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java
    james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java
    james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java

Modified: james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java (original)
+++ james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java Wed Oct 18 04:59:54 2006
@@ -21,19 +21,24 @@
 
 package org.apache.james.userrepository;
 
+import org.apache.james.services.JamesUser;
 import org.apache.james.services.User;
+import org.apache.james.services.VirtualUserTable;
+import org.apache.james.vut.ErrorMappingException;
 import org.apache.mailet.MailAddress;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * A Jdbc-backed UserRepository which handles User instances
  * of the <CODE>DefaultJamesUser</CODE> class, or any superclass.
  * 
  */
-public class JamesUsersJdbcRepository extends AbstractJdbcUsersRepository
+public class JamesUsersJdbcRepository extends AbstractJdbcUsersRepository implements VirtualUserTable
 {
     /**
      * @see org.apache.james.userrepository.AbstractJdbcUsersRepository#readUserFromResultSet(java.sql.ResultSet)
@@ -157,5 +162,41 @@
         newbie.setPassword(password);
         return addUser(newbie);
     }
-
+    
+    /**
+     * @see org.apache.james.services.VirtualUserTable#getMappings(java.lang.String, java.lang.String)
+     */
+    public Collection getMappings(String username, String domain) throws ErrorMappingException {
+        Collection mappings = new ArrayList();
+        User user = getUserByName(username);
+
+        if (user instanceof JamesUser) {
+            JamesUser jUser = (JamesUser) user;    
+         
+            if (jUser.getAliasing()) {
+                String alias = jUser.getAlias();
+                if (alias != null) {
+                    mappings.add(alias+ "@" + domain);
+                }
+            }
+            
+            if (jUser.getForwarding()) {
+                String forward = null;
+                if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) {
+                    mappings.add(forward);
+                } else {
+                    StringBuffer errorBuffer = new StringBuffer(128)
+                    .append("Forwarding was enabled for ")
+                    .append(username)
+                    .append(" but no forwarding address was set for this account.");
+                    getLogger().error(errorBuffer.toString());
+                }
+            }
+        }
+        if (mappings.size() == 0) {
+            return null;
+        } else {
+            return mappings;
+        }
+    }
 }

Modified: james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java (original)
+++ james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java Wed Oct 18 04:59:54 2006
@@ -32,9 +32,14 @@
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.JamesUser;
 import org.apache.james.services.User;
 import org.apache.james.services.UsersRepository;
+import org.apache.james.services.VirtualUserTable;
+import org.apache.james.vut.ErrorMappingException;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 
 /**
@@ -52,7 +57,7 @@
  */
 public class UsersFileRepository
     extends AbstractLogEnabled
-    implements UsersRepository, Configurable, Serviceable, Initializable {
+    implements UsersRepository, Configurable, Serviceable, Initializable, VirtualUserTable {
  
     /**
      * Whether 'deep debugging' is turned on.
@@ -295,6 +300,43 @@
             count++;
         }
         return count;
+    }
+    
+    /**
+     * @see org.apache.james.services.VirtualUserTable#getMappings(java.lang.String, java.lang.String)
+     */
+    public Collection getMappings(String username, String domain) throws ErrorMappingException {
+        Collection mappings = new ArrayList();
+        User user = getUserByName(username);
+
+        if (user instanceof JamesUser) {
+            JamesUser jUser = (JamesUser) user;    
+         
+            if (jUser.getAliasing()) {
+                String alias = jUser.getAlias();
+                if (alias != null) {
+                    mappings.add(alias+ "@" + domain);
+                }
+            }
+            
+            if (jUser.getForwarding()) {
+                String forward = null;
+                if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) {
+                    mappings.add(forward);
+                } else {
+                    StringBuffer errorBuffer = new StringBuffer(128)
+                    .append("Forwarding was enabled for ")
+                    .append(username)
+                    .append(" but no forwarding address was set for this account.");
+                    getLogger().error(errorBuffer.toString());
+                }
+            }
+        }
+        if (mappings.size() == 0) {
+            return null;
+        } else {
+            return mappings;
+        }
     }
 
 }

Modified: james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java Wed Oct 18 04:59:54 2006
@@ -23,11 +23,16 @@
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.james.services.JamesUser;
+import org.apache.james.services.User;
 import org.apache.james.services.UsersRepository;
+import org.apache.james.services.VirtualUserTable;
 import org.apache.james.test.mock.james.MockFileSystem;
 import org.apache.james.test.mock.util.AttrValConfiguration;
 import org.apache.james.test.util.Util;
+import org.apache.mailet.MailAddress;
 
+import java.util.Collection;
 import java.util.Iterator;
 
 /**
@@ -85,5 +90,47 @@
         }
         ContainerUtil.dispose(this.usersRepository);
     }
+    
+    
+    public void testVirtualUserTableImpl() throws Exception {
+    String username = "test";
+    String password = "pass";
+    String alias = "alias";
+    String domain = "localhost";
+    String forward = "forward@somewhere";
+    
+    JamesUsersJdbcRepository repos = (JamesUsersJdbcRepository) getUsersRepository();
+    repos.addUser(username,password);
+    
+    JamesUser user = (JamesUser)repos.getUserByName(username);
+    user.setAlias(alias);
+    repos.updateUser(user);
+    
+    Collection map = ((VirtualUserTable) repos).getMappings(username, domain);
+    assertNull("No mapping", map);
+    
+    user.setAliasing(true);
+    repos.updateUser(user);
+    map = ((VirtualUserTable) repos).getMappings(username, domain);
+    assertNotNull("One mapping", map.size() == 1);
+    assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+    
+    
+    user.setForwardingDestination(new MailAddress(forward));
+    repos.updateUser(user);
+    map = ((VirtualUserTable) repos).getMappings(username, domain);
+    assertTrue("One mapping", map.size() == 1);
+    assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+    
+    
+    user.setForwarding(true);
+    repos.updateUser(user);
+    map = ((VirtualUserTable) repos).getMappings(username, domain);
+    Iterator mappings = map.iterator();
+    assertTrue("Two mapping",map.size() == 2);
+    assertEquals("Alias found", mappings.next().toString(), alias + "@" + domain);
+    assertEquals("Forward found", mappings.next().toString(), forward);
+    }
+
 
 }

Modified: james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java Wed Oct 18 04:59:54 2006
@@ -25,12 +25,16 @@
 import org.apache.avalon.framework.service.DefaultServiceManager;
 import org.apache.james.mailrepository.filepair.File_Persistent_Object_Repository;
 import org.apache.james.services.FileSystem;
+import org.apache.james.services.JamesUser;
 import org.apache.james.services.UsersRepository;
+import org.apache.james.services.VirtualUserTable;
 import org.apache.james.test.mock.avalon.MockLogger;
 import org.apache.james.test.mock.avalon.MockStore;
+import org.apache.mailet.MailAddress;
 
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.util.Collection;
 import java.util.Iterator;
 
 /**
@@ -85,5 +89,46 @@
         }
         ContainerUtil.dispose(this.usersRepository);
     }
+    
+    public void testVirtualUserTableImpl() throws Exception {
+    String username = "test";
+    String password = "pass";
+    String alias = "alias";
+    String domain = "localhost";
+    String forward = "forward@somewhere";
+    
+    UsersFileRepository repos = (UsersFileRepository) getUsersRepository();
+    repos.addUser(username,password);
+    
+    JamesUser user = (JamesUser)repos.getUserByName(username);
+    user.setAlias(alias);
+    repos.updateUser(user);
+    
+    Collection map = ((VirtualUserTable) repos).getMappings(username, domain);
+    assertNull("No mapping", map);
+    
+    user.setAliasing(true);
+    repos.updateUser(user);
+    map = ((VirtualUserTable) repos).getMappings(username, domain);
+    assertNotNull("One mapping", map.size() == 1);
+    assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+    
+    
+    user.setForwardingDestination(new MailAddress(forward));
+    repos.updateUser(user);
+    map = ((VirtualUserTable) repos).getMappings(username, domain);
+    assertTrue("One mapping", map.size() == 1);
+    assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+    
+    
+    user.setForwarding(true);
+    repos.updateUser(user);
+    map = ((VirtualUserTable) repos).getMappings(username, domain);
+    Iterator mappings = map.iterator();
+    assertTrue("Two mapping",map.size() == 2);
+    assertEquals("Alias found", mappings.next().toString(), alias + "@" + domain);
+    assertEquals("Forward found", mappings.next().toString(), forward);
+    }
+
 
 }



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