Author: norman
Date: Sun Mar 14 08:49:31 2010
New Revision: 922790
URL: http://svn.apache.org/viewvc?rev=922790&view=rev
Log:
Fix some bugs in JCR implementation (IMAP-93)
Remove TorqueMailboxSession and just use SimpleMailboxSession
Added:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
Removed:
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxSession.java
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
james/imap/trunk/deployment/src/test/resources/test-repository.xml
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/ImapHostSystem.java
Sun Mar 14 08:49:31 2010
@@ -134,7 +134,7 @@ public abstract class ImapHostSystem imp
}
public void stop() throws Exception {
-
+ ImapHostSystem.this.stop();
}
public void writeLine(String line) throws Exception {
@@ -250,4 +250,8 @@ public abstract class ImapHostSystem imp
}
public abstract boolean addUser(String user, String password) throws
Exception;
+
+ protected void stop() throws Exception {
+
+ }
}
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
Sun Mar 14 08:49:31 2010
@@ -65,7 +65,7 @@ public class JCRHostSystem extends ImapH
RepositoryConfig config = RepositoryConfig.create(new
InputSource(this.getClass().getClassLoader().getResourceAsStream("test-repository.xml")),
JACKRABBIT_HOME);
repository = RepositoryImpl.create(config);
- mailboxManager = new JCRGlobalUserMailboxManager(userManager, new
JCRGlobalUserSubscriptionManager(repository, "default", "user", "pass"),
repository, "default", "user", "pass");
+ mailboxManager = new JCRGlobalUserMailboxManager(userManager, new
JCRGlobalUserSubscriptionManager(repository, null, "user", "pass"), repository,
null, "user", "pass");
final DefaultImapProcessorFactory defaultImapProcessorFactory = new
DefaultImapProcessorFactory();
resetUserMetaData();
@@ -109,7 +109,6 @@ public class JCRHostSystem extends ImapH
dir.mkdirs();
}
- @Override
protected void stop() throws Exception {
//repository.shutdown();
System.out.println("HERE");
Modified: james/imap/trunk/deployment/src/test/resources/test-repository.xml
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/resources/test-repository.xml?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
--- james/imap/trunk/deployment/src/test/resources/test-repository.xml
(original)
+++ james/imap/trunk/deployment/src/test/resources/test-repository.xml Sun Mar
14 08:49:31 2010
@@ -28,7 +28,7 @@
(e.g. registered namespaces, custom node types, etc.)
-->
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="target/repository"/>
+ <param name='path' value='${rep.home}/repository'/>
</FileSystem>
<!--
@@ -45,21 +45,11 @@
<param name="adminId" value="admin"/>
</LoginModule>
</Security>
- <!--
- location of workspaces root directory and name of default workspace
- -->
- <Workspaces rootPath="target/repository/workspaces"
defaultWorkspace="default"/>
- <!--
- workspace configuration template:
- used to create the initial workspace if there's no workspace yet
- -->
- <Workspace name="default">
- <!--
- virtual file system of the workspace:
- class: FQN of class implementing the FileSystem interface
- -->
- <FileSystem
class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="default"/>
+
+ <Workspaces rootPath='${rep.home}/workspaces' defaultWorkspace='default'/>
+
+ <Workspace name='${wsp.name}'>
+ <FileSystem class='org.apache.jackrabbit.core.fs.mem.MemoryFileSystem'>
</FileSystem>
<!--
persistence manager of the workspace:
@@ -69,11 +59,14 @@
<param name="url" value="jdbc:h2:target/wsp_name/db"/>
<param name="driver" value="org.h2.Driver"/>
<param name="schema" value="h2"/>
- <param name="schemaObjectPrefix" value="default_"/>
+ <param name='schemaObjectPrefix' value='${wsp.name}_'/>
</PersistenceManager>
- <SearchIndex
class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
- <param name="path" value="default/index" />
+ <SearchIndex
class='org.apache.jackrabbit.core.query.lucene.SearchIndex'>
+ <param name='path' value='${wsp.home}/index'/>
+ <param name='textFilterClasses'
value='org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor'/>
+ <param name='extractorPoolSize' value='2'/>
+ <param name='supportHighlighting' value='true'/>
</SearchIndex>
</Workspace>
@@ -81,19 +74,30 @@
<!--
Configures the versioning
-->
- <Versioning rootPath="target/repository/version">
-
- <FileSystem
class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="target/repository/version" />
+ <Versioning rootPath='${rep.home}/version'>
+ <FileSystem class='org.apache.jackrabbit.core.fs.mem.MemoryFileSystem'>
+ <!--
+ <param name='path' value='${rep.home}/version' />
+ -->
</FileSystem>
<PersistenceManager
class="org.apache.jackrabbit.core.persistence.db.SimpleDbPersistenceManager">
- <param name="url" value="jdbc:h2:target/wsp_name/db"/>
+ <param name='url'
value='jdbc:h2:${rep.home}/version/db'/>
<param name="driver" value="org.h2.Driver"/>
<param name="schema" value="h2"/>
<param name="schemaObjectPrefix"
value="version_"/>
</PersistenceManager>
</Versioning>
+ <!--
+ Search index for content that is shared repository wide
+ (/jcr:system tree, contains mainly versions)
+ -->
+ <SearchIndex class='org.apache.jackrabbit.core.query.lucene.SearchIndex'>
+ <param name='path' value='${rep.home}/repository/index'/>
+ <param name='textFilterClasses'
value='org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor'/>
+ <param name='extractorPoolSize' value='2'/>
+ <param name='supportHighlighting' value='true'/>
+ </SearchIndex>
</Repository>
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
Sun Mar 14 08:49:31 2010
@@ -55,7 +55,7 @@ public class JCRMailboxManager extends S
private final Repository repository;
private final String workspace;
private final Log logger = LogFactory.getLog(JCRMailboxManager.class);
-
+
public JCRMailboxManager(final Authenticator authenticator, final
Subscriber subscriber, final Repository repository, final String workspace) {
super(authenticator, subscriber);
this.repository = repository;
@@ -70,7 +70,8 @@ public class JCRMailboxManager extends S
@Override
protected MailboxMapper createMailboxMapper(MailboxSession session) throws
MailboxException {
- return new JCRMailboxMapper(getSession(session), logger);
+ Session jcrSession = getSession(session);
+ return new JCRMailboxMapper(jcrSession, logger);
}
@@ -98,7 +99,7 @@ public class JCRMailboxManager extends S
@Override
protected void doCreate(String namespaceName, MailboxSession session)
throws MailboxException {
final Mailbox mailbox = new
org.apache.james.imap.jcr.mail.model.JCRMailbox(namespaceName,
randomUidValidity(), logger);
- final MailboxMapper mapper = createMailboxMapper(session);
+ final JCRMailboxMapper mapper =
(JCRMailboxMapper)createMailboxMapper(session);
mapper.execute(new TransactionalMapper.Transaction() {
public void run() throws MailboxException {
@@ -122,7 +123,8 @@ public class JCRMailboxManager extends S
}
}
-
+
+
/**
* Return the JCR workspace
*
Added:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java?rev=922790&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
(added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
Sun Mar 14 08:49:31 2010
@@ -0,0 +1,37 @@
+/****************************************************************
+ * 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.imap.jcr;
+
+import javax.jcr.Session;
+
+import org.apache.james.imap.store.transaction.NonTransactionalMapper;
+
+public abstract class JCRMapper extends NonTransactionalMapper implements
JCRImapConstants{
+
+ private final Session session;
+
+ public JCRMapper(final Session session) {
+ this.session = session;
+ }
+
+ protected Session getSession() {
+ return session;
+ }
+
+}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
Sun Mar 14 08:49:31 2010
@@ -33,28 +33,26 @@ import javax.jcr.query.QueryResult;
import org.apache.commons.logging.Log;
import org.apache.jackrabbit.JcrConstants;
import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.jcr.JCRImapConstants;
+import org.apache.james.imap.jcr.JCRMapper;
import org.apache.james.imap.jcr.JCRUtils;
import org.apache.james.imap.jcr.mail.model.JCRMailbox;
import org.apache.james.imap.mailbox.MailboxNotFoundException;
import org.apache.james.imap.mailbox.StorageException;
import org.apache.james.imap.store.mail.MailboxMapper;
import org.apache.james.imap.store.mail.model.Mailbox;
-import org.apache.james.imap.store.transaction.NonTransactionalMapper;
/**
* JCR implementation of a MailboxMapper
*
*
*/
-public class JCRMailboxMapper extends NonTransactionalMapper implements
MailboxMapper,JCRImapConstants {
+public class JCRMailboxMapper extends JCRMapper implements MailboxMapper {
- private final Session session;
public final String PATH = PROPERTY_PREFIX + "mailboxes";
private Log logger;
public JCRMailboxMapper(final Session session, final Log logger) {
- this.session = session;
+ super(session);
this.logger = logger;
}
@@ -66,16 +64,24 @@ public class JCRMailboxMapper extends No
* (java.lang.String)
*/
public long countMailboxesWithName(String name) throws StorageException {
+
try {
- QueryManager manager = session.getWorkspace().getQueryManager();
- String queryString = "//" + PATH + "//element(*)[@" +
JCRMailbox.NAME_PROPERTY + "='" + name + "']";
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
+ String queryString = "//" + PATH + "//element(*)[@" +
JCRMailbox.NAME_PROPERTY + "='" + name + "']";
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator it = result.getNodes();
- return it.getSize();
+ long resultSize = it.getSize();
+ if (resultSize == -1) {
+ resultSize = 0;
+ while (it.hasNext()) {
+ it.nextNode();
+ resultSize++;
+ }
+ }
+ return resultSize;
} catch (PathNotFoundException e) {
// not found
} catch (RepositoryException e) {
- e.printStackTrace();
throw new StorageException(HumanReadableText.COUNT_FAILED, e);
}
return 0;
@@ -90,8 +96,8 @@ public class JCRMailboxMapper extends No
*/
public void delete(Mailbox mailbox) throws StorageException {
try {
- session.getNodeByUUID(((JCRMailbox)
mailbox).getUUID()).remove();
- session.save();
+ getSession().getNodeByUUID(((JCRMailbox)
mailbox).getUUID()).remove();
+ getSession().save();
} catch (PathNotFoundException e) {
// mailbox does not exists..
} catch (RepositoryException e) {
@@ -106,8 +112,8 @@ public class JCRMailboxMapper extends No
*/
public void deleteAll() throws StorageException {
try {
- session.getRootNode().getNode(PATH).remove();
- session.save();
+ getSession().getRootNode().getNode(PATH).remove();
+ getSession().save();
} catch (PathNotFoundException e) {
// nothing todo
@@ -126,7 +132,7 @@ public class JCRMailboxMapper extends No
*/
public boolean existsMailboxStartingWith(String mailboxName) throws
StorageException {
try {
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH +
"//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'" + mailboxName +
"*')]";
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator it = result.getNodes();
@@ -142,31 +148,13 @@ public class JCRMailboxMapper extends No
* @see
org.apache.james.imap.store.mail.MailboxMapper#findMailboxById(long)
*/
public Mailbox findMailboxById(long mailboxId) throws StorageException,
MailboxNotFoundException {
- /*
- try {
- QueryManager manager = session.getWorkspace().getQueryManager();
- String queryString =
JCRUtils.createPath(session.getRootNode().getPath(), PATH) + "//element(" +
mailboxId + ")," + JCRMailbox.ID_PROPERTY + ")";
- Query query = manager.createQuery(queryString, Query.XPATH);
-
- NodeIterator nodes = query.execute().getNodes();
- if (nodes.hasNext() == false) {
- throw new MailboxNotFoundException(mailboxId);
- } else {
- return new JCRMailbox(nodes.nextNode(),logger);
- }
- } catch (PathNotFoundException e) {
- throw new MailboxNotFoundException(mailboxId);
- } catch (RepositoryException e) {
- throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
- }
- */
throw new StorageException(HumanReadableText.UNSUPPORTED,null);
}
public Mailbox findMailboxByUUID(String uuid) throws StorageException,
MailboxNotFoundException {
System.out.println("UUID="+uuid);
try {
- return new JCRMailbox(session.getNodeByUUID(uuid),logger);
+ return new JCRMailbox(getSession().getNodeByUUID(uuid),logger);
} catch (PathNotFoundException e) {
throw new MailboxNotFoundException(uuid);
} catch (RepositoryException e) {
@@ -183,7 +171,7 @@ public class JCRMailboxMapper extends No
*/
public Mailbox findMailboxByName(String name) throws StorageException,
MailboxNotFoundException {
try {
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailbox.NAME_PROPERTY + "='" + name + "']";
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator it = result.getNodes();
@@ -209,7 +197,7 @@ public class JCRMailboxMapper extends No
public List<Mailbox> findMailboxWithNameLike(String name) throws
StorageException {
List<Mailbox> mailboxList = new ArrayList<Mailbox>();
try {
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH +
"//element(*)[jcr:contains(@" + JCRMailbox.NAME_PROPERTY + ",'*" + name +
"*')]";
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator it = result.getNodes();
@@ -232,16 +220,20 @@ public class JCRMailboxMapper extends No
* imap.store.mail.model.Mailbox)
*/
public void save(Mailbox mailbox) throws StorageException {
+
String nodePath = JCRUtils.createPath(PATH,mailbox.getName());
try {
+ createPathIfNotExists();
+
Node node;
- if (session.getRootNode().hasNode(nodePath)) {
- node = session.getRootNode().getNode(nodePath);
+ if (getSession().getRootNode().hasNode(nodePath)) {
+ node = getSession().getRootNode().getNode(nodePath);
} else {
- node = session.getRootNode().addNode(nodePath,
JcrConstants.MIX_REFERENCEABLE);
+ node = getSession().getRootNode().addNode(nodePath);
+ node.addMixin(JcrConstants.MIX_REFERENCEABLE);
}
((JCRMailbox)mailbox).merge(node);
- session.save();
+ getSession().save();
System.out.println("U="+node.getUUID());
} catch (RepositoryException e) {
e.printStackTrace();
@@ -254,7 +246,7 @@ public class JCRMailboxMapper extends No
JCRMailbox mailbox = (JCRMailbox) findMailboxByUUID(uuid);
mailbox.consumeUid();
try {
- session.save();
+ getSession().save();
} catch (PathNotFoundException e) {
throw new MailboxNotFoundException(uuid);
} catch (RepositoryException e) {
@@ -263,5 +255,11 @@ public class JCRMailboxMapper extends No
return mailbox;
}
+
+ protected void createPathIfNotExists() throws RepositoryException,
PathNotFoundException {
+ if (getSession().getRootNode().hasNode(JCRUtils.createPath(PATH)) ==
false) {
+ getSession().getRootNode().addNode(JCRUtils.createPath(PATH));
+ }
+ }
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
Sun Mar 14 08:49:31 2010
@@ -31,7 +31,7 @@ import javax.jcr.query.QueryResult;
import org.apache.commons.logging.Log;
import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.jcr.JCRImapConstants;
+import org.apache.james.imap.jcr.JCRMapper;
import org.apache.james.imap.jcr.JCRUtils;
import org.apache.james.imap.jcr.mail.model.JCRMailboxMembership;
import org.apache.james.imap.mailbox.MessageRange;
@@ -42,17 +42,15 @@ import org.apache.james.imap.mailbox.Sea
import org.apache.james.imap.mailbox.SearchQuery.NumericRange;
import org.apache.james.imap.store.mail.MessageMapper;
import org.apache.james.imap.store.mail.model.MailboxMembership;
-import org.apache.james.imap.store.transaction.NonTransactionalMapper;
-public class JCRMessageMapper extends NonTransactionalMapper implements
MessageMapper, JCRImapConstants {
+public class JCRMessageMapper extends JCRMapper implements MessageMapper {
private final static String PATH = PROPERTY_PREFIX + "mailboxMemberships";
- private final Session session;
private final Log logger;
private String uuid;
public JCRMessageMapper(final Session session, final String uuid, final
Log logger) {
- this.session = session;
+ super(session);
this.logger = logger;
this.uuid = uuid;
}
@@ -67,7 +65,7 @@ public class JCRMessageMapper extends No
try {
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
return result.getNodes().getSize();
} catch (RepositoryException e) {
@@ -87,7 +85,7 @@ public class JCRMessageMapper extends No
try {
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" +
JCRMailboxMembership.SEEN_PROPERTY +"='" + false +"']";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
return result.getNodes().getSize();
} catch (RepositoryException e) {
@@ -106,7 +104,7 @@ public class JCRMessageMapper extends No
JCRMailboxMembership membership = (JCRMailboxMembership) message;
if (membership.isPersistent()) {
try {
- session.getNodeByUUID(membership.getUUID()).remove();
+ getSession().getNodeByUUID(membership.getUUID()).remove();
} catch (RepositoryException e) {
throw new StorageException(HumanReadableText.DELETED_FAILED,
e);
}
@@ -150,7 +148,7 @@ public class JCRMessageMapper extends No
private List<MailboxMembership> findMessagesInMailboxAfterUID(String uuid,
long uid) throws RepositoryException {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] && [@" +
JCRMailboxMembership.UID_PROPERTY + ">" + uid + "]";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -163,7 +161,7 @@ public class JCRMessageMapper extends No
private List<MailboxMembership> findMessagesInMailboxWithUID(String uuid,
long uid) throws RepositoryException {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] && [@" +
JCRMailboxMembership.UID_PROPERTY + "=" + uid + "]";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -176,7 +174,7 @@ public class JCRMessageMapper extends No
private List<MailboxMembership> findMessagesInMailboxBetweenUIDs(String
uuid, long from, long to) throws RepositoryException {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] && [@" +
JCRMailboxMembership.UID_PROPERTY + ">" + from + "] && [@" +
JCRMailboxMembership.UID_PROPERTY + "<" + to + "]";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -189,7 +187,7 @@ public class JCRMessageMapper extends No
private List<MailboxMembership> findMessagesInMailbox(String uuid) throws
RepositoryException {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "']";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -210,7 +208,7 @@ public class JCRMessageMapper extends No
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" +
JCRMailboxMembership.DELETED_PROPERTY +"=" + true +"]";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -235,7 +233,7 @@ public class JCRMessageMapper extends No
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" +
JCRMailboxMembership.RECENT_PROPERTY +"=" + true +"]";
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -258,7 +256,7 @@ public class JCRMessageMapper extends No
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" +
JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] && [@" +
JCRMailboxMembership.SEEN_PROPERTY +"=" + false +"] order by @" +
JCRMailboxMembership.UID_PROPERTY;
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString,
Query.XPATH).execute();
NodeIterator iterator = result.getNodes();
@@ -284,13 +282,13 @@ public class JCRMessageMapper extends No
try {
if (membership.isPersistent()) {
- messageNode = session.getNodeByUUID(membership.getUUID());
+ messageNode = getSession().getNodeByUUID(membership.getUUID());
} else {
- messageNode =
session.getRootNode().addNode(JCRUtils.createPath(PATH,
String.valueOf(membership.getUid())));
+ messageNode =
getSession().getRootNode().addNode(JCRUtils.createPath(PATH,
String.valueOf(membership.getUid())));
}
membership.merge(messageNode);
- session.save();
+ getSession().save();
} catch (RepositoryException e) {
@@ -310,7 +308,7 @@ public class JCRMessageMapper extends No
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
final String xpathQuery = formulateXPath(uuid, query);
- QueryManager manager = session.getWorkspace().getQueryManager();
+ QueryManager manager =
getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(xpathQuery,
Query.XPATH).execute();
NodeIterator it = result.getNodes();
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
Sun Mar 14 08:49:31 2010
@@ -29,6 +29,7 @@ import javax.jcr.Session;
import org.apache.commons.logging.Log;
import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.jcr.JCRMapper;
import org.apache.james.imap.jcr.Persistent;
import org.apache.james.imap.jcr.JCRImapConstants;
import org.apache.james.imap.jcr.JCRUtils;
@@ -44,14 +45,13 @@ import org.apache.james.imap.store.user.
* ends in a "real" action
*
*/
-public class JCRSubscriptionMapper extends NonTransactionalMapper implements
SubscriptionMapper, JCRImapConstants {
+public class JCRSubscriptionMapper extends JCRMapper implements
SubscriptionMapper {
- private final Session session;
private final Log log;
private final static String PATH = PROPERTY_PREFIX + "subscriptions";
public JCRSubscriptionMapper(final Session session, final Log log) {
- this.session = session;
+ super(session);
this.log = log;
}
@@ -70,7 +70,7 @@ public class JCRSubscriptionMapper exten
Node node = ((Persistent) subscription).getNode();
node.remove();
- session.save();
+ getSession().save();
} catch (PathNotFoundException e) {
// do nothing
} catch (RepositoryException e) {
@@ -88,7 +88,7 @@ public class JCRSubscriptionMapper exten
*/
public Subscription findFindMailboxSubscriptionForUser(String user, String
mailbox) throws SubscriptionException {
try {
- Node node =
session.getRootNode().getNode(JCRUtils.createPath(PATH, user, mailbox));
+ Node node =
getSession().getRootNode().getNode(JCRUtils.createPath(PATH, user, mailbox));
return new JCRSubscription(node, log);
} catch (PathNotFoundException e) {
return null;
@@ -107,7 +107,7 @@ public class JCRSubscriptionMapper exten
public List<Subscription> findSubscriptionsForUser(String user) throws
SubscriptionException {
List<Subscription> subList = new ArrayList<Subscription>();
try {
- Node node = session.getRootNode().getNode(JCRUtils.createPath(PATH
, user));
+ Node node =
getSession().getRootNode().getNode(JCRUtils.createPath(PATH , user));
NodeIterator nodeIt = node.getNodes("*");
while (nodeIt.hasNext()) {
subList.add(new JCRSubscription(nodeIt.nextNode(), log));
@@ -133,7 +133,7 @@ public class JCRSubscriptionMapper exten
String mailbox = subscription.getMailbox();
String nodename = JCRUtils.createPath(username, mailbox);
try {
- Node node = session.getRootNode().getNode(PATH);
+ Node node = getSession().getRootNode().getNode(PATH);
Node subNode;
if (node.hasNode(nodename)) {
subNode = node.getNode(nodename);
@@ -144,7 +144,7 @@ public class JCRSubscriptionMapper exten
// Copy new properties to the node
((JCRSubscription)subscription).merge(subNode);
- session.save();
+ getSession().save();
} catch (RepositoryException e) {
throw new SubscriptionException(HumanReadableText.SAVE_FAILED, e);
}
Modified:
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
(original)
+++
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
Sun Mar 14 08:49:31 2010
@@ -76,4 +76,5 @@ public class JPATransactionalMapper exte
entityManager.getTransaction().rollback();
}
}
+
}
Modified:
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
(original)
+++
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxSession.java
Sun Mar 14 08:49:31 2010
@@ -22,6 +22,7 @@ package org.apache.james.imap.mailbox;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import org.apache.commons.logging.Log;
@@ -110,6 +111,9 @@ public interface MailboxSession {
*/
public Collection<Namespace> getSharedSpaces();
+
+ public Map<Object,Object> getAttributes();
+
/**
* Describes a <a href='http://www.isi.edu/in-notes/rfc2342.txt'
rel='tag'>RFC 2342</a> namespace.
*/
@@ -128,4 +132,6 @@ public interface MailboxSession {
*/
public String getPrefix();
}
+
+
}
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
Sun Mar 14 08:49:31 2010
@@ -21,8 +21,10 @@ package org.apache.james.imap.store;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.james.imap.mailbox.MailboxSession;
@@ -50,6 +52,8 @@ public class SimpleMailboxSession implem
private final List<Locale> localePreferences;
+ private final Map<Object, Object> attributes;
+
public SimpleMailboxSession(final long sessionId, final String userName,
final Log log, char deliminator,
final List<Locale> localePreferences) {
super();
@@ -60,6 +64,7 @@ public class SimpleMailboxSession implem
otherUsersSpace = null;
personalSpace = new SimpleMailboxNamespace(deliminator, "");
this.localePreferences = localePreferences;
+ attributes = new HashMap<Object, Object>();
}
/*
@@ -152,4 +157,12 @@ public class SimpleMailboxSession implem
return localePreferences;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxSession#getAttributes()
+ */
+ public Map<Object, Object> getAttributes() {
+ return attributes;
+ }
+
}
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
Sun Mar 14 08:49:31 2010
@@ -120,7 +120,7 @@ public abstract class StoreMailboxManage
synchronized (mailboxes) {
final MailboxMapper mapper = createMailboxMapper(session);
Mailbox mailboxRow = mapper.findMailboxByName(mailboxName);
-
+
if (mailboxRow == null) {
getLog().info("Mailbox '" + mailboxName + "' not found.");
throw new MailboxNotFoundException(mailboxName);
@@ -253,7 +253,6 @@ public abstract class StoreMailboxManage
}
});
-
}
}
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
Sun Mar 14 08:49:31 2010
@@ -92,7 +92,7 @@ public abstract class StoreSubscriptionM
final Collection<String> results = new HashSet<String>(INITIAL_SIZE);
for (Subscription subscription:subscriptions) {
results.add(subscription.getMailbox());
- }
+ }
return results;
}
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
Sun Mar 14 08:49:31 2010
@@ -27,7 +27,7 @@ import org.apache.james.imap.mailbox.Mai
* This class is mostly useful for Mapper implementations which not support
Transactions
*
*/
-public class NonTransactionalMapper extends AbstractTransactionalMapper {
+public abstract class NonTransactionalMapper extends
AbstractTransactionalMapper {
/**
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java?rev=922790&r1=922789&r2=922790&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
Sun Mar 14 08:49:31 2010
@@ -35,7 +35,7 @@ public interface TransactionalMapper {
* @throws MailboxException
*/
public void execute(Transaction transaction) throws MailboxException;
-
+
/**
* Unit of work executed in a Transaction
*
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=922790&r1=922789&r2=922790&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 Mar 14 08:49:31 2010
@@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -49,6 +50,7 @@ import org.apache.james.imap.mailbox.Sub
import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
import org.apache.james.imap.store.Authenticator;
+import org.apache.james.imap.store.SimpleMailboxSession;
import org.apache.james.imap.store.Subscriber;
import org.apache.james.mailboxmanager.torque.om.MailboxRow;
import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
@@ -193,6 +195,7 @@ public class TorqueMailboxManager implem
}
}
+ @SuppressWarnings("unchecked")
public void renameMailbox(String from, String to, MailboxSession session)
throws MailboxException {
getLog().debug("renameMailbox " + from + " to " + to);
@@ -252,6 +255,7 @@ public class TorqueMailboxManager implem
fromMailbox.copyTo(set, toMailbox, session);
}
+ @SuppressWarnings("unchecked")
public List<MailboxMetaData> search(final MailboxQuery mailboxExpression,
MailboxSession session)
throws MailboxException {
final char localWildcard = mailboxExpression.getLocalWildcard();
@@ -303,6 +307,7 @@ public class TorqueMailboxManager implem
* @return true when the mailbox has children, false otherwise
* @throws TorqueException
*/
+ @SuppressWarnings("unchecked")
private boolean hasChildren(String name) throws TorqueException {
final Criteria criteria = new Criteria();
criteria.add(MailboxRowPeer.NAME, (Object)(name + delimiter +
SQL_WILDCARD_CHAR), Criteria.LIKE);
@@ -358,9 +363,8 @@ public class TorqueMailboxManager implem
return createSession(userName, log);
}
- @SuppressWarnings("unchecked")
- private TorqueMailboxSession createSession(String userName, Log log) {
- return new TorqueMailboxSession(random.nextLong(), log, userName,
delimiter, Collections.EMPTY_LIST);
+ private MailboxSession createSession(String userName, Log log) {
+ return new SimpleMailboxSession(random.nextLong(), userName, log,
delimiter, new ArrayList<Locale>());
}
public String resolve(final String userName, String mailboxPath) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]