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]