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 2010/07/18 20:18:10 UTC

svn commit: r965270 [4/4] - in /james/imap/trunk: ./ api/src/main/java/org/apache/james/imap/api/ api/src/main/java/org/apache/james/imap/api/process/ deployment/src/test/java/org/apache/james/imap/functional/ jcr/src/main/java/org/apache/james/imap/jc...

Modified: james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=965270&r1=965269&r2=965270&view=diff
==============================================================================
--- james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java (original)
+++ james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java Sun Jul 18 18:18:08 2010
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import org.apache.james.imap.api.MailboxPath;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.mailbox.Mailbox;
 import org.apache.james.imap.mailbox.MailboxConstants;
@@ -64,11 +65,23 @@ public class TorqueMailboxManager extend
         mailboxes = new HashMap<String, TorqueMailbox>();
     }
 
-    public Mailbox getMailbox(String mailboxName, MailboxSession session)
+    public Mailbox getMailbox(MailboxPath path, MailboxSession session)
             throws MailboxException {
-        return doGetMailbox(mailboxName);
+        return doGetMailbox(getName(path));
     }
 
+    private String getName(MailboxPath path) {
+        StringBuffer sb = new StringBuffer();
+        sb.append(path.getNamespace());
+        sb.append(MailboxConstants.DEFAULT_DELIMITER);
+
+        if (path.getUser() != null) {
+            sb.append(path.getUser());
+            sb.append(MailboxConstants.DEFAULT_DELIMITER);
+        }
+        sb.append(path.getName());
+        return sb.toString();
+    }
     private TorqueMailbox doGetMailbox(String mailboxName)
             throws MailboxException {
         try {
@@ -97,8 +110,14 @@ public class TorqueMailboxManager extend
         }
     }
 
