Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java (original) +++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java Mon Nov 19 11:56:53 2007 @@ -36,7 +36,6 @@ import org.apache.james.imapserver.processor.base.ImapSessionUtils; import org.apache.james.imapserver.store.MailboxException; import org.apache.james.mailboxmanager.GeneralMessageSet; -import org.apache.james.mailboxmanager.MailboxListener; import org.apache.james.mailboxmanager.MailboxManagerException; import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl; import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession; @@ -69,7 +68,6 @@ AuthorizationException, ProtocolException { ImapMailboxSession mailbox = ImapSessionUtils.getMailbox(session); - MailboxListener silentListener = null; final boolean replace; final boolean value; @@ -84,16 +82,12 @@ value = true; } try { - if (directive.isSilent()) { - silentListener = ImapSessionUtils.getMailbox(session); - } for (int i = 0; i < idSet.length; i++) { final GeneralMessageSet messageSet = GeneralMessageSetImpl .range(idSet[i].getLowVal(), idSet[i].getHighVal(), useUids); - mailbox.setFlags(flags, value, replace, messageSet, - silentListener); + mailbox.setFlags(flags, value, replace, messageSet); } } catch (MailboxManagerException e) { throw new MailboxException(e);
Modified: james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java URL: http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java (original) +++ james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java Mon Nov 19 11:56:53 2007 @@ -20,6 +20,8 @@ package org.apache.james.imapserver; +import java.util.Iterator; + import javax.mail.Flags; import org.apache.avalon.framework.logger.AbstractLogEnabled; @@ -65,14 +67,7 @@ this.clientHostName = clientHostName; this.clientAddress = clientAddress; } - - - - private MailboxManagerProvider getMailboxManagerProvider() - { - return mailboxManagerProvider; - } - + public void unsolicitedResponses( ImapResponse request, boolean useUid ) throws MailboxException { unsolicitedResponses(request, false, useUid); } @@ -88,13 +83,11 @@ .getMessageCount()); response.recentResponse(selected.getMailbox() .getRecentCount(true)); - selected.setSizeChanged(false); } - // Message updates - MessageResult[] flagUpdates = selected.getMailbox().getFlagEvents(true); - for (int i = 0; i < flagUpdates.length; i++) { - MessageResult mr = flagUpdates[i]; + // Message updates + for (final Iterator it = selected.getFlagUpdates(); it.hasNext(); ) { + MessageResult mr = (MessageResult) it.next(); int msn = mr.getMsn(); Flags updatedFlags = mr.getFlags(); StringBuffer out = new StringBuffer("FLAGS "); @@ -115,6 +108,7 @@ response.expungeResponse(mr.getMsn()); } } + selected.reset(); } } catch (MailboxManagerException e) { throw new MailboxException(e); @@ -166,7 +160,7 @@ public void setSelected( ImapMailboxSession mailbox, boolean readOnly ) throws MailboxManagerException { - SelectedMailboxSession sessionMailbox = new SelectedMailboxSession(mailbox, this); + SelectedMailboxSession sessionMailbox = new SelectedMailboxSession(mailbox); setupLogger(sessionMailbox); this.state = ImapSessionState.SELECTED; closeMailbox(); Modified: james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java URL: http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java (original) +++ james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java Mon Nov 19 11:56:53 2007 @@ -21,80 +21,66 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import javax.mail.Flags; import org.apache.avalon.framework.logger.AbstractLogEnabled; -import org.apache.james.imapserver.store.MailboxException; -import org.apache.james.mailboxmanager.MailboxListener; +import org.apache.james.mailboxmanager.GeneralMessageSet; import org.apache.james.mailboxmanager.MailboxManagerException; import org.apache.james.mailboxmanager.MessageResult; +import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl; import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession; +import org.apache.james.mailboxmanager.util.MailboxEventAnalyser; -public class SelectedMailboxSession extends AbstractLogEnabled implements MailboxListener { - - private ImapSession _session; - private boolean _sizeChanged; +//TODO: manage mailbox deletion +public class SelectedMailboxSession extends AbstractLogEnabled { + private ImapMailboxSession mailbox; + + private final MailboxEventAnalyser events; - public SelectedMailboxSession(ImapMailboxSession mailbox, ImapSession session) throws MailboxManagerException { + public SelectedMailboxSession(ImapMailboxSession mailbox) throws MailboxManagerException { this.mailbox = mailbox; - _session = session; - // TODO make this a weak reference (or make sure deselect() is *always* called). - mailbox.addListener(this,MessageResult.MSN | MessageResult.UID); + final long sessionId = mailbox.getSessionId(); + events = new MailboxEventAnalyser(sessionId); + mailbox.addListener(events); } public void deselect() { - mailbox.removeListener(this); + mailbox.removeListener(events); mailbox = null; } - - public void mailboxDeleted() { - try { - _session.closeConnection("Mailbox " + mailbox.getName() + " has been deleted"); - } catch (MailboxManagerException e) { - getLogger().error("error closing connection", e); - } - } - - public boolean isSizeChanged() { - return _sizeChanged; + return events.isSizeChanged(); } - public void setSizeChanged(boolean sizeChanged) { - _sizeChanged = sizeChanged; + public void reset() { + events.reset(); + } + + public Iterator getFlagUpdates() throws MailboxManagerException { + List results = new ArrayList(); + for (final Iterator it = events.flagUpdateUids(); it.hasNext();) { + Long uid = (Long) it.next(); + GeneralMessageSet messageSet = GeneralMessageSetImpl.oneUid(uid.longValue()); + final MessageResult[] messages = mailbox.getMessages(messageSet, MessageResult.FLAGS | MessageResult.MSN); + results.addAll(Arrays.asList(messages)); + } + return results.iterator(); } - public void close() throws MailboxManagerException { + mailbox.removeListener(events); mailbox.close(); mailbox=null; } - public void expunged(MessageResult mr) { - } - - public void added(MessageResult mr) { - _sizeChanged = true; - } - - public void flagsUpdated(MessageResult mr,MailboxListener silentListener) { - } - public ImapMailboxSession getMailbox() { return mailbox; } - public void mailboxRenamed(String origName, String newName) { - // TODO Implementation + public void setSilent(boolean silent) { + events.setSilentFlagChanges(silent); } - } Modified: james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java URL: http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java (original) +++ james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java Mon Nov 19 11:56:53 2007 @@ -114,7 +114,7 @@ if (fetch.isSetSeen() && !result.getFlags().contains(Flags.Flag.SEEN)) { mailbox.setFlags(new Flags(Flags.Flag.SEEN), true, false, - GeneralMessageSetImpl.oneUid(result.getUid()), null); + GeneralMessageSetImpl.oneUid(result.getUid())); result.getFlags().add(Flags.Flag.SEEN); ensureFlagsResponse = true; } Modified: james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java URL: http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java (original) +++ james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java Mon Nov 19 11:56:53 2007 @@ -25,9 +25,9 @@ import org.apache.james.imapserver.ImapResponse; import org.apache.james.imapserver.ImapSession; import org.apache.james.imapserver.ProtocolException; +import org.apache.james.imapserver.SelectedMailboxSession; import org.apache.james.imapserver.store.MailboxException; import org.apache.james.mailboxmanager.GeneralMessageSet; -import org.apache.james.mailboxmanager.MailboxListener; import org.apache.james.mailboxmanager.MailboxManagerException; import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl; import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession; @@ -64,41 +64,46 @@ Flags flags = parser.flagList( request ); parser.endLine( request ); - ImapMailboxSession mailbox = session.getSelected().getMailbox(); - MailboxListener silentListener = null; - - final boolean replace; - final boolean value; - if (directive.getSign() < 0) { - value=false; - replace=false; - } - else if (directive.getSign() > 0) { - value=true; - replace=false; - } - else { - replace=true; - value=true; - } + final SelectedMailboxSession selected = session.getSelected(); try { if (directive.isSilent()) { - silentListener = session.getSelected().getMailbox(); + selected.setSilent(true); } - for (int i = 0; i < idSet.length; i++) { - final GeneralMessageSet messageSet = GeneralMessageSetImpl - .range(idSet[i].getLowVal(), idSet[i].getHighVal(), - useUids); + ImapMailboxSession mailbox = selected.getMailbox(); - mailbox.setFlags(flags, value, replace, messageSet, - silentListener); + final boolean replace; + final boolean value; + if (directive.getSign() < 0) { + value=false; + replace=false; } - } catch (MailboxManagerException e) { - throw new MailboxException(e); + else if (directive.getSign() > 0) { + value=true; + replace=false; + } + else { + replace=true; + value=true; + } + try { + for (int i = 0; i < idSet.length; i++) { + final GeneralMessageSet messageSet = GeneralMessageSetImpl + .range(idSet[i].getLowVal(), idSet[i].getHighVal(), + useUids); + + mailbox.setFlags(flags, value, replace, messageSet); + } + } catch (MailboxManagerException e) { + throw new MailboxException(e); + } + + } finally { + selected.setSilent(false); } boolean omitExpunged = (!useUids); session.unsolicitedResponses( response, omitExpunged , useUids); response.commandComplete( this ); + } Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java (original) +++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java Mon Nov 19 11:56:53 2007 @@ -188,7 +188,7 @@ public void deleteAll(String folder) throws MailboxManagerException { ImapMailboxSession mailbox=getImapMailboxSession(folder); - mailbox.setFlags(new Flags(Flag.DELETED),true,false,GeneralMessageSetImpl.all(),null); + mailbox.setFlags(new Flags(Flag.DELETED),true,false,GeneralMessageSetImpl.all()); mailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.NOTHING); mailbox.close(); } @@ -238,12 +238,12 @@ Set responseSet=new HashSet(rec); responseSet.removeAll(requiredResponseSet); requiredResponseSet.removeAll(new HashSet(rec)); - if (responseSet.size()>0) { - System.out.println("Not awaitet responses: "+responseSet); - } - if (requiredResponseSet.size()>0) { - System.out.println("Missed responses: "+requiredResponseSet); - } +// if (responseSet.size()>0) { +// System.out.println("Not awaitet responses: "+responseSet); +// } +// if (requiredResponseSet.size()>0) { +// System.out.println("Missed responses: "+requiredResponseSet); +// } assertEquals("Missed responses: "+requiredResponseSet,0,requiredResponseSet.size()); assertEquals("Not awaitet responses: "+responseSet,0,responseSet.size()); assertEquals("Status respons differs",counter+" "+command.getExpectedStatusResponse(),statusResponse); @@ -274,7 +274,7 @@ public void setFlags(String mailboxName,long fromUid,long toUid,Flags flags, boolean value, boolean replace) throws MailboxManagerException { ImapMailboxSession mailbox=getImapMailboxSession(mailboxName); - mailbox.setFlags(flags, value, replace, GeneralMessageSetImpl.uidRange(fromUid, toUid), null); + mailbox.setFlags(flags, value, replace, GeneralMessageSetImpl.uidRange(fromUid, toUid)); mailbox.close(); } private ImapMailboxSession getImapMailboxSession(String mailboxName) throws MailboxManagerException { Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java (original) +++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java Mon Nov 19 11:56:53 2007 @@ -47,7 +47,7 @@ mailboxManager.createMailbox(INBOX); mailbox=mailboxManager.getImapMailboxSession(INBOX); collector=new MailboxListenerCollector(); - mailbox.addListener(collector, 0); + mailbox.addListener(collector); assertNotNull(mailbox); } @@ -74,7 +74,7 @@ assertNotNull(mr); assertEquals(6, mr.getUid()); assertEquals(6, mr.getMsn()); - mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.uidRange(1,3), null); + mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.uidRange(1,3)); mailbox.expunge(GeneralMessageSetImpl.all(), 0); mailbox.getExpungedEvents(true); mr=mailbox.getFirstUnseen(MessageResult.UID | MessageResult.MSN); @@ -89,7 +89,7 @@ assertEquals(i+1, mr.getUid()); assertEquals(i+1, mr.getMsn()); } - mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.uidRange(2, 4), null); + mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.uidRange(2, 4)); final MessageResult[] expungeResult1=mailbox.expunge(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN); checkMessageResults(new long[] {2,3,4},new int[] {2,3,4},expungeResult1); @@ -115,8 +115,8 @@ final MessageResult[] getResult3 = mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN); checkMessageResults(new long[] {1,5,6,7,8,9,10},new int[] {1,2,3,4,5,6,7},getResult3); - mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.msnRange(2,4), null); - mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.oneMsn(6), null); + mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.msnRange(2,4)); + mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.oneMsn(6)); final MessageResult[] expungeResult2=mailbox.expunge(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN); checkMessageResults(new long[] {5,6,7,9},new int[] {2,3,4,6},expungeResult2); Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java (original) +++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java Mon Nov 19 11:56:53 2007 @@ -55,32 +55,66 @@ results=new MessageResultImpl[1]; results[0]=new MessageResultImpl(1000l); - tracker.found(new UidRange(1000,1000),results, null); + tracker.found(new UidRange(1000,1000),results); assertCollectorSizes(0,0,0); results[0]=new MessageResultImpl(1001l); - tracker.found(new UidRange(1001,1001),results, null); + tracker.found(new UidRange(1001,1001),results); assertCollectorSizes(1,0,0); assertEquals(1001,((MessageResult) collector.getAddedList(true).get(0)).getUid()); assertCollectorSizes(0,0,0); results[0]=new MessageResultImpl(1001l,new Flags(Flags.Flag.FLAGGED)); - tracker.found(new UidRange(1001,1001),results, null); + tracker.found(new UidRange(1001,1001),results); assertCollectorSizes(0,0,1); result=(MessageResult) collector.getFlaggedList(true).get(0); assertEquals(1001,result.getUid()); assertEquals(new Flags(Flags.Flag.FLAGGED),result.getFlags()); // nothing changed - tracker.found(new UidRange(1001,1001),results,null); + tracker.found(new UidRange(1001,1001),results); assertCollectorSizes(0,0,0); // 1000 got expunged - tracker.found(new UidRange(1000,1001),results,null); + tracker.found(new UidRange(1000,1001),results); assertCollectorSizes(0,1,0); assertEquals(1000,((MessageResult) collector.getExpungedList(true).get(0)).getUid()); } + public void testShouldNotIssueFlagsUpdateEventWhenFlagsNotIncluded() { + MessageResultImpl[] results = new MessageResultImpl[1]; + + MessageResult result; + results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.FLAGGED)); + tracker.found(new UidRange(1000,1000),results); + assertCollectorSizes(0,0,0); + + results[0]=new MessageResultImpl(1000l); + tracker.found(new UidRange(1000,1000),results); + assertCollectorSizes(0,0,0); + + results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.FLAGGED)); + tracker.found(new UidRange(1000,1000),results); + + results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.SEEN)); + tracker.found(new UidRange(1000,1000),results); + assertCollectorSizes(0,0,1); + result=(MessageResult) collector.getFlaggedList(true).get(0); + assertEquals(1000,result.getUid()); + assertEquals(new Flags(Flags.Flag.SEEN),result.getFlags()); + + results[0]=new MessageResultImpl(1000l); + tracker.found(new UidRange(1000,1000),results); + assertCollectorSizes(0,0,0); + + results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.DRAFT)); + tracker.found(new UidRange(1000,1000),results); + assertCollectorSizes(0,0,1); + result=(MessageResult) collector.getFlaggedList(true).get(0); + assertEquals(1000,result.getUid()); + assertEquals(new Flags(Flags.Flag.DRAFT),result.getFlags()); + + } } Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java (original) +++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java Mon Nov 19 11:56:53 2007 @@ -29,6 +29,7 @@ import org.apache.james.mailboxmanager.TestUtil; import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl; import org.apache.james.mailboxmanager.impl.MailboxListenerCollector; +import org.apache.james.mailboxmanager.mailbox.ImapMailbox; import org.apache.james.mailboxmanager.torque.om.MailboxRow; import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer; import org.apache.james.mailboxmanager.torque.om.MessageRow; @@ -49,9 +50,9 @@ MailboxRow mr = new MailboxRow("#users.tuser.INBOX", 100); mr.save(); mr=MailboxRowPeer.retrieveByName("#users.tuser.INBOX"); - TorqueMailbox torqueMailbox = new TorqueMailbox(mr, new UidChangeTracker(null,"#users.tuser.INBOX",100), - new WriterPreferenceReadWriteLock(),null); - torqueMailbox.addListener(new MailboxListenerCollector(), MessageResult.NOTHING); + ImapMailbox torqueMailbox = new TorqueMailbox(mr, new UidChangeTracker(null,"#users.tuser.INBOX",100), + new WriterPreferenceReadWriteLock(),null, 1); + torqueMailbox.addListener(new MailboxListenerCollector()); assertEquals(0,torqueMailbox.getMessageCount()); long time = System.currentTimeMillis(); @@ -85,7 +86,7 @@ Flags f=new Flags(); f.add(Flags.Flag.DELETED); - torqueMailbox.setFlags(f,true,false, GeneralMessageSetImpl.oneUid(1l), null); + torqueMailbox.setFlags(f,true,false, GeneralMessageSetImpl.oneUid(1l)); MessageResult[] messageResults=torqueMailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.UID); assertEquals(1,messageResults.length); assertEquals(1l,messageResults[0].getUid()); Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java (original) +++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java Mon Nov 19 11:56:53 2007 @@ -20,6 +20,7 @@ package org.apache.james.mailboxmanager.wrapper; import org.apache.james.mailboxmanager.GeneralMessageSet; +import org.apache.james.mailboxmanager.MailboxListener; import org.apache.james.mailboxmanager.MailboxManagerException; import org.apache.james.mailboxmanager.MessageResult; import org.apache.james.mailboxmanager.impl.MessageResultImpl; @@ -27,9 +28,7 @@ import org.jmock.Mock; import org.jmock.MockObjectTestCase; import org.jmock.core.Constraint; -import org.jmock.core.constraint.IsEqual; import org.jmock.core.constraint.IsInstanceOf; -import org.jmock.core.constraint.IsSame; public class SessionMailboxWrapperTest extends MockObjectTestCase { @@ -38,16 +37,16 @@ SessionMailboxWrapper sessionMailboxWrapper = new SessionMailboxWrapper(); Mock generalMailboxMock = mock(GeneralMailbox.class); - Constraint[] listenerArgs={new IsSame(sessionMailboxWrapper.getListenerObject()),new IsEqual(new Integer(MessageResult.UID))}; - generalMailboxMock.expects(once()).method("addListener").with(listenerArgs); + final MailboxListener listenerObject = sessionMailboxWrapper.getListenerObject(); + generalMailboxMock.expects(once()).method("addListener").with(same(listenerObject)); Constraint[] getMessagesArgs={new IsInstanceOf(GeneralMessageSet.class),new IsInstanceOf(Integer.class)}; MessageResult[] result={new MessageResultImpl()}; generalMailboxMock.expects(once()).method("getMessages").with(getMessagesArgs).after("addListener").will(returnValue(result)); - generalMailboxMock.expects(once()).method("removeListener").with(listenerArgs[0]).after("getMessages"); + generalMailboxMock.expects(once()).method("removeListener").with(same(listenerObject)).after("getMessages"); sessionMailboxWrapper.setMailbox((GeneralMailbox) generalMailboxMock .proxy()); Modified: james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java URL: http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java (original) +++ james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java Mon Nov 19 11:56:53 2007 @@ -84,14 +84,22 @@ private final ReadWriteLock lock; - TorqueMailbox(final MailboxRow mailboxRow, final UidChangeTracker tracker, final ReadWriteLock lock, final Log log) { + private final long sessionId; + + TorqueMailbox(final MailboxRow mailboxRow, final UidChangeTracker tracker, final ReadWriteLock lock, + final Log log, final long sessionId) { setLog(log); + this.sessionId = sessionId; this.mailboxRow = mailboxRow; this.tracker = tracker; this.lock = lock; tracker.addMailboxListener(getEventDispatcher()); getUidToKeyConverter().setUidValidity(mailboxRow.getUidValidity()); } + + public long getSessionId() { + return sessionId; + } public int getMessageResultTypes() { return MessageResult.FLAGS + MessageResult.INTERNAL_DATE @@ -201,7 +209,7 @@ MessageResult messageResult = fillMessageResult(messageRow, result | MessageResult.UID); checkForScanGap(uid); - getUidChangeTracker().found(messageResult, null); + getUidChangeTracker().found(messageResult); return messageResult; } catch (Exception e) { throw new MailboxManagerException(e); @@ -227,7 +235,7 @@ Criteria criteria=criteriaForMessageSet(set); List messageRows=mailboxRow.getMessageRows(criteria); MessageResult[] messageResults=fillMessageResult(messageRows, MessageResult.UID); - getUidChangeTracker().found(uidRangeForMessageSet(set), messageResults, null); + getUidChangeTracker().found(uidRangeForMessageSet(set), messageResults); } } @@ -297,7 +305,7 @@ MessageResult[] messageResults = fillMessageResult(l, result | MessageResult.UID | MessageResult.FLAGS); checkForScanGap(range.getFromUid()); - getUidChangeTracker().found(range, messageResults, null); + getUidChangeTracker().found(range, messageResults); return messageResults; } @@ -571,7 +579,7 @@ MessageResult messageResult=fillMessageResult((MessageRow) messageRows.get(0), result | MessageResult.UID); if (messageResult!=null) { checkForScanGap(messageResult.getUid()); - getUidChangeTracker().found(messageResult,null); + getUidChangeTracker().found(messageResult); } return messageResult; @@ -660,12 +668,12 @@ } public void setFlags(Flags flags, boolean value, boolean replace, - GeneralMessageSet set, MailboxListener silentListener) + GeneralMessageSet set) throws MailboxManagerException { try { lock.writeLock().acquire(); try { - doSetFlags(flags, value, replace, set, silentListener); + doSetFlags(flags, value, replace, set); } finally { lock.writeLock().release(); } @@ -675,7 +683,7 @@ } } - private void doSetFlags(Flags flags, boolean value, boolean replace, GeneralMessageSet set, MailboxListener silentListener) throws MailboxManagerException { + private void doSetFlags(Flags flags, boolean value, boolean replace, GeneralMessageSet set) throws MailboxManagerException { checkAccess(); set=toUidSet(set); if (!set.isValid() || set.getType()==GeneralMessageSet.TYPE_NOTHING) { @@ -689,7 +697,7 @@ MessageResult.UID | MessageResult.FLAGS); UidRange uidRange=uidRangeForMessageSet(set); checkForScanGap(uidRange.getFromUid()); - getUidChangeTracker().found(uidRange, beforeResults, null); + getUidChangeTracker().found(uidRange, beforeResults); for (Iterator iter = messageRows.iterator(); iter.hasNext();) { final MessageRow messageRow = (MessageRow) iter.next(); final MessageFlags messageFlags = messageRow.getMessageFlags(); @@ -710,13 +718,14 @@ } final MessageResult[] afterResults = fillMessageResult(messageRows, MessageResult.UID | MessageResult.FLAGS); - tracker.found(uidRange, afterResults, silentListener); + tracker.flagsUpdated(afterResults, sessionId); + tracker.found(uidRange, afterResults); } catch (Exception e) { throw new MailboxManagerException(e); } } - public void addListener(MailboxListener listener, int result) throws MailboxManagerException { + public void addListener(MailboxListener listener) throws MailboxManagerException { getEventDispatcher().addMailboxListener(listener); checkAccess(); } @@ -940,7 +949,7 @@ lock.writeLock().acquire(); try { final Flags flags = new Flags(Flags.Flag.DELETED); - doSetFlags(flags, true, false, set, null); + doSetFlags(flags, true, false, set); doExpunge(set, MessageResult.NOTHING); } finally { lock.writeLock().release(); Modified: james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java URL: http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=596413&r1=596412&r2=596413&view=diff ============================================================================== --- james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java (original) +++ james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java Mon Nov 19 11:56:53 2007 @@ -34,6 +34,7 @@ import org.apache.james.mailboxmanager.impl.ListResultImpl; import org.apache.james.mailboxmanager.mailbox.GeneralMailbox; import org.apache.james.mailboxmanager.mailbox.GeneralMailboxSession; +import org.apache.james.mailboxmanager.mailbox.ImapMailbox; import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession; import org.apache.james.mailboxmanager.mailbox.MailboxSession; import org.apache.james.mailboxmanager.manager.MailboxManager; @@ -115,9 +116,10 @@ getMailboxCache().add(mailboxName, tracker); } getLog().info("created ImapMailboxSession "+mailboxName); - final TorqueMailbox torqueMailbox = new TorqueMailbox( - mailboxRow, tracker, lock, getLog()); - final ImapMailboxSessionWrapper wrapper = new ImapMailboxSessionWrapper(torqueMailbox); + final ImapMailbox torqueMailbox = new TorqueMailbox( + mailboxRow, tracker, lock, getLog(), random.nextLong()); + final ImapMailboxSessionWrapper wrapper + = new ImapMailboxSessionWrapper(torqueMailbox); return wrapper; } else { getLog().info("Mailbox '" + mailboxName + "' not found."); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]