Author: norman
Date: Mon Jan 10 11:50:14 2011
New Revision: 1057159

URL: http://svn.apache.org/viewvc?rev=1057159&view=rev
Log:
Fix subscriptions in Maildir. See MAILBOX-30

Added:
    
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirSubscriptionManagerTest.java
Modified:
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxSessionMapperFactory.java
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxSessionMapperFactory.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxSessionMapperFactory.java?rev=1057159&r1=1057158&r2=1057159&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxSessionMapperFactory.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxSessionMapperFactory.java
 Mon Jan 10 11:50:14 2011
@@ -53,7 +53,7 @@ public class MaildirMailboxSessionMapper
     @Override
     protected SubscriptionMapper createSubscriptionMapper(MailboxSession 
session)
             throws SubscriptionException {
-        return new MaildirSubscriptionMapper(store.getMaildirLocation());
+        return new MaildirSubscriptionMapper(store);
     }
 
 }

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java?rev=1057159&r1=1057158&r2=1057159&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java
 Mon Jan 10 11:50:14 2011
@@ -31,6 +31,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.james.mailbox.SubscriptionException;
+import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.maildir.user.model.MaildirSubscription;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
@@ -38,12 +39,11 @@ import org.apache.james.mailbox.store.us
 
 public class MaildirSubscriptionMapper extends NonTransactionalMapper 
implements SubscriptionMapper {
 
-    private static final String PATH_USER = "%user";
     private static final String FILE_SUBSCRIPTION = "subscriptions";
-    private final String maildirLocation;
+    private MaildirStore store;
     
-    public MaildirSubscriptionMapper(String maildirLocation) {
-        this.maildirLocation = maildirLocation;
+    public MaildirSubscriptionMapper(MaildirStore store) {
+        this.store = store;
     }
     
     /* 
@@ -56,7 +56,7 @@ public class MaildirSubscriptionMapper e
         boolean changed = subscriptionNames.remove(subscription.getMailbox());
         if (changed) {
             try {
-                writeSubscriptions(new 
File(createFolderNameFromUser(subscription.getUser())), subscriptionNames);
+                writeSubscriptions(new 
File(store.userRoot(subscription.getUser())), subscriptionNames);
             } catch (IOException e) {
                 throw new SubscriptionException(e);
             }
@@ -81,7 +81,7 @@ public class MaildirSubscriptionMapper e
      * @see 
org.apache.james.mailbox.store.user.SubscriptionMapper#findMailboxSubscriptionForUser(java.lang.String,
 java.lang.String)
      */
     public Subscription findMailboxSubscriptionForUser(String user, String 
mailbox) throws SubscriptionException {
-        File userRoot = new File(createFolderNameFromUser(user));
+        File userRoot = new File(store.userRoot(user));
         Set<String> subscriptionNames;
         try {
             subscriptionNames = readSubscriptions(userRoot);
@@ -103,7 +103,7 @@ public class MaildirSubscriptionMapper e
         boolean changed = subscriptionNames.add(subscription.getMailbox());
         if (changed) {
             try {
-                writeSubscriptions(new 
File(createFolderNameFromUser(subscription.getUser())), subscriptionNames);
+                writeSubscriptions(new 
File(store.userRoot(subscription.getUser())), subscriptionNames);
             } catch (IOException e) {
                 throw new SubscriptionException(e);
             }
@@ -118,14 +118,6 @@ public class MaildirSubscriptionMapper e
         // nothing to do
     }
     
-    /**
-     * Get the folder name of the folder containing the user's mailboxes 
-     * @param user The user to get the folder for
-     * @return The name of the folder
-     */
-    private String createFolderNameFromUser(String user) {
-        return maildirLocation.replace(PATH_USER, user);
-    }
     
     /**
      * Read the subscriptions for a particular user
@@ -134,7 +126,7 @@ public class MaildirSubscriptionMapper e
      * @throws SubscriptionException
      */
     private Set<String> readSubscriptionsForUser(String user) throws 
SubscriptionException { 
-        File userRoot = new File(createFolderNameFromUser(user));
+        File userRoot = new File(store.userRoot(user));
         Set<String> subscriptionNames;
         try {
             subscriptionNames = readSubscriptions(userRoot);
@@ -176,6 +168,8 @@ public class MaildirSubscriptionMapper e
     private void writeSubscriptions(File mailboxFolder, final Set<String> 
subscriptions) throws IOException {
         List<String> sortedSubscriptions = new 
ArrayList<String>(subscriptions);
         Collections.sort(sortedSubscriptions);
+        if (!mailboxFolder.exists()) mailboxFolder.mkdirs();
+        
         File subscriptionFile = new File(mailboxFolder, FILE_SUBSCRIPTION);
         if (!subscriptionFile.exists())
             subscriptionFile.createNewFile();

Added: 
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirSubscriptionManagerTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirSubscriptionManagerTest.java?rev=1057159&view=auto
==============================================================================
--- 
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirSubscriptionManagerTest.java
 (added)
+++ 
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirSubscriptionManagerTest.java
 Mon Jan 10 11:50:14 2011
@@ -0,0 +1,34 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.mailbox.maildir;
+
+import org.apache.james.mailbox.AbstractSubscriptionManagerTest;
+import org.apache.james.mailbox.SubscriptionManager;
+
+public class MaildirSubscriptionManagerTest extends 
AbstractSubscriptionManagerTest{
+
+    @Override
+    public SubscriptionManager createSubscriptionManager() {
+        MaildirStore store = new MaildirStore("target/%u/");
+        MaildirMailboxSessionMapperFactory factory = new 
MaildirMailboxSessionMapperFactory(store);
+        MaildirSubscriptionManager sm = new 
MaildirSubscriptionManager(factory);
+        return sm;
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to