-    public void createMailbox(String namespaceName, MailboxSession mailboxSession)
+    public void createMailbox(MailboxPath path, MailboxSession mailboxSession)
             throws MailboxException {
+        String namespaceName = getName(path);
+        createMailbox(namespaceName, mailboxSession);
+        
+    }
+    
+    private void createMailbox(String namespaceName, MailboxSession mailboxSession) throws MailboxException {
         getLog().debug("createMailbox " + namespaceName);
         final int length = namespaceName.length();
         if (length == 0) {
@@ -120,13 +139,13 @@ public class TorqueMailboxManager extend
                     if (index > 0 && count++ > 1) {
                         final String mailbox = namespaceName
                                 .substring(0, index);
-                        if (!mailboxExists(mailbox, mailboxSession)) {
+                        if (!mailboxExists(getMailboxPath(mailbox), mailboxSession)) {
                             doCreate(mailbox);
                         }
                     }
                     index = namespaceName.indexOf(MailboxConstants.DEFAULT_DELIMITER, ++index);
                 }
-                if (mailboxExists(namespaceName, mailboxSession)) {
+                if (mailboxExists(getMailboxPath(namespaceName), mailboxSession)) {
                     throw new MailboxExistsException(namespaceName); 
                 } else {
                     doCreate(namespaceName);
@@ -147,8 +166,10 @@ public class TorqueMailboxManager extend
         }
     }
 
-    public void deleteMailbox(String mailboxName, MailboxSession session)
+    public void deleteMailbox(MailboxPath path, MailboxSession session)
             throws MailboxException {
+        String mailboxName = getName(path);
+
         getLog().info("deleteMailbox " + mailboxName);
         synchronized (mailboxes) {
             try {
@@ -170,12 +191,15 @@ public class TorqueMailboxManager extend
     }
 
     @SuppressWarnings("unchecked")
-    public void renameMailbox(String from, String to, MailboxSession session)
+    public void renameMailbox(MailboxPath fromPath, MailboxPath toPath, MailboxSession session)
             throws MailboxException {
+        String from = getName(fromPath);
+        String to = getName(toPath);
+
         getLog().debug("renameMailbox " + from + " to " + to);
         try {
             synchronized (mailboxes) {
-                if (mailboxExists(to, session)) {
+                if (mailboxExists(toPath, session)) {
                     throw new MailboxExistsException(to);
                 }
                 // TODO put this into a serilizable transaction
@@ -222,10 +246,10 @@ public class TorqueMailboxManager extend
         }
     }
 
-    public void copyMessages(MessageRange set, String from, String to,
+    public void copyMessages(MessageRange set, MailboxPath from, MailboxPath to,
             MailboxSession session) throws MailboxException {
-        TorqueMailbox toMailbox = doGetMailbox(to);
-        TorqueMailbox fromMailbox = doGetMailbox(from);
+        TorqueMailbox toMailbox = doGetMailbox(getName(to));
+        TorqueMailbox fromMailbox = doGetMailbox(getName(from));
         fromMailbox.copyTo(set, toMailbox, session);
     }
 
@@ -234,36 +258,37 @@ public class TorqueMailboxManager extend
             throws MailboxException {
         final char localWildcard = mailboxExpression.getLocalWildcard();
         final char freeWildcard = mailboxExpression.getFreeWildcard();
-        final String base = mailboxExpression.getBase();
+        final String baseName = mailboxExpression.getBase().getName();
         final int baseLength;
-        if (base == null) {
+        if (baseName == null) {
             baseLength = 0;
         } else {
-            baseLength = base.length();
+            baseLength = baseName.length();
         }
-
-        final String search = mailboxExpression.getCombinedName(
-                MailboxConstants.DEFAULT_DELIMITER).replace(freeWildcard, SQL_WILDCARD_CHAR)
-                .replace(localWildcard, SQL_WILDCARD_CHAR);
+        final String combinedName = mailboxExpression.getCombinedName()
+                                    .replace(freeWildcard, SQL_WILDCARD_CHAR)
+                                    .replace(localWildcard, SQL_WILDCARD_CHAR);
+        final MailboxPath search = new MailboxPath(mailboxExpression.getBase(), combinedName);
 
         Criteria criteria = new Criteria();
-        criteria.add(MailboxRowPeer.NAME, (Object) (search), Criteria.LIKE);
+        criteria.add(MailboxRowPeer.NAME, (Object) getName(search), Criteria.LIKE);
         try {
             List mailboxRows = MailboxRowPeer.doSelect(criteria);
             List<MailboxMetaData> results = new ArrayList<MailboxMetaData>(mailboxRows.size());
             for (Iterator iter = mailboxRows.iterator(); iter.hasNext();) {
                 final MailboxRow mailboxRow = (MailboxRow) iter.next();
-                final String name = mailboxRow.getName();
-                if (name.startsWith(base)) {
+                final MailboxPath sPath = getMailboxPath(mailboxRow.getName());
+                final String name = sPath.getName();
+                if (name.startsWith(baseName)) {
                     final String match = name.substring(baseLength);
-                    if (mailboxExpression.isExpressionMatch(match, MailboxConstants.DEFAULT_DELIMITER)) {
+                    if (mailboxExpression.isExpressionMatch(match)) {
                         final MailboxMetaData.Children inferiors; 
-                        if (hasChildren(name)) {
+                        if (hasChildren(mailboxRow.getName())) {
                             inferiors = MailboxMetaData.Children.HAS_CHILDREN;
                         } else {
                             inferiors = MailboxMetaData.Children.HAS_NO_CHILDREN;
                         }
-                        results.add(new SimpleMailboxMetaData(name, ".", inferiors, Selectability.NONE));
+                        results.add(new SimpleMailboxMetaData(sPath, MailboxConstants.DEFAULT_DELIMITER_STRING, inferiors, Selectability.NONE));
                     }
                 }
             }
@@ -289,9 +314,10 @@ public class TorqueMailboxManager extend
         return !mailboxes.isEmpty();
     }
     
-    public boolean mailboxExists(String mailboxName, MailboxSession session)
+    public boolean mailboxExists(MailboxPath path, MailboxSession session)
             throws MailboxException {
         Criteria c = new Criteria();
+        String mailboxName = getName(path);
         c.add(MailboxRowPeer.NAME, mailboxName);
         CountHelper countHelper = new CountHelper();
         int count;
@@ -315,6 +341,14 @@ public class TorqueMailboxManager extend
         }
     }
 
+    public MailboxPath getMailboxPath(String name) {
+        String nameParts[] = name.split("\\" +MailboxConstants.DEFAULT_DELIMITER_STRING,3);
+        if (nameParts.length < 3) {
+            return new MailboxPath(nameParts[0], null, nameParts[1]);
+        }
+        return new MailboxPath(nameParts[0], nameParts[1], nameParts[2]);
+
+    }
     public void deleteEverything() throws MailboxException {
         try {
             MailboxRowPeer.doDelete(new Criteria().and(
@@ -326,8 +360,8 @@ public class TorqueMailboxManager extend
         }
     }
 
-    public void addListener(String mailboxName, MailboxListener listener, MailboxSession session) throws MailboxException {
-        final TorqueMailbox mailbox = doGetMailbox(mailboxName);
+    public void addListener(MailboxPath path, MailboxListener listener, MailboxSession session) throws MailboxException {
+        final TorqueMailbox mailbox = doGetMailbox(getName(path));
         mailbox.addListener(listener);
     }
 

Modified: james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UidChangeTracker.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UidChangeTracker.java?rev=965270&r1=965269&r2=965270&view=diff
==============================================================================
--- james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UidChangeTracker.java (original)
+++ james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UidChangeTracker.java Sun Jul 18 18:18:08 2010
@@ -30,6 +30,7 @@ import java.util.TreeSet;
 
 import javax.mail.Flags;
 
+import org.apache.james.imap.api.MailboxPath;
 import org.apache.james.imap.mailbox.MailboxConstants;
 import org.apache.james.imap.mailbox.Mailbox;
 import org.apache.james.imap.mailbox.MailboxListener;
@@ -44,19 +45,19 @@ public class UidChangeTracker implements
 
     private long lastUid;
 
-    private String name;
+    private MailboxPath path;
 
-    public UidChangeTracker(long lastUid, String name) {
+    public UidChangeTracker(long lastUid, MailboxPath path) {
         this.lastUid = lastUid;
         eventDispatcher = new MailboxEventDispatcher();
         cache = new TreeMap<Long, Flags>();
-        this.name = name;
+        this.path = path;
     }
 
     public synchronized void expunged(final Collection<Long> uidsExpunged) {
         for (Long uid:uidsExpunged) {
             cache.remove(uid);
-            eventDispatcher.expunged(uid, 0, name);
+            eventDispatcher.expunged(uid, 0, path);
         }
     }
 
@@ -81,7 +82,7 @@ public class UidChangeTracker implements
                     lastFlags = cachedFlags;
                 }
                 if (!newFlags.equals(lastFlags)) {
-                    eventDispatcher.flagsUpdated(uid, sessionId, name, lastFlags, newFlags);
+                    eventDispatcher.flagsUpdated(uid, sessionId, path, lastFlags, newFlags);
                 }
                 cache.put(uid, newFlags);
             }
@@ -101,7 +102,7 @@ public class UidChangeTracker implements
 
         for (Iterator<Long> iter = expectedSet.iterator(); iter.hasNext();) {
             long uid = ((Long) iter.next()).longValue();
-            eventDispatcher.expunged(uid, Mailbox.ANONYMOUS_SESSION, name);
+            eventDispatcher.expunged(uid, Mailbox.ANONYMOUS_SESSION, path);
         }
     }
 
@@ -109,11 +110,11 @@ public class UidChangeTracker implements
         if (flags != null) {
             final Flags cachedFlags = cache.get(uid);
             if (cachedFlags == null || !flags.equals(cachedFlags)) {
-                eventDispatcher.flagsUpdated(uid, Mailbox.ANONYMOUS_SESSION, name, cachedFlags, flags);
+                eventDispatcher.flagsUpdated(uid, Mailbox.ANONYMOUS_SESSION, path, cachedFlags, flags);
             }
         }
         if (uid > lastUid) {
-            eventDispatcher.added(uid, Mailbox.ANONYMOUS_SESSION, name);
+            eventDispatcher.added(uid, Mailbox.ANONYMOUS_SESSION, path);
             lastUid = uid;
         }
         cache.put(uid, flags);
@@ -138,11 +139,11 @@ public class UidChangeTracker implements
     }
     
     public void mailboxDeleted(long sessionId) {
-        eventDispatcher.mailboxDeleted(sessionId, name);
+        eventDispatcher.mailboxDeleted(sessionId, path);
     }
 
-    public void reportRenamed(String to) {
-        eventDispatcher.mailboxRenamed(name, to, Mailbox.ANONYMOUS_SESSION);
-        name = to;
+    public void reportRenamed(MailboxPath to) {
+        eventDispatcher.mailboxRenamed(path, to, Mailbox.ANONYMOUS_SESSION);
+        path = to;
     }
 }



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