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/03/15 15:57:09 UTC
svn commit: r923276 - in /james/imap/trunk:
deployment/src/test/java/org/apache/james/imap/functional/jcr/
jcr/src/main/java/org/apache/james/imap/jcr/
jcr/src/main/java/org/apache/james/imap/jcr/mail/
jcr/src/main/java/org/apache/james/imap/jcr/mail/m...
Author: norman
Date: Mon Mar 15 14:57:08 2010
New Revision: 923276
URL: http://svn.apache.org/viewvc?rev=923276&view=rev
Log:
Some more fixes for JCR (IMAP-93). Still investigate in bugs..
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
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/mail/model/JCRHeader.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
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=923276&r1=923275&r2=923276&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 Mon Mar 15 14:57:08 2010
@@ -92,12 +92,7 @@ public class JCRHostSystem extends ImapH
public void resetData() throws Exception {
resetUserMetaData();
- Session session = repository.login(new SimpleCredentials("user", new char[0]), "default");
- javax.jcr.Node root = session.getRootNode();
- if (root.hasNode("mailboxes")) {
- root.getNode("mailboxes").remove();
- }
- session.save();
+ mailboxManager.deleteEverything();
//repository.shutdown();
}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRGlobalUserMailboxManager.java Mon Mar 15 14:57:08 2010
@@ -26,12 +26,15 @@ import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.jcr.mail.JCRMailboxMapper;
import org.apache.james.imap.mailbox.MailboxException;
import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.store.Authenticator;
import org.apache.james.imap.store.StoreMailbox;
import org.apache.james.imap.store.Subscriber;
+import org.apache.james.imap.store.mail.MailboxMapper;
import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
/**
* JCR based MailboxManager which use the same username and password to obtain a
@@ -56,6 +59,20 @@ public class JCRGlobalUserMailboxManager
}
+ public void deleteEverything() throws MailboxException {
+ Session session = getSession(null);
+ final MailboxMapper mapper = new JCRMailboxMapper(session,getLog());
+ mapper.execute(new TransactionalMapper.Transaction() {
+
+ public void run() throws MailboxException {
+ mapper.deleteAll();
+ mailboxes.clear();
+ }
+
+ });
+ session.logout();
+ }
+
@Override
protected StoreMailbox createMailbox(Mailbox mailboxRow, MailboxSession session) {
JCRMailbox mailbox = new JCRGlobalMailbox((org.apache.james.imap.jcr.mail.model.JCRMailbox) mailboxRow, session, getRepository(), getWorkspace(), username, password, getLog());
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java Mon Mar 15 14:57:08 2010
@@ -100,12 +100,15 @@ public class JCRMailbox extends StoreMai
@Override
protected MessageMapper createMessageMapper(MailboxSession session) throws MailboxException {
PasswordAwareUser user = (PasswordAwareUser)getMailboxSession().getUser();
+
+
JCRMessageMapper messageMapper = (JCRMessageMapper) session.getAttributes().get(MESSAGE_MAPPER);
if (messageMapper == null) {
messageMapper = new JCRMessageMapper(getSession(user), getMailboxUUID(), log);
session.getAttributes().put(MESSAGE_MAPPER, messageMapper);
}
return messageMapper;
+
}
protected JCRMailboxMapper createMailboxMapper(MailboxSession session) throws MailboxException {
@@ -116,6 +119,7 @@ public class JCRMailbox extends StoreMai
session.getAttributes().put(MAILBOX_MAPPER, mapper);
}
return mapper;
+
}
@Override
@@ -166,13 +170,10 @@ public class JCRMailbox extends StoreMai
@Override
protected void onLogout(MailboxSession session) {
+
JCRMessageMapper mapper = (JCRMessageMapper) session.getAttributes().get(MESSAGE_MAPPER);
if (mapper != null) {
mapper.destroy();
}
- JCRMailboxMapper mailboxMapper = (JCRMailboxMapper) session.getAttributes().get(MAILBOX_MAPPER);
- if (mailboxMapper != null) {
- mailboxMapper.destroy();
- }
}
}
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=923276&r1=923275&r2=923276&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 Mon Mar 15 14:57:08 2010
@@ -55,13 +55,13 @@ public class JCRMailboxManager extends S
private final Repository repository;
private final String workspace;
private final Log logger = LogFactory.getLog(JCRMailboxManager.class);
- public final static String MAPPER = "MAILBOX_MAPPER";
public JCRMailboxManager(final Authenticator authenticator, final Subscriber subscriber, final Repository repository, final String workspace) {
super(authenticator, subscriber);
this.repository = repository;
this.workspace = workspace;
}
+
@Override
protected StoreMailbox createMailbox(Mailbox mailboxRow, MailboxSession session) {
JCRMailbox mailbox = new JCRMailbox((org.apache.james.imap.jcr.mail.model.JCRMailbox) mailboxRow, session, getRepository(), getWorkspace(), getLog());
@@ -70,10 +70,11 @@ public class JCRMailboxManager extends S
@Override
protected MailboxMapper createMailboxMapper(MailboxSession session) throws MailboxException {
- JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(MAPPER);
+
+ JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(JCRMailbox.MAILBOX_MAPPER);
if (mapper == null) {
mapper = new JCRMailboxMapper(getSession(session), logger);
- session.getAttributes().put(MAPPER, mapper);
+ session.getAttributes().put(JCRMailbox.MAILBOX_MAPPER, mapper);
}
return mapper;
@@ -144,7 +145,7 @@ public class JCRMailboxManager extends S
@Override
protected void onLogout(MailboxSession session) {
- JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(MAPPER);
+ JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(JCRMailbox.MAILBOX_MAPPER);
if (mapper != null) {
mapper.destroy();
}
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=923276&r1=923275&r2=923276&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 Mon Mar 15 14:57:08 2010
@@ -66,6 +66,8 @@ public class JCRMailboxMapper extends JC
public long countMailboxesWithName(String name) throws StorageException {
try {
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH + "//element(*)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "']";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -96,6 +98,8 @@ public class JCRMailboxMapper extends JC
*/
public void delete(Mailbox mailbox) throws StorageException {
try {
+ getSession().refresh(true);
+
getSession().getNodeByUUID(((JCRMailbox) mailbox).getUUID()).remove();
getSession().save();
} catch (PathNotFoundException e) {
@@ -113,6 +117,8 @@ public class JCRMailboxMapper extends JC
*/
public void deleteAll() throws StorageException {
try {
+ getSession().refresh(true);
+
getSession().getRootNode().getNode(PATH).remove();
getSession().save();
@@ -134,6 +140,8 @@ public class JCRMailboxMapper extends JC
*/
public boolean existsMailboxStartingWith(String mailboxName) throws StorageException {
try {
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH + "//element(*)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'" +mailboxName+"%')]";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -155,6 +163,8 @@ public class JCRMailboxMapper extends JC
public Mailbox findMailboxByUUID(String uuid) throws StorageException, MailboxNotFoundException {
try {
+ getSession().refresh(true);
+
return new JCRMailbox(getSession().getNodeByUUID(uuid),logger);
} catch (PathNotFoundException e) {
throw new MailboxNotFoundException(uuid);
@@ -172,6 +182,8 @@ public class JCRMailboxMapper extends JC
*/
public Mailbox findMailboxByName(String name) throws StorageException, MailboxNotFoundException {
try {
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH + "//element(*)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "']";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -197,7 +209,9 @@ public class JCRMailboxMapper extends JC
*/
public List<Mailbox> findMailboxWithNameLike(String name) throws StorageException {
List<Mailbox> mailboxList = new ArrayList<Mailbox>();
- try {
+ try {
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
String queryString = "//" + PATH + "//element(*)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'%" + name + "%')]";
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -224,16 +238,22 @@ public class JCRMailboxMapper extends JC
String nodePath = JCRUtils.createPath(PATH,mailbox.getName());
try {
+ getSession().refresh(true);
+
createPathIfNotExists();
+ JCRMailbox jcrMailbox = (JCRMailbox)mailbox;
+
Node node;
- if (getSession().getRootNode().hasNode(nodePath)) {
- node = getSession().getRootNode().getNode(nodePath);
- } else {
+ if (jcrMailbox.isPersistent() == false) {
node = getSession().getRootNode().addNode(nodePath);
node.addMixin(JcrConstants.MIX_REFERENCEABLE);
+ } else {
+ node = jcrMailbox.getNode();
}
- ((JCRMailbox)mailbox).merge(node);
+
+ jcrMailbox.merge(node);
+
getSession().save();
} catch (RepositoryException e) {
e.printStackTrace();
@@ -246,6 +266,8 @@ public class JCRMailboxMapper extends JC
JCRMailbox mailbox = (JCRMailbox) findMailboxByUUID(uuid);
mailbox.consumeUid();
try {
+ getSession().refresh(true);
+
getSession().save();
} catch (PathNotFoundException e) {
throw new MailboxNotFoundException(uuid);
@@ -257,6 +279,8 @@ public class JCRMailboxMapper extends JC
}
protected void createPathIfNotExists() throws RepositoryException, PathNotFoundException {
+ getSession().refresh(true);
+
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=923276&r1=923275&r2=923276&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 Mon Mar 15 14:57:08 2010
@@ -49,7 +49,7 @@ public class JCRMessageMapper extends JC
private final static String PATH = PROPERTY_PREFIX + "mailboxMemberships";
private final Log logger;
- private String uuid;
+ private final String uuid;
public JCRMessageMapper(final Session session, final String uuid, final Log logger) {
super(session);
@@ -64,8 +64,10 @@ public class JCRMessageMapper extends JC
* org.apache.james.imap.store.mail.MessageMapper#countMessagesInMailbox()
*/
public long countMessagesInMailbox() throws StorageException {
-
+
try {
+ getSession().refresh(true);
+
String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -97,6 +99,8 @@ public class JCRMessageMapper extends JC
public long countUnseenMessagesInMailbox() throws StorageException {
try {
+ getSession().refresh(true);
+
String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.SEEN_PROPERTY +"='false']";
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -129,6 +133,8 @@ public class JCRMessageMapper extends JC
JCRMailboxMembership membership = (JCRMailboxMembership) message;
if (membership.isPersistent()) {
try {
+ getSession().refresh(true);
+
getSession().getNodeByUUID(membership.getUUID()).remove();
getSession().save();
} catch (RepositoryException e) {
@@ -175,7 +181,10 @@ public class JCRMessageMapper extends JC
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 + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">" + uid + "]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "]";
+
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -189,6 +198,9 @@ public class JCRMessageMapper extends JC
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 + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + "=" + uid + "]";
+
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -201,7 +213,29 @@ public class JCRMessageMapper extends JC
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 + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">" + from + "] AND [@" + JCRMailboxMembership.UID_PROPERTY + "<" + to + "]";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + JCRMailboxMembership.UID_PROPERTY + "<=" + to + "]";
+
+ getSession().refresh(true);
+
+
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
+ QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
+
+ NodeIterator iterator = result.getNodes();
+ while (iterator.hasNext()) {
+ list.add(new JCRMailboxMembership(iterator.nextNode(), logger));
+ }
+ return list;
+ }
+
+ private List<MailboxMembership> findMessagesInMailbox(String uuid) throws RepositoryException {
+ List<MailboxMembership> list = new ArrayList<MailboxMembership>();
+
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
+
+ getSession().refresh(true);
+
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -212,10 +246,48 @@ public class JCRMessageMapper extends JC
return list;
}
- private List<MailboxMembership> findMessagesInMailbox(String uuid) throws RepositoryException {
+
+
+ private List<MailboxMembership> findDeletedMessagesInMailboxAfterUID(String uuid, long uid) throws RepositoryException {
+ List<MailboxMembership> list = new ArrayList<MailboxMembership>();
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
+ getSession().refresh(true);
+
+
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
+ QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
+
+ NodeIterator iterator = result.getNodes();
+ while (iterator.hasNext()) {
+ list.add(new JCRMailboxMembership(iterator.nextNode(), logger));
+ }
+ return list;
+ }
+
+ private List<MailboxMembership> findDeletedMessagesInMailboxWithUID(String uuid, long uid) throws RepositoryException {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + "=" + uid + "] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
+
+ getSession().refresh(true);
+
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
+ QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
+
+ NodeIterator iterator = result.getNodes();
+ while (iterator.hasNext()) {
+ JCRMailboxMembership member = new JCRMailboxMembership(iterator.nextNode(), logger);
+ list.add(member);
+ }
+ return list;
+ }
+
+ private List<MailboxMembership> findDeletedMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws RepositoryException {
+ List<MailboxMembership> list = new ArrayList<MailboxMembership>();
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + JCRMailboxMembership.UID_PROPERTY + "<=" + to + "] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
+
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -225,6 +297,24 @@ public class JCRMessageMapper extends JC
}
return list;
}
+
+ private List<MailboxMembership> findDeletedMessagesInMailbox(String uuid) throws RepositoryException {
+
+ List<MailboxMembership> list = new ArrayList<MailboxMembership>();
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
+
+ getSession().refresh(true);
+
+ QueryManager manager = getSession().getWorkspace().getQueryManager();
+ QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
+
+ NodeIterator iterator = result.getNodes();
+ while (iterator.hasNext()) {
+ JCRMailboxMembership member = new JCRMailboxMembership(iterator.nextNode(), logger);
+ list.add(member);
+ }
+ return list;
+ }
/*
* (non-Javadoc)
@@ -235,16 +325,26 @@ public class JCRMessageMapper extends JC
*/
public List<MailboxMembership> findMarkedForDeletionInMailbox(MessageRange set) throws StorageException {
try {
- List<MailboxMembership> list = new ArrayList<MailboxMembership>();
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.DELETED_PROPERTY +"='true']";
- QueryManager manager = getSession().getWorkspace().getQueryManager();
- QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
-
- NodeIterator iterator = result.getNodes();
- while(iterator.hasNext()) {
- list.add(new JCRMailboxMembership(iterator.nextNode(), logger));
+ final List<MailboxMembership> results;
+ final long from = set.getUidFrom();
+ final long to = set.getUidTo();
+ final Type type = set.getType();
+ switch (type) {
+ default:
+ case ALL:
+ results = findDeletedMessagesInMailbox(uuid);
+ break;
+ case FROM:
+ results = findDeletedMessagesInMailboxAfterUID(uuid, from);
+ break;
+ case ONE:
+ results = findDeletedMessagesInMailboxWithUID(uuid, from);
+ break;
+ case RANGE:
+ results = findDeletedMessagesInMailboxBetweenUIDs(uuid, from, to);
+ break;
}
- return list;
+ return results;
} catch (RepositoryException e) {
e.printStackTrace();
throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
@@ -263,6 +363,9 @@ public class JCRMessageMapper extends JC
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.RECENT_PROPERTY +"='true']";
+
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -286,7 +389,10 @@ public class JCRMessageMapper extends JC
public List<MailboxMembership> findUnseenMessagesInMailboxOrderByUid() throws StorageException {
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
- String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.SEEN_PROPERTY +"='false'] order by @" + JCRMailboxMembership.UID_PROPERTY;
+ String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.SEEN_PROPERTY +"='false'] order by @" + JCRMailboxMembership.UID_PROPERTY + " ASC";
+
+ getSession().refresh(true);
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -309,18 +415,23 @@ public class JCRMessageMapper extends JC
* imap.store.mail.model.MailboxMembership)
*/
public void save(MailboxMembership message) throws StorageException {
- Node messageNode;
JCRMailboxMembership membership = (JCRMailboxMembership) message;
try {
+ getSession().refresh(true);
+
createPathIfNotExists();
-
- if (membership.isPersistent()) {
- messageNode = getSession().getNodeByUUID(membership.getUUID());
- } else {
+ Node messageNode;
+
+ if (membership.isPersistent() == false) {
messageNode = getSession().getRootNode().addNode(JCRUtils.createPath(PATH, String.valueOf(membership.getUid())));
messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
+
+ } else {
+ messageNode = membership.getNode();
}
+
membership.merge(messageNode);
+
getSession().save();
@@ -342,6 +453,10 @@ public class JCRMessageMapper extends JC
try {
List<MailboxMembership> list = new ArrayList<MailboxMembership>();
final String xpathQuery = formulateXPath(uuid, query);
+
+ getSession().refresh(true);
+
+
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(xpathQuery, Query.XPATH).execute();
@@ -392,6 +507,8 @@ public class JCRMessageMapper extends JC
protected void createPathIfNotExists() throws RepositoryException, PathNotFoundException {
+ getSession().refresh(true);
+
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/model/JCRHeader.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRHeader.java Mon Mar 15 14:57:08 2010
@@ -133,14 +133,16 @@ public class JCRHeader extends AbstractC
* @see org.apache.james.imap.jcr.IsPersistent#merge(javax.jcr.Node)
*/
public void merge(Node node) throws RepositoryException {
- node.setProperty(FIELDNAME_PROPERTY, fieldName);
- node.setProperty(LINENUMBER_PROPERTY, lineNumber);
- node.setProperty(VALUE_PROPERTY, value);
+ node.setProperty(FIELDNAME_PROPERTY, getFieldName());
+ node.setProperty(LINENUMBER_PROPERTY, getLineNumber());
+ node.setProperty(VALUE_PROPERTY, getValue());
+ /*
this.node = node;
this.fieldName = null;
this.lineNumber = 0;
this.value = null;
+ */
}
}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailbox.java Mon Mar 15 14:57:08 2010
@@ -91,7 +91,7 @@ public class JCRMailbox implements Mailb
try {
return node.getProperty(LASTUID_PROPERTY).getLong();
} catch (RepositoryException e) {
- logger.error("Unable to access property " + ID_PROPERTY, e);
+ logger.error("Unable to access property " + LASTUID_PROPERTY, e);
}
}
return lastUid;
@@ -173,16 +173,18 @@ public class JCRMailbox implements Mailb
* @see org.apache.james.imap.jcr.Persistent#merge(javax.jcr.Node)
*/
public void merge(Node node) throws RepositoryException {
- node.setProperty(ID_PROPERTY, id);
- node.setProperty(NAME_PROPERTY, name);
- node.setProperty(UIDVALIDITY_PROPERTY, uidValidity);
- node.setProperty(LASTUID_PROPERTY, lastUid);
+ node.setProperty(ID_PROPERTY, getMailboxId());
+ node.setProperty(NAME_PROPERTY, getName());
+ node.setProperty(UIDVALIDITY_PROPERTY, getUidValidity());
+ node.setProperty(LASTUID_PROPERTY, getLastUid());
this.node = node;
+ /*
id = 0;
lastUid = 0;
name = null;
uidValidity = 0;
+ */
}
public String getUUID() {
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java Mon Mar 15 14:57:08 2010
@@ -124,6 +124,14 @@ public class JCRMailboxMembership extend
* org.apache.james.imap.store.mail.model.MailboxMembership#getDocument()
*/
public Document getDocument() {
+ if (isPersistent()) {
+ try {
+ return new JCRMessage(node.getNode(MESSAGE_NODE), logger);
+ } catch (RepositoryException e) {
+ logger.error("Unable to access node " + MESSAGE_NODE,
+ e);
+ }
+ }
return message;
}
@@ -137,12 +145,10 @@ public class JCRMailboxMembership extend
public Date getInternalDate() {
if (isPersistent()) {
try {
- return node.getProperty(INTERNAL_DATE_PROPERTY).getDate()
- .getTime();
+ return node.getProperty(INTERNAL_DATE_PROPERTY).getDate().getTime();
} catch (RepositoryException e) {
- logger
- .error("Unable to access property " + FLAGGED_PROPERTY,
+ logger.error("Unable to access property " + FLAGGED_PROPERTY,
e);
}
return null;
@@ -413,32 +419,38 @@ public class JCRMailboxMembership extend
* @see org.apache.james.imap.jcr.Persistent#merge(javax.jcr.Node)
*/
public void merge(Node node) throws RepositoryException {
- node.setProperty(MAILBOX_UUID_PROPERTY, mailboxUUID);
- node.setProperty(UID_PROPERTY, uid);
- node.setProperty(SIZE_PROPERTY, size);
- node.setProperty(ANSWERED_PROPERTY, answered);
- node.setProperty(DELETED_PROPERTY, deleted);
- node.setProperty(DRAFT_PROPERTY, draft);
- node.setProperty(FLAGGED_PROPERTY, flagged);
- node.setProperty(RECENT_PROPERTY, recent);
+ node.setProperty(MAILBOX_UUID_PROPERTY, getMailboxUUID());
+ node.setProperty(UID_PROPERTY, getUid());
+ node.setProperty(SIZE_PROPERTY, getSize());
+ node.setProperty(ANSWERED_PROPERTY, isAnswered());
+ node.setProperty(DELETED_PROPERTY, isDeleted());
+ node.setProperty(DRAFT_PROPERTY, isDraft());
+ node.setProperty(FLAGGED_PROPERTY, isFlagged());
+ node.setProperty(RECENT_PROPERTY, isRecent());
- node.setProperty(SEEN_PROPERTY, seen);
+ node.setProperty(SEEN_PROPERTY, isSeen());
+
+ if (getInternalDate() == null) {
+ internalDate = new Date();
+ }
Calendar cal = Calendar.getInstance();
- cal.setTime(internalDate);
+
+ cal.setTime(getInternalDate());
node.setProperty(INTERNAL_DATE_PROPERTY, cal);
Node messageNode;
if (node.hasNode(MESSAGE_NODE)) {
messageNode = node.getNode(MESSAGE_NODE);
} else {
- messageNode = node.addNode("message");
+ messageNode = node.addNode(MESSAGE_NODE);
messageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);
}
- message.merge(messageNode);
+ ((JCRMessage)getDocument()).merge(messageNode);
this.node = node;
+ /*
answered = false;
deleted = false;
draft = false;
@@ -450,6 +462,7 @@ public class JCRMailboxMembership extend
seen = false;
size = 0;
uid = 0;
+ */
}
}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java Mon Mar 15 14:57:08 2010
@@ -292,15 +292,15 @@ public class JCRMessage extends Abstract
} else {
contentNode = node.getNode(JcrConstants.JCR_CONTENT);
}
- contentNode.setProperty(JcrConstants.JCR_DATA, new ByteArrayInputStream(content));
- contentNode.setProperty(JcrConstants.JCR_MIMETYPE, mediaType);
+ contentNode.setProperty(JcrConstants.JCR_DATA, new ByteArrayInputStream(getFullContent().array()));
+ contentNode.setProperty(JcrConstants.JCR_MIMETYPE, getMediaType());
- node.setProperty(FULL_CONTENT_OCTETS_PROPERTY, fullContentOctets);
- if (textualLineCount != null) {
- node.setProperty(TEXTUAL_LINE_COUNT_PROPERTY, textualLineCount);
+ node.setProperty(FULL_CONTENT_OCTETS_PROPERTY, getFullContentOctets());
+ if (getTextualLineCount() != null) {
+ node.setProperty(TEXTUAL_LINE_COUNT_PROPERTY, getTextualLineCount());
}
- node.setProperty(SUBTYPE_PROPERTY, subType);
- node.setProperty(BODY_START_OCTET_PROPERTY, new Long(bodyStartOctet));
+ node.setProperty(SUBTYPE_PROPERTY, getSubType());
+ node.setProperty(BODY_START_OCTET_PROPERTY, getBodyStartOctet());
Node headersNode;
if (node.hasNode(HEADERS_NODE)) {
@@ -310,8 +310,8 @@ public class JCRMessage extends Abstract
headersNode = node.addNode(HEADERS_NODE);
}
- for (int i = 0; i < headers.size(); i++) {
- JCRHeader header = (JCRHeader) headers.get(i);
+ for (int i = 0; i < getHeaders().size(); i++) {
+ JCRHeader header = (JCRHeader) getHeaders().get(i);
Node headerNode = headersNode.addNode(header.getFieldName());
header.merge(headerNode);
}
@@ -325,22 +325,24 @@ public class JCRMessage extends Abstract
propertiesNode = node.addNode(PROPERTIES_NODE);
}
- for (int i = 0; i < properties.size(); i++) {
- JCRProperty prop = (JCRProperty) properties.get(i);
+ for (int i = 0; i < getProperties().size(); i++) {
+ JCRProperty prop = (JCRProperty) getProperties().get(i);
Node propNode = propertiesNode.addNode(JCRUtils.createPath(prop.getNamespace()+ "." + prop.getLocalName()));
prop.merge(propNode);
}
this.node = node;
+ /*
content = null;
- headers = null;
+ headers = new ArrayList<JCRHeader>();
fullContentOctets = 0;
mediaType = null;
textualLineCount = null;
subType = null;
properties = null;
bodyStartOctet = 0;
+ */
}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java Mon Mar 15 14:57:08 2010
@@ -156,16 +156,17 @@ public class JCRProperty extends Abstrac
* @see org.apache.james.imap.jcr.IsPersistent#merge(javax.jcr.Node)
*/
public void merge(Node node) throws RepositoryException {
- node.setProperty(NAMESPACE_PROPERTY, namespace);
- node.setProperty(ORDER_PROPERTY, order);
- node.setProperty(LOCALNAME_PROPERTY, localName);
- node.setProperty(VALUE_PROPERTY, value);
+ node.setProperty(NAMESPACE_PROPERTY, getNamespace());
+ node.setProperty(ORDER_PROPERTY, getOrder());
+ node.setProperty(LOCALNAME_PROPERTY, getLocalName());
+ node.setProperty(VALUE_PROPERTY, getValue());
this.node = node;
-
+ /*
namespace = null;
order = 0;
localName = null;
value = null;
+ */
}
}
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=923276&r1=923275&r2=923276&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 Mon Mar 15 14:57:08 2010
@@ -142,22 +142,19 @@ public class JCRSubscriptionMapper exten
public void save(Subscription subscription) throws SubscriptionException {
String username = subscription.getUser();
String mailbox = subscription.getMailbox();
- String nodename = JCRUtils.createPath(username, mailbox);
+ String nodename = JCRUtils.createPath(PATH, username, mailbox);
try {
createPathIfNotExists(PATH);
- Node node = getSession().getRootNode().getNode(PATH);
- Node subNode;
- if (node.hasNode(nodename)) {
- subNode = node.getNode(nodename);
+ Node node;
+ JCRSubscription sub = (JCRSubscription) subscription;
+ if (sub.isPersistent() == false) {
+ node = getSession().getRootNode().getNode(nodename);
+
} else {
- if (node.hasNode(username) == false) {
- node.addNode(username);
- }
- subNode = node.addNode(nodename);
+ node = sub.getNode();
}
-
// Copy new properties to the node
- ((JCRSubscription)subscription).merge(subNode);
+ sub.merge(node);
getSession().save();
} catch (RepositoryException e) {
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/model/JCRSubscription.java Mon Mar 15 14:57:08 2010
@@ -109,12 +109,14 @@ public class JCRSubscription implements
* @see org.apache.james.imap.jcr.IsPersistent#merge(javax.jcr.Node)
*/
public void merge(Node node) throws RepositoryException{
+ node.setProperty(USERNAME_PROPERTY, getUser());
+ node.setProperty(MAILBOX_PROPERTY, getMailbox());
this.node = node;
- node.setProperty(USERNAME_PROPERTY, username);
- node.setProperty(MAILBOX_PROPERTY, mailbox);
+ /*
mailbox = null;
username = null;
+ */
}
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=923276&r1=923275&r2=923276&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java Mon Mar 15 14:57:08 2010
@@ -358,6 +358,9 @@ public abstract class StoreMailbox imple
results.add(member.getUid());
if (reset) {
member.unsetRecent();
+
+ // persist this to db
+ mapper.save(member);
}
}
}
@@ -439,6 +442,7 @@ public abstract class StoreMailbox imple
public void run() throws MailboxException {
final List<MailboxMembership> members = mapper.findInMailbox(set);
+ System.out.println("FOUND=" + members.size());
for (final MailboxMembership member:members) {
originalFlagsByUid.put(member.getUid(), member.createFlags());
if (replace) {
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=923276&r1=923275&r2=923276&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 Mon Mar 15 14:57:08 2010
@@ -136,7 +136,7 @@ public abstract class StoreMailboxManage
mailboxes.put(mailboxName, result);
// store the mailbox in the session so we can cleanup things later
- session.getAttributes().put(MAILBOX, result);
+ //session.getAttributes().put(MAILBOX, result);
}
return result;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org