Modified: james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=696828&r1=696827&r2=696828&view=diff ============================================================================== --- james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java (original) +++ james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java Thu Sep 18 14:44:56 2008 @@ -71,7 +71,7 @@ public class TorqueMailbox extends AbstractLogEnabled implements Mailbox { private Log log; - + private boolean open = true; private MailboxRow mailboxRow; @@ -79,10 +79,11 @@ private final UidChangeTracker tracker; private final ReadWriteLock lock; - + private final MessageSearches searches; - - TorqueMailbox(final MailboxRow mailboxRow, final ReadWriteLock lock, final Log log) { + + TorqueMailbox(final MailboxRow mailboxRow, final ReadWriteLock lock, + final Log log) { this.searches = new MessageSearches(); setLog(log); this.mailboxRow = mailboxRow; @@ -95,7 +96,8 @@ return mailboxRow.getName(); } - public int getMessageCount(MailboxSession mailboxSession) throws MailboxManagerException { + public int getMessageCount(MailboxSession mailboxSession) + throws MailboxManagerException { try { lock.readLock().acquire(); try { @@ -114,7 +116,8 @@ } public MessageResult appendMessage(MimeMessage message, Date internalDate, - FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxManagerException { + FetchGroup fetchGroup, MailboxSession mailboxSession) + throws MailboxManagerException { try { checkAccess(); @@ -127,7 +130,8 @@ // exclusive // Uid // TODO create own message_id and assign uid later - // at the moment it could lead to the situation that uid 5 is + // at the moment it could lead to the situation that uid 5 + // is // inserted long before 4, when // mail 4 is big and comes over a slow connection. long uid = myMailboxRow.getLastUid(); @@ -141,14 +145,15 @@ final int size = size(message); messageRow.setSize(size); populateFlags(message, messageRow); - + addHeaders(message, messageRow); MessageBody mb = populateBody(message); messageRow.addMessageBody(mb); save(messageRow); - MessageResult messageResult = fillMessageResult(messageRow, fetchGroup); + MessageResult messageResult = fillMessageResult(messageRow, + fetchGroup); getUidChangeTracker().found(messageResult); return messageResult; } catch (Exception e) { @@ -163,18 +168,21 @@ } } - private void populateFlags(MimeMessage message, MessageRow messageRow) throws MessagingException, TorqueException { + private void populateFlags(MimeMessage message, MessageRow messageRow) + throws MessagingException, TorqueException { final Flags flags = message.getFlags(); buildFlags(messageRow, flags); } - private void buildFlags(MessageRow messageRow, final Flags flags) throws TorqueException { + private void buildFlags(MessageRow messageRow, final Flags flags) + throws TorqueException { MessageFlags messageFlags = new MessageFlags(); messageFlags.setFlags(flags); messageRow.addMessageFlags(messageFlags); } - private MessageBody populateBody(MimeMessage message) throws IOException, MessagingException { + private MessageBody populateBody(MimeMessage message) throws IOException, + MessagingException { MessageBody mb = new MessageBody(); InputStream is = message.getInputStream(); @@ -184,11 +192,12 @@ return mb; } - private void addHeaders(MimeMessage message, MessageRow messageRow) throws MessagingException, TorqueException { + private void addHeaders(MimeMessage message, MessageRow messageRow) + throws MessagingException, TorqueException { int line_number = 0; for (Enumeration lines = message.getAllHeaderLines(); lines - .hasMoreElements();) { + .hasMoreElements();) { String line = (String) lines.nextElement(); int colon = line.indexOf(": "); if (colon > 0) { @@ -203,7 +212,8 @@ } } - private int size(MimeMessage message) throws IOException, MessagingException { + private int size(MimeMessage message) throws IOException, + MessagingException { // TODO very ugly size mesurement ByteArrayOutputStream sizeBos = new ByteArrayOutputStream(); message.writeTo(new CRLFOutputStream(sizeBos)); @@ -211,7 +221,8 @@ return size; } - private void save(MessageRow messageRow) throws TorqueException, InterruptedException { + private void save(MessageRow messageRow) throws TorqueException, + InterruptedException { try { lock.writeLock().acquire(); messageRow.save(); @@ -220,7 +231,8 @@ } } - private MailboxRow reserveNextUid() throws InterruptedException, MailboxManagerException { + private MailboxRow reserveNextUid() throws InterruptedException, + MailboxManagerException { final MailboxRow myMailboxRow; try { lock.writeLock().acquire(); @@ -242,14 +254,16 @@ if (set.getType() == MessageRange.TYPE_ALL) { // empty Criteria = everything } else if (set.getType() == MessageRange.TYPE_UID) { - + if (set.getUidFrom() == set.getUidTo()) { criteria.add(MessageRowPeer.UID, set.getUidFrom()); } else { - Criteria.Criterion criterion1=criteria.getNewCriterion(MessageRowPeer.UID, new Long(set.getUidFrom()), + Criteria.Criterion criterion1 = criteria.getNewCriterion( + MessageRowPeer.UID, new Long(set.getUidFrom()), Criteria.GREATER_EQUAL); if (set.getUidTo() > 0) { - Criteria.Criterion criterion2=criteria.getNewCriterion(MessageRowPeer.UID, new Long(set.getUidTo()), + Criteria.Criterion criterion2 = criteria.getNewCriterion( + MessageRowPeer.UID, new Long(set.getUidTo()), Criteria.LESS_EQUAL); criterion1.and(criterion2); } @@ -262,8 +276,8 @@ return criteria; } - public Iterator getMessages(final MessageRange set, FetchGroup fetchGroup, MailboxSession mailboxSession) - throws MailboxManagerException { + public Iterator getMessages(final MessageRange set, FetchGroup fetchGroup, + MailboxSession mailboxSession) throws MailboxManagerException { try { lock.readLock().acquire(); try { @@ -271,7 +285,8 @@ UidRange range = uidRangeForMessageSet(set); try { Criteria c = criteriaForMessageSet(set); - c.add(MessageFlagsPeer.MAILBOX_ID,getMailboxRow().getMailboxId()); + c.add(MessageFlagsPeer.MAILBOX_ID, getMailboxRow() + .getMailboxId()); return getMessages(fetchGroup, range, c); } catch (TorqueException e) { throw new MailboxManagerException(e); @@ -286,16 +301,20 @@ } } - private TorqueResultIterator getMessages(FetchGroup result, UidRange range, Criteria c) throws TorqueException, MessagingException, MailboxManagerException { + private TorqueResultIterator getMessages(FetchGroup result, UidRange range, + Criteria c) throws TorqueException, MessagingException, + MailboxManagerException { List rows = MessageRowPeer.doSelectJoinMessageFlags(c); final TorqueResultIterator results = getResults(result, rows); getUidChangeTracker().found(range, results.getMessageFlags()); return results; } - private TorqueResultIterator getResults(FetchGroup result, List rows) throws TorqueException { + private TorqueResultIterator getResults(FetchGroup result, List rows) + throws TorqueException { Collections.sort(rows, MessageRowUtils.getUidComparator()); - final TorqueResultIterator results = new TorqueResultIterator(rows, result); + final TorqueResultIterator results = new TorqueResultIterator(rows, + result); return results; } @@ -311,12 +330,12 @@ } } - - public MessageResult fillMessageResult(MessageRow messageRow, FetchGroup result) - throws TorqueException, MessagingException, MailboxManagerException { + public MessageResult fillMessageResult(MessageRow messageRow, + FetchGroup result) throws TorqueException, MessagingException, + MailboxManagerException { return MessageRowUtils.loadMessageResult(messageRow, result); } - + public synchronized Flags getPermanentFlags() { Flags permanentFlags = new Flags(); permanentFlags.add(Flags.Flag.ANSWERED); @@ -327,13 +346,15 @@ return permanentFlags; } - public long[] recent(boolean reset, MailboxSession mailboxSession) throws MailboxManagerException { + public long[] recent(boolean reset, MailboxSession mailboxSession) + throws MailboxManagerException { try { lock.readLock().acquire(); try { checkAccess(); final Criteria criterion = queryRecentFlagSet(); - final List messageRows = getMailboxRow().getMessageRows(criterion); + final List messageRows = getMailboxRow().getMessageRows( + criterion); final long[] results = new long[messageRows.size()]; int count = 0; for (Iterator it = messageRows.iterator(); it.hasNext();) { @@ -353,7 +374,7 @@ } catch (InterruptedException e) { throw new MailboxManagerException(e); } - + } private Criteria queryRecentFlagSet() { @@ -362,12 +383,13 @@ MessageRowPeer.MAILBOX_ID); criterion.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID); - MessageFlagsPeer.addFlagsToCriteria(new Flags(Flags.Flag.RECENT), true, criterion); + MessageFlagsPeer.addFlagsToCriteria(new Flags(Flags.Flag.RECENT), true, + criterion); return criterion; } - public MessageResult getFirstUnseen(FetchGroup fetchGroup, MailboxSession mailboxSession) - throws MailboxManagerException { + public MessageResult getFirstUnseen(FetchGroup fetchGroup, + MailboxSession mailboxSession) throws MailboxManagerException { try { lock.readLock().acquire(); try { @@ -377,17 +399,19 @@ c.setLimit(1); c.setSingleRecord(true); - c.addJoin(MessageFlagsPeer.MAILBOX_ID, MessageRowPeer.MAILBOX_ID); + c.addJoin(MessageFlagsPeer.MAILBOX_ID, + MessageRowPeer.MAILBOX_ID); c.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID); - MessageFlagsPeer.addFlagsToCriteria(new Flags(Flags.Flag.SEEN), false, - c); + MessageFlagsPeer.addFlagsToCriteria(new Flags(Flags.Flag.SEEN), + false, c); try { List messageRows = getMailboxRow().getMessageRows(c); if (messageRows.size() > 0) { - MessageResult messageResult=fillMessageResult((MessageRow) messageRows.get(0), fetchGroup); - if (messageResult!=null) { + MessageResult messageResult = fillMessageResult( + (MessageRow) messageRows.get(0), fetchGroup); + if (messageResult != null) { getUidChangeTracker().found(messageResult); } @@ -408,13 +432,15 @@ } } - public int getUnseenCount(MailboxSession mailboxSession) throws MailboxManagerException { + public int getUnseenCount(MailboxSession mailboxSession) + throws MailboxManagerException { try { lock.readLock().acquire(); try { checkAccess(); try { - final int count = getMailboxRow().countMessages(new Flags(Flags.Flag.SEEN), false); + final int count = getMailboxRow().countMessages( + new Flags(Flags.Flag.SEEN), false); return count; } catch (TorqueException e) { throw new MailboxManagerException(e); @@ -429,8 +455,8 @@ } } - public Iterator expunge(MessageRange set, FetchGroup fetchGroup, MailboxSession mailboxSession) - throws MailboxManagerException { + public Iterator expunge(MessageRange set, FetchGroup fetchGroup, + MailboxSession mailboxSession) throws MailboxManagerException { try { lock.writeLock().acquire(); try { @@ -444,7 +470,8 @@ } } - private Iterator doExpunge(final MessageRange set, FetchGroup fetchGroup) throws MailboxManagerException { + private Iterator doExpunge(final MessageRange set, FetchGroup fetchGroup) + throws MailboxManagerException { checkAccess(); try { // TODO put this into a serializable transaction @@ -456,16 +483,20 @@ final List messageRows = getMailboxRow().getMessageRows(c); final long[] uids = uids(messageRows); - final OrFetchGroup orFetchGroup = new OrFetchGroup(fetchGroup, FetchGroup.FLAGS); - final TorqueResultIterator resultIterator = new TorqueResultIterator(messageRows, orFetchGroup); + final OrFetchGroup orFetchGroup = new OrFetchGroup(fetchGroup, + FetchGroup.FLAGS); + final TorqueResultIterator resultIterator = new TorqueResultIterator( + messageRows, orFetchGroup); // ensure all results are loaded before deletion Collection messageResults = IteratorUtils.toList(resultIterator); - + for (Iterator iter = messageRows.iterator(); iter.hasNext();) { MessageRow messageRow = (MessageRow) iter.next(); - Criteria todelc=new Criteria(); - todelc.add(MessageRowPeer.MAILBOX_ID,messageRow.getMailboxId()); - todelc.add(MessageRowPeer.UID,messageRow.getUid()); + Criteria todelc = new Criteria(); + todelc + .add(MessageRowPeer.MAILBOX_ID, messageRow + .getMailboxId()); + todelc.add(MessageRowPeer.UID, messageRow.getUid()); MessageRowPeer.doDelete(todelc); } getUidChangeTracker().expunged(uids); @@ -478,7 +509,7 @@ private long[] uids(List messageRows) { final int size = messageRows.size(); long[] results = new long[size]; - for (int i=0;i<size;i++) { + for (int i = 0; i < size; i++) { final MessageRow messageRow = (MessageRow) messageRows.get(i); results[i] = (messageRow).getUid(); } @@ -486,12 +517,13 @@ } public Iterator setFlags(Flags flags, boolean value, boolean replace, - MessageRange set, FetchGroup fetchGroup, MailboxSession mailboxSession) - throws MailboxManagerException { + MessageRange set, FetchGroup fetchGroup, + MailboxSession mailboxSession) throws MailboxManagerException { try { lock.writeLock().acquire(); try { - return doSetFlags(flags, value, replace, set, fetchGroup, mailboxSession); + return doSetFlags(flags, value, replace, set, fetchGroup, + mailboxSession); } finally { lock.writeLock().release(); } @@ -501,15 +533,17 @@ } } - private Iterator doSetFlags(Flags flags, boolean value, boolean replace, - final MessageRange set, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxManagerException { - checkAccess(); + private Iterator doSetFlags(Flags flags, boolean value, boolean replace, + final MessageRange set, FetchGroup fetchGroup, + MailboxSession mailboxSession) throws MailboxManagerException { + checkAccess(); try { // TODO put this into a serializeable transaction - final List messageRows = getMailboxRow() - .getMessageRows(criteriaForMessageSet(set)); - UidRange uidRange=uidRangeForMessageSet(set); - getUidChangeTracker().found(uidRange, MessageRowUtils.toMessageFlags(messageRows)); + final List messageRows = getMailboxRow().getMessageRows( + criteriaForMessageSet(set)); + UidRange uidRange = uidRangeForMessageSet(set); + getUidChangeTracker().found(uidRange, + MessageRowUtils.toMessageFlags(messageRows)); for (Iterator iter = messageRows.iterator(); iter.hasNext();) { final MessageRow messageRow = (MessageRow) iter.next(); final MessageFlags messageFlags = messageRow.getMessageFlags(); @@ -528,10 +562,12 @@ messageFlags.save(); } } - final OrFetchGroup orFetchGroup = new OrFetchGroup(fetchGroup, FetchGroup.FLAGS); - final TorqueResultIterator resultIterator = new TorqueResultIterator(messageRows, - orFetchGroup); - final org.apache.james.mailboxmanager.impl.MessageFlags[] messageFlags = resultIterator.getMessageFlags(); + final OrFetchGroup orFetchGroup = new OrFetchGroup(fetchGroup, + FetchGroup.FLAGS); + final TorqueResultIterator resultIterator = new TorqueResultIterator( + messageRows, orFetchGroup); + final org.apache.james.mailboxmanager.impl.MessageFlags[] messageFlags = resultIterator + .getMessageFlags(); tracker.flagsUpdated(messageFlags, mailboxSession.getSessionId()); tracker.found(uidRange, messageFlags); return resultIterator; @@ -540,19 +576,21 @@ } } - public void addListener(MailboxListener listener) throws MailboxManagerException { + public void addListener(MailboxListener listener) + throws MailboxManagerException { checkAccess(); tracker.addMailboxListener(listener); } public void removeListener(MailboxListener mailboxListener) { if (!open) { - throw new RuntimeException("mailbox not open"); + throw new RuntimeException("mailbox not open"); } tracker.removeMailboxListener(mailboxListener); } - public long getUidValidity(MailboxSession mailboxSession) throws MailboxManagerException { + public long getUidValidity(MailboxSession mailboxSession) + throws MailboxManagerException { try { lock.readLock().acquire(); try { @@ -569,19 +607,23 @@ } - public long getUidNext(MailboxSession mailboxSession) throws MailboxManagerException { + public long getUidNext(MailboxSession mailboxSession) + throws MailboxManagerException { try { lock.readLock().acquire(); try { checkAccess(); try { - MailboxRow myMailboxRow = MailboxRowPeer.retrieveByPK(mailboxRow.getPrimaryKey()); + MailboxRow myMailboxRow = MailboxRowPeer + .retrieveByPK(mailboxRow.getPrimaryKey()); if (myMailboxRow != null) { - mailboxRow=myMailboxRow; - getUidChangeTracker().foundLastUid(mailboxRow.getLastUid()); + mailboxRow = myMailboxRow; + getUidChangeTracker().foundLastUid( + mailboxRow.getLastUid()); return getUidChangeTracker().getLastUid() + 1; } else { - throw new MailboxManagerException("Mailbox has been deleted"); + throw new MailboxManagerException( + "Mailbox has been deleted"); } } catch (NoRowsException e) { throw new MailboxManagerException(e); @@ -604,11 +646,11 @@ throw new RuntimeException("mailbox is closed"); } } - + protected UidChangeTracker getUidChangeTracker() { return tracker; } - + protected MailboxRow getMailboxRow() { return mailboxRow; } @@ -623,23 +665,27 @@ lock.readLock().acquire(); try { checkAccess(); - + final Criteria criterion = preSelect(query); - final List rows = MessageRowPeer.doSelectJoinMessageFlags(criterion); + final List rows = MessageRowPeer + .doSelectJoinMessageFlags(criterion); final List filteredMessages = new ArrayList(); - for (Iterator it = rows.iterator(); it - .hasNext();) { + for (Iterator it = rows.iterator(); it.hasNext();) { final MessageRow row = (MessageRow) it.next(); try { if (searches.isMatch(query, row)) { filteredMessages.add(row); } } catch (TorqueException e) { - getLog().info("Cannot test message against search criteria. Will continue to test other messages.", e); - if (getLog().isDebugEnabled()) getLog().debug("UID: " + row.getUid()); + getLog() + .info( + "Cannot test message against search criteria. Will continue to test other messages.", + e); + if (getLog().isDebugEnabled()) + getLog().debug("UID: " + row.getUid()); } } - + return getResults(fetchGroup, filteredMessages); } catch (TorqueException e) { throw new MailboxManagerException(e); @@ -650,7 +696,7 @@ throw new MailboxManagerException(e); } } - + private Criteria preSelect(SearchQuery query) { final Criteria results = new Criteria(); final List criteria = query.getCriterias(); @@ -664,7 +710,8 @@ return results; } - private void preSelectUid(final Criteria results, final SearchQuery.UidCriterion uidCriterion) { + private void preSelectUid(final Criteria results, + final SearchQuery.UidCriterion uidCriterion) { final NumericRange[] ranges = uidCriterion.getOperator().getRange(); for (int i = 0; i < ranges.length; i++) { final long low = ranges[i].getLowValue(); @@ -674,13 +721,13 @@ } else if (low == high) { results.add(MessageRowPeer.UID, low); } else { - final Criteria.Criterion fromCriterion - = results.getNewCriterion(MessageRowPeer.UID, new Long(low), - Criteria.GREATER_EQUAL); + final Criteria.Criterion fromCriterion = results + .getNewCriterion(MessageRowPeer.UID, new Long(low), + Criteria.GREATER_EQUAL); if (high > 0 && high < Long.MAX_VALUE) { - final Criteria.Criterion toCriterion - = results.getNewCriterion(MessageRowPeer.UID, new Long(high), - Criteria.LESS_EQUAL); + final Criteria.Criterion toCriterion = results + .getNewCriterion(MessageRowPeer.UID, + new Long(high), Criteria.LESS_EQUAL); fromCriterion.and(toCriterion); } results.add(fromCriterion); @@ -693,19 +740,21 @@ } public void setLog(Log log) { - super.setLog(log); + super.setLog(log); this.log = log; searches.setLog(log); - } + } - public void copyTo(MessageRange set, TorqueMailbox toMailbox, MailboxSession session) throws MailboxManagerException { + public void copyTo(MessageRange set, TorqueMailbox toMailbox, + MailboxSession session) throws MailboxManagerException { try { lock.readLock().acquire(); try { checkAccess(); try { Criteria c = criteriaForMessageSet(set); - c.add(MessageFlagsPeer.MAILBOX_ID,getMailboxRow().getMailboxId()); + c.add(MessageFlagsPeer.MAILBOX_ID, getMailboxRow() + .getMailboxId()); List rows = MessageRowPeer.doSelectJoinMessageFlags(c); toMailbox.copy(rows, session); } catch (TorqueException e) { @@ -720,8 +769,9 @@ throw new MailboxManagerException(e); } } - - private void copy(List rows, MailboxSession session) throws MailboxManagerException { + + private void copy(List rows, MailboxSession session) + throws MailboxManagerException { try { for (Iterator iter = rows.iterator(); iter.hasNext();) { MessageRow fromRow = (MessageRow) iter.next(); @@ -732,7 +782,8 @@ // exclusive // Uid // TODO create own message_id and assign uid later - // at the moment it could lead to the situation that uid 5 is + // at the moment it could lead to the situation that uid 5 + // is // inserted long before 4, when // mail 4 is big and comes over a slow connection. long uid = mailbox.getLastUid(); @@ -743,12 +794,17 @@ newRow.setUid(uid); newRow.setInternalDate(fromRow.getInternalDate()); newRow.setSize(fromRow.getSize()); - buildFlags(newRow, fromRow.getMessageFlags().getFlagsObject()); + buildFlags(newRow, fromRow.getMessageFlags() + .getFlagsObject()); final List headers = fromRow.getMessageHeaders(); - for (Iterator iterator = headers.iterator(); iterator.hasNext();) { - final MessageHeader fromHeader = (MessageHeader) iterator.next(); - final MessageHeader newHeader = new MessageHeader(fromHeader.getField(), fromHeader.getValue(), fromHeader.getLineNumber()); + for (Iterator iterator = headers.iterator(); iterator + .hasNext();) { + final MessageHeader fromHeader = (MessageHeader) iterator + .next(); + final MessageHeader newHeader = new MessageHeader( + fromHeader.getField(), fromHeader.getValue(), + fromHeader.getLineNumber()); newRow.addMessageHeader(newHeader); } @@ -756,14 +812,14 @@ newRow.addMessageBody(mb); save(newRow); - MessageResult messageResult = fillMessageResult(newRow, FetchGroupImpl.MINIMAL); - getUidChangeTracker().found(messageResult); - } + MessageResult messageResult = fillMessageResult(newRow, + FetchGroupImpl.MINIMAL); + getUidChangeTracker().found(messageResult); + } } - } - catch (TorqueException e) { + } catch (TorqueException e) { throw new MailboxManagerException(e); - } catch (InterruptedException e) { + } catch (InterruptedException e) { throw new MailboxManagerException(e); } catch (MessagingException e) { throw new MailboxManagerException(e);
Modified: james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=696828&r1=696827&r2=696828&view=diff ============================================================================== --- james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java (original) +++ james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java Thu Sep 18 14:44:56 2008 @@ -54,28 +54,30 @@ public class TorqueMailboxManager implements MailboxManager { private static final char SQL_WILDCARD_CHAR = '%'; + private final static Random random = new Random(); - + protected Log log = LogFactory.getLog(TorqueMailboxManager.class); private final ReadWriteLock lock; - + private final Map mailboxes; - + private final UserManager userManager; - + public TorqueMailboxManager(final UserManager userManager) { - this.lock = new ReentrantWriterPreferenceReadWriteLock(); + this.lock = new ReentrantWriterPreferenceReadWriteLock(); mailboxes = new HashMap(); this.userManager = userManager; } - + public Mailbox getMailbox(String mailboxName, boolean autoCreate) throws MailboxManagerException { return doGetMailbox(mailboxName, autoCreate); } - - private TorqueMailbox doGetMailbox(String mailboxName, boolean autoCreate) throws MailboxManagerException { + + private TorqueMailbox doGetMailbox(String mailboxName, boolean autoCreate) + throws MailboxManagerException { if (autoCreate && !existsMailbox(mailboxName)) { getLog().info("autocreated mailbox " + mailboxName); createMailbox(mailboxName); @@ -86,14 +88,16 @@ .retrieveByName(mailboxName); if (mailboxRow != null) { - getLog().debug("Loaded mailbox "+mailboxName); - - TorqueMailbox torqueMailbox = (TorqueMailbox) mailboxes.get(mailboxName); + getLog().debug("Loaded mailbox " + mailboxName); + + TorqueMailbox torqueMailbox = (TorqueMailbox) mailboxes + .get(mailboxName); if (torqueMailbox == null) { - torqueMailbox = new TorqueMailbox(mailboxRow, lock, getLog()); + torqueMailbox = new TorqueMailbox(mailboxRow, lock, + getLog()); mailboxes.put(mailboxName, torqueMailbox); } - + return torqueMailbox; } else { getLog().info("Mailbox '" + mailboxName + "' not found."); @@ -104,10 +108,10 @@ throw new MailboxManagerException(e); } } - + public void createMailbox(String namespaceName) throws MailboxManagerException { - getLog().debug("createMailbox "+namespaceName); + getLog().debug("createMailbox " + namespaceName); final int length = namespaceName.length(); if (length == 0) { getLog().warn("Ignoring mailbox with empty name"); @@ -120,12 +124,14 @@ // TODO: transaction int index = namespaceName.indexOf(HIERARCHY_DELIMITER); int count = 0; - while (index>=0) { + while (index >= 0) { // Until explicit namespace support is added, - // this workaround prevents the namespaced elements being created + // this workaround prevents the namespaced elements being + // created // TODO: add explicit support for namespaces if (index > 0 && count++ > 1) { - final String mailbox = namespaceName.substring(0, index); + final String mailbox = namespaceName + .substring(0, index); if (!existsMailbox(mailbox)) { doCreate(mailbox); } @@ -151,7 +157,7 @@ public void deleteMailbox(String mailboxName, MailboxSession session) throws MailboxManagerException { - getLog().info("deleteMailbox "+mailboxName); + getLog().info("deleteMailbox " + mailboxName); synchronized (mailboxes) { try { // TODO put this into a serilizable transaction @@ -160,7 +166,8 @@ throw new MailboxNotFoundException("Mailbox not found"); } MailboxRowPeer.doDelete(mr); - TorqueMailbox mailbox = (TorqueMailbox) mailboxes.remove(mailboxName); + TorqueMailbox mailbox = (TorqueMailbox) mailboxes + .remove(mailboxName); if (mailbox != null) { mailbox.deleted(session); } @@ -171,8 +178,8 @@ } public void renameMailbox(String from, String to) - throws MailboxManagerException { - getLog().debug("renameMailbox "+from+" to "+to); + throws MailboxManagerException { + getLog().debug("renameMailbox " + from + " to " + to); try { synchronized (mailboxes) { if (existsMailbox(to)) { @@ -199,11 +206,14 @@ List l = MailboxRowPeer.doSelect(c); for (Iterator iter = l.iterator(); iter.hasNext();) { MailboxRow sub = (MailboxRow) iter.next(); - String subOrigName=sub.getName(); - String subNewName=to + subOrigName.substring(from.length()); + String subOrigName = sub.getName(); + String subNewName = to + + subOrigName.substring(from.length()); sub.setName(to + sub.getName().substring(from.length())); sub.save(); - getLog().info("renameMailbox sub-mailbox "+subOrigName+" to "+subNewName); + getLog().info( + "renameMailbox sub-mailbox " + subOrigName + " to " + + subNewName); } } } catch (TorqueException e) { @@ -211,13 +221,15 @@ } } - public void copyMessages(MessageRange set, String from, String to, MailboxSession session) throws MailboxManagerException { - TorqueMailbox toMailbox= doGetMailbox(to, false); + public void copyMessages(MessageRange set, String from, String to, + MailboxSession session) throws MailboxManagerException { + TorqueMailbox toMailbox = doGetMailbox(to, false); TorqueMailbox fromMailbox = doGetMailbox(from, false); fromMailbox.copyTo(set, toMailbox, session); } - public ListResult[] list(final MailboxExpression mailboxExpression) throws MailboxManagerException { + public ListResult[] list(final MailboxExpression mailboxExpression) + throws MailboxManagerException { final char localWildcard = mailboxExpression.getLocalWildcard(); final char freeWildcard = mailboxExpression.getFreeWildcard(); final String base = mailboxExpression.getBase(); @@ -227,42 +239,46 @@ } else { baseLength = base.length(); } - - final String search = mailboxExpression.getCombinedName(HIERARCHY_DELIMITER) - .replace(freeWildcard, SQL_WILDCARD_CHAR).replace(localWildcard, SQL_WILDCARD_CHAR); - + + final String search = mailboxExpression.getCombinedName( + HIERARCHY_DELIMITER).replace(freeWildcard, SQL_WILDCARD_CHAR) + .replace(localWildcard, SQL_WILDCARD_CHAR); + Criteria criteria = new Criteria(); - criteria.add(MailboxRowPeer.NAME,(Object)(search),Criteria.LIKE); + criteria.add(MailboxRowPeer.NAME, (Object) (search), Criteria.LIKE); try { - List mailboxRows=MailboxRowPeer.doSelect(criteria); - List listResults=new ArrayList(mailboxRows.size()); + List mailboxRows = MailboxRowPeer.doSelect(criteria); + List listResults = new ArrayList(mailboxRows.size()); for (Iterator iter = mailboxRows.iterator(); iter.hasNext();) { final MailboxRow mailboxRow = (MailboxRow) iter.next(); final String name = mailboxRow.getName(); if (name.startsWith(base)) { final String match = name.substring(baseLength); - if (mailboxExpression.isExpressionMatch(match, HIERARCHY_DELIMITER)) { - listResults.add(new ListResultImpl(name,".")); + if (mailboxExpression.isExpressionMatch(match, + HIERARCHY_DELIMITER)) { + listResults.add(new ListResultImpl(name, ".")); } } } - final ListResult[] results = (ListResult[]) listResults.toArray(ListResult.EMPTY_ARRAY); - Arrays.sort(results); + final ListResult[] results = (ListResult[]) listResults + .toArray(ListResult.EMPTY_ARRAY); + Arrays.sort(results); return results; } catch (TorqueException e) { throw new MailboxManagerException(e); } - + } - + public void setSubscription(String mailboxName, boolean value) { // TODO implement subscriptions } - - public boolean existsMailbox(String mailboxName) throws MailboxManagerException { - Criteria c=new Criteria(); - c.add(MailboxRowPeer.NAME,mailboxName); - CountHelper countHelper=new CountHelper(); + + public boolean existsMailbox(String mailboxName) + throws MailboxManagerException { + Criteria c = new Criteria(); + c.add(MailboxRowPeer.NAME, mailboxName); + CountHelper countHelper = new CountHelper(); int count; try { synchronized (mailboxes) { @@ -286,17 +302,18 @@ public void deleteEverything() throws MailboxManagerException { try { - MailboxRowPeer.doDelete(new Criteria().and(MailboxRowPeer.MAILBOX_ID, - new Integer(-1), Criteria.GREATER_THAN)); + MailboxRowPeer.doDelete(new Criteria().and( + MailboxRowPeer.MAILBOX_ID, new Integer(-1), + Criteria.GREATER_THAN)); mailboxes.clear(); } catch (TorqueException e) { throw new MailboxManagerException(e); } } - + protected Log getLog() { - if (log==null) { - log=new SimpleLog("TorqueMailboxManager"); + if (log == null) { + log = new SimpleLog("TorqueMailboxManager"); } return log; } @@ -307,9 +324,10 @@ public String resolve(final String userName, String mailboxPath) { if (mailboxPath.charAt(0) != HIERARCHY_DELIMITER) { - mailboxPath = HIERARCHY_DELIMITER + mailboxPath ; - } - final String result = USER_NAMESPACE + HIERARCHY_DELIMITER + userName + mailboxPath; + mailboxPath = HIERARCHY_DELIMITER + mailboxPath; + } + final String result = USER_NAMESPACE + HIERARCHY_DELIMITER + userName + + mailboxPath; return result; } @@ -317,7 +335,8 @@ return userManager.isAuthentic(userid, passwd); } - public void subscribe(String user, String mailbox) throws SubscriptionException { + public void subscribe(String user, String mailbox) + throws SubscriptionException { userManager.subscribe(user, mailbox); } @@ -325,7 +344,8 @@ return userManager.subscriptions(user); } - public void unsubscribe(String user, String mailbox) throws SubscriptionException { + public void unsubscribe(String user, String mailbox) + throws SubscriptionException { userManager.unsubscribe(user, mailbox); } Modified: james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxSession.java URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxSession.java?rev=696828&r1=696827&r2=696828&view=diff ============================================================================== --- james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxSession.java (original) +++ james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxSession.java Thu Sep 18 14:44:56 2008 @@ -27,15 +27,16 @@ public class TorqueMailboxSession implements MailboxSession { private final long sessionId; + private boolean open; - + public TorqueMailboxSession(final long sessionId) { super(); this.sessionId = sessionId; } public void close() { - open = false; + open = false; } public long getSessionId() { @@ -48,18 +49,15 @@ /** * Renders suitably for logging. - * @return a <code>String</code> representation - * of this object. + * + * @return a <code>String</code> representation of this object. */ - public String toString() - { + public String toString() { final String TAB = " "; - - String retValue = "TorqueMailboxSession ( " - + "sessionId = " + this.sessionId + TAB - + "open = " + this.open + TAB - + " )"; - + + String retValue = "TorqueMailboxSession ( " + "sessionId = " + + this.sessionId + TAB + "open = " + this.open + TAB + " )"; + return retValue; } Modified: james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueResultIterator.java URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueResultIterator.java?rev=696828&r1=696827&r2=696828&view=diff ============================================================================== --- james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueResultIterator.java (original) +++ james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueResultIterator.java Thu Sep 18 14:44:56 2008 @@ -41,9 +41,11 @@ public class TorqueResultIterator implements Iterator { private final Buffer messageRows; + private final FetchGroup fetchGroup; - - public TorqueResultIterator(final Collection messageRows, final FetchGroup fetchGroup) { + + public TorqueResultIterator(final Collection messageRows, + final FetchGroup fetchGroup) { super(); if (messageRows == null || messageRows.isEmpty()) { this.messageRows = BufferUtils.EMPTY_BUFFER; @@ -54,12 +56,14 @@ } public MessageFlags[] getMessageFlags() throws TorqueException { - final MessageFlags[] results = MessageRowUtils.toMessageFlags(messageRows); + final MessageFlags[] results = MessageRowUtils + .toMessageFlags(messageRows); return results; } - + /** * Iterates over the contained rows. + * * @return <code>Iterator</code> for message rows */ public final Iterator iterateRows() { @@ -77,30 +81,36 @@ final MessageRow messageRow = (MessageRow) messageRows.remove(); MessageResult result; try { - - result = MessageRowUtils.loadMessageResult(messageRow, + + result = MessageRowUtils.loadMessageResult(messageRow, this.fetchGroup); } catch (TorqueException e) { - result = new UnloadedMessageResult(messageRow, new MailboxManagerException(e)); + result = new UnloadedMessageResult(messageRow, + new MailboxManagerException(e)); } catch (MailboxManagerException e) { result = new UnloadedMessageResult(messageRow, e); } return result; } - + public void remove() { throw new UnsupportedOperationException("Read only iteration."); } private static final class UnloadedMessageResult implements MessageResult { - private static final FetchGroup FETCH_GROUP = new FetchGroupImpl(FetchGroup.INTERNAL_DATE | FetchGroup.SIZE); - + private static final FetchGroup FETCH_GROUP = new FetchGroupImpl( + FetchGroup.INTERNAL_DATE | FetchGroup.SIZE); + private final MailboxManagerException exception; + private final Date internalDate; + private final int size; + private final long uid; - - public UnloadedMessageResult(final MessageRow row, final MailboxManagerException exception) { + + public UnloadedMessageResult(final MessageRow row, + final MailboxManagerException exception) { super(); internalDate = row.getInternalDate(); size = row.getSize(); @@ -112,7 +122,7 @@ throw exception; } - public Content getFullContent() throws MailboxManagerException{ + public Content getFullContent() throws MailboxManagerException { throw exception; } @@ -157,25 +167,29 @@ } public int compareTo(Object o) { - MessageResult that=(MessageResult)o; - // Java 1.5 return (int) Math.signum(uid - that.getUid()); + MessageResult that = (MessageResult) o; + // Java 1.5 return (int) Math.signum(uid - that.getUid()); long diff = uid - that.getUid(); return (int) diff == 0 ? 0 : diff > 0 ? 1 : -1; } - public Content getMessageBody(MimePath path) throws MailboxManagerException { + public Content getMessageBody(MimePath path) + throws MailboxManagerException { throw exception; } - public Content getFullContent(MimePath path) throws MailboxManagerException { + public Content getFullContent(MimePath path) + throws MailboxManagerException { throw exception; } - public Iterator iterateHeaders(MimePath path) throws MailboxManagerException { + public Iterator iterateHeaders(MimePath path) + throws MailboxManagerException { throw exception; } - public Iterator iterateMimeHeaders(MimePath path) throws MailboxManagerException { + public Iterator iterateMimeHeaders(MimePath path) + throws MailboxManagerException { throw exception; } @@ -183,13 +197,15 @@ throw exception; } - public Content getMimeBody(MimePath path) throws MailboxManagerException { + public Content getMimeBody(MimePath path) + throws MailboxManagerException { throw exception; } - public MimeDescriptor getMimeDescriptor() throws MailboxManagerException { + public MimeDescriptor getMimeDescriptor() + throws MailboxManagerException { throw exception; } - + } } Modified: james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java?rev=696828&r1=696827&r2=696828&view=diff ============================================================================== --- james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java (original) +++ james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java Thu Sep 18 14:44:56 2008 @@ -27,9 +27,11 @@ public boolean isAuthentic(String userid, String passwd); - public void subscribe(String user, String mailbox) throws SubscriptionException; + public void subscribe(String user, String mailbox) + throws SubscriptionException; public Collection subscriptions(String user) throws SubscriptionException; - public void unsubscribe(String user, String mailbox) throws SubscriptionException; + public void unsubscribe(String user, String mailbox) + throws SubscriptionException; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
