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 rd...@apache.org on 2008/12/31 11:44:57 UTC
svn commit: r730371 [2/3] - in /james/protocols/imap/trunk: ./ build-tools/
deployment/src/test/java/org/apache/james/imap/functional/
deployment/src/test/java/org/apache/james/imap/functional/jpa/ jpa/
jpa/src/main/java/org/apache/james/imap/jpa/ jpa/...
Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java Wed Dec 31 02:44:55 2008
@@ -32,9 +32,8 @@
import javax.mail.Flags;
-import org.apache.james.imap.jpa.om.MessageBody;
-import org.apache.james.imap.jpa.om.MessageHeader;
-import org.apache.james.imap.jpa.om.MessageRow;
+import org.apache.james.imap.jpa.om.Header;
+import org.apache.james.imap.jpa.om.Message;
import org.apache.james.mailboxmanager.MailboxManagerException;
import org.apache.james.mailboxmanager.MessageResult;
import org.apache.james.mailboxmanager.MessageResult.Content;
@@ -43,7 +42,6 @@
import org.apache.james.mailboxmanager.impl.MessageFlags;
import org.apache.james.mailboxmanager.impl.MessageResultImpl;
import org.apache.james.mime4j.MimeException;
-import org.apache.torque.TorqueException;
public class MessageRowUtils {
@@ -54,197 +52,167 @@
static final Charset US_ASCII = Charset.forName("US-ASCII");
/**
- * Converts {@link MessageRow} to {@link MessageFlags}.
+ * Converts {@link Message} to {@link MessageFlags}.
*
- * @param messageRows
- * <code>Collectio</code> of {@link MessageRow}, not null
+ * @param messages not null
* @return <code>MessageFlags</code>, not null
- * @throws TorqueException
*/
- public static MessageFlags[] toMessageFlags(final Collection messageRows)
- throws TorqueException {
- final MessageFlags[] results = new MessageFlags[messageRows.size()];
+ public static MessageFlags[] toMessageFlags(final Collection<Message> messages) {
+ final MessageFlags[] results = new MessageFlags[messages.size()];
int i = 0;
- for (final Iterator it = messageRows.iterator(); it.hasNext();) {
- MessageRow row = (MessageRow) it.next();
- final Flags flags = row.getMessageFlags().getFlagsObject();
- final long uid = row.getUid();
+ for (Message message: messages) {
+ final Flags flags = message.createFlags();
+ final long uid = message.getUid();
results[i++] = new MessageFlags(uid, flags);
}
return results;
}
- public static List createHeaders(MessageRow messageRow)
- throws TorqueException {
- final List headers = getSortedHeaders(messageRow);
-
- final List results = new ArrayList(headers.size());
- for (Iterator it = headers.iterator(); it.hasNext();) {
- final MessageHeader messageHeader = (MessageHeader) it.next();
- final Header header = new Header(messageHeader);
- results.add(header);
+ public static List<ResultHeader> createHeaders(Message message) {
+ final List<Header> headers = getSortedHeaders(message);
+
+ final List<ResultHeader> results = new ArrayList<ResultHeader>(headers.size());
+ for (Header header: headers) {
+ final ResultHeader resultHeader = new ResultHeader(header);
+ results.add(resultHeader);
}
return results;
}
- private static List getSortedHeaders(MessageRow messageRow)
- throws TorqueException {
- final List headers = messageRow.getMessageHeaders();
- Collections.sort(headers, new Comparator() {
-
- public int compare(Object one, Object two) {
- return ((MessageHeader) one).getLineNumber()
- - ((MessageHeader) two).getLineNumber();
- }
-
- });
+ private static List<Header> getSortedHeaders(Message message) {
+ final List<Header> headers = new ArrayList<Header>(message.getHeaders());
+ Collections.sort(headers);
return headers;
}
- public static Content createBodyContent(MessageRow messageRow)
- throws TorqueException {
- final MessageBody body = (MessageBody) messageRow.getMessageBodys()
- .get(0);
- final byte[] bytes = body.getBody();
+ public static Content createBodyContent(Message message) {
+ final byte[] bytes = message.getBody();
final ByteContent result = new ByteContent(bytes);
return result;
}
- public static Content createFullContent(final MessageRow messageRow,
- List headers) throws TorqueException {
+ public static Content createFullContent(final Message message, List headers) {
if (headers == null) {
- headers = createHeaders(messageRow);
+ headers = createHeaders(message);
}
- final MessageBody body = (MessageBody) messageRow.getMessageBodys()
- .get(0);
- final byte[] bytes = body.getBody();
+ final byte[] bytes = message.getBody();
final FullContent results = new FullContent(bytes, headers);
return results;
}
- public static MessageResult loadMessageResult(final MessageRow messageRow,
- final FetchGroup fetchGroup) throws TorqueException,
- MailboxManagerException {
+ public static MessageResult loadMessageResult(final Message message, final FetchGroup fetchGroup)
+ throws MailboxManagerException {
MessageResultImpl messageResult = new MessageResultImpl();
- messageResult.setUid(messageRow.getUid());
+ messageResult.setUid(message.getUid());
if (fetchGroup != null) {
int content = fetchGroup.content();
if ((content & FetchGroup.FLAGS) > 0) {
- org.apache.james.imap.jpa.om.MessageFlags messageFlags = messageRow
- .getMessageFlags();
- if (messageFlags != null) {
- messageResult.setFlags(messageFlags.getFlagsObject());
- }
+ messageResult.setFlags(message.createFlags());
content -= FetchGroup.FLAGS;
}
if ((content & FetchGroup.SIZE) > 0) {
- messageResult.setSize(messageRow.getSize());
+ messageResult.setSize(message.getSize());
content -= FetchGroup.SIZE;
}
if ((content & FetchGroup.INTERNAL_DATE) > 0) {
- messageResult.setInternalDate(messageRow.getInternalDate());
+ messageResult.setInternalDate(message.getInternalDate());
content -= FetchGroup.INTERNAL_DATE;
}
if ((content & FetchGroup.HEADERS) > 0) {
- addHeaders(messageRow, messageResult);
+ addHeaders(message, messageResult);
content -= FetchGroup.HEADERS;
}
if ((content & FetchGroup.BODY_CONTENT) > 0) {
- addBody(messageRow, messageResult);
+ addBody(message, messageResult);
content -= FetchGroup.BODY_CONTENT;
}
if ((content & FetchGroup.FULL_CONTENT) > 0) {
- addFullContent(messageRow, messageResult);
+ addFullContent(message, messageResult);
content -= FetchGroup.FULL_CONTENT;
}
- if ((content & FetchGroup.MIME_DESCRIPTOR) > 0) {
- addMimeDescriptor(messageRow, messageResult);
- content -= FetchGroup.MIME_DESCRIPTOR;
- }
- if (content != 0) {
- throw new TorqueException("Unsupported result: " + content);
- }
try {
- addPartContent(fetchGroup, messageRow, messageResult);
+ if ((content & FetchGroup.MIME_DESCRIPTOR) > 0) {
+ addMimeDescriptor(message, messageResult);
+ content -= FetchGroup.MIME_DESCRIPTOR;
+ }
+ if (content != 0) {
+ throw new MailboxManagerException("Unsupported result: " + content);
+ }
+
+ addPartContent(fetchGroup, message, messageResult);
} catch (IOException e) {
- throw new TorqueException("Cannot parse message", e);
+ throw new MailboxManagerException(e);
}
}
return messageResult;
}
- private static void addMimeDescriptor(MessageRow messageRow,
- MessageResultImpl messageResult) throws TorqueException {
- try {
+ private static void addMimeDescriptor(Message message, MessageResultImpl messageResult) throws IOException {
MessageResult.MimeDescriptor descriptor = MimeDescriptorImpl
- .build(toInput(messageRow));
+ .build(toInput(message));
messageResult.setMimeDescriptor(descriptor);
- } catch (IOException e) {
- throw new TorqueException("Cannot parse message", e);
- }
}
- private static void addFullContent(final MessageRow messageRow,
- MessageResultImpl messageResult) throws TorqueException,
- MailboxManagerException {
+ private static void addFullContent(final Message messageRow, MessageResultImpl messageResult)
+ throws MailboxManagerException {
final List headers = messageResult.getHeaders();
final Content content = createFullContent(messageRow, headers);
messageResult.setFullContent(content);
}
- private static void addBody(final MessageRow messageRow,
- MessageResultImpl messageResult) throws TorqueException {
- final Content content = createBodyContent(messageRow);
+ private static void addBody(final Message message,
+ MessageResultImpl messageResult) {
+ final Content content = createBodyContent(message);
messageResult.setBody(content);
}
- private static void addHeaders(final MessageRow messageRow,
- MessageResultImpl messageResult) throws TorqueException {
- final List headers = createHeaders(messageRow);
+ private static void addHeaders(final Message message,
+ MessageResultImpl messageResult) {
+ final List<ResultHeader> headers = createHeaders(message);
messageResult.setHeaders(headers);
}
private static void addPartContent(final FetchGroup fetchGroup,
- MessageRow row, MessageResultImpl messageResult)
- throws TorqueException, MailboxManagerException, IOException,
+ Message message, MessageResultImpl messageResult)
+ throws MailboxManagerException, IOException,
MimeException {
Collection partContent = fetchGroup.getPartContentDescriptors();
if (partContent != null) {
for (Iterator it = partContent.iterator(); it.hasNext();) {
FetchGroup.PartContentDescriptor descriptor = (FetchGroup.PartContentDescriptor) it
.next();
- addPartContent(descriptor, row, messageResult);
+ addPartContent(descriptor, message, messageResult);
}
}
}
private static void addPartContent(
- FetchGroup.PartContentDescriptor descriptor, MessageRow row,
- MessageResultImpl messageResult) throws TorqueException,
+ FetchGroup.PartContentDescriptor descriptor, Message message,
+ MessageResultImpl messageResult) throws
MailboxManagerException, IOException, MimeException {
final MimePath mimePath = descriptor.path();
final int content = descriptor.content();
if ((content & MessageResult.FetchGroup.FULL_CONTENT) > 0) {
- addFullContent(row, messageResult, mimePath);
+ addFullContent(message, messageResult, mimePath);
}
if ((content & MessageResult.FetchGroup.BODY_CONTENT) > 0) {
- addBodyContent(row, messageResult, mimePath);
+ addBodyContent(message, messageResult, mimePath);
}
if ((content & MessageResult.FetchGroup.MIME_CONTENT) > 0) {
- addMimeBodyContent(row, messageResult, mimePath);
+ addMimeBodyContent(message, messageResult, mimePath);
}
if ((content & MessageResult.FetchGroup.HEADERS) > 0) {
- addHeaders(row, messageResult, mimePath);
+ addHeaders(message, messageResult, mimePath);
}
if ((content & MessageResult.FetchGroup.MIME_HEADERS) > 0) {
- addMimeHeaders(row, messageResult, mimePath);
+ addMimeHeaders(message, messageResult, mimePath);
}
}
- private static PartContentBuilder build(int[] path, final MessageRow row)
- throws IOException, MimeException, TorqueException {
- final InputStream stream = toInput(row);
+ private static PartContentBuilder build(int[] path, final Message message)
+ throws IOException, MimeException {
+ final InputStream stream = toInput(message);
PartContentBuilder result = new PartContentBuilder();
result.parse(stream);
try {
@@ -260,13 +228,10 @@
return result;
}
- public static InputStream toInput(final MessageRow row)
- throws TorqueException {
- final List headers = getSortedHeaders(row);
- final StringBuffer headersToString = new StringBuffer(
- headers.size() * 50);
- for (Iterator it = headers.iterator(); it.hasNext();) {
- MessageHeader header = (MessageHeader) it.next();
+ public static InputStream toInput(final Message message) {
+ final List<Header> headers = getSortedHeaders(message);
+ final StringBuffer headersToString = new StringBuffer(headers.size() * 50);
+ for (Header header: headers) {
headersToString.append(header.getField());
headersToString.append(": ");
headersToString.append(header.getValue());
@@ -274,9 +239,8 @@
}
headersToString.append("\r\n");
- byte[] bodyContent = row.getBodyContent();
- final MessageInputStream stream = new MessageInputStream(
- headersToString, bodyContent);
+ byte[] bodyContent = message.getBody();
+ final MessageInputStream stream = new MessageInputStream(headersToString, bodyContent);
return stream;
}
@@ -318,85 +282,82 @@
return result;
}
- private static void addHeaders(MessageRow row,
+ private static void addHeaders(Message message,
MessageResultImpl messageResult, MimePath mimePath)
- throws TorqueException, IOException, MimeException {
+ throws IOException, MimeException {
final int[] path = path(mimePath);
if (path == null) {
- addHeaders(row, messageResult);
+ addHeaders(message, messageResult);
} else {
- final PartContentBuilder builder = build(path, row);
+ final PartContentBuilder builder = build(path, message);
final List headers = builder.getMessageHeaders();
messageResult.setHeaders(mimePath, headers.iterator());
}
}
- private static void addMimeHeaders(MessageRow row,
+ private static void addMimeHeaders(Message message,
MessageResultImpl messageResult, MimePath mimePath)
- throws TorqueException, IOException, MimeException {
+ throws IOException, MimeException {
final int[] path = path(mimePath);
if (path == null) {
- addHeaders(row, messageResult);
+ addHeaders(message, messageResult);
} else {
- final PartContentBuilder builder = build(path, row);
+ final PartContentBuilder builder = build(path, message);
final List headers = builder.getMimeHeaders();
messageResult.setMimeHeaders(mimePath, headers.iterator());
}
}
- private static void addBodyContent(MessageRow row,
- MessageResultImpl messageResult, MimePath mimePath)
- throws TorqueException, IOException, MimeException {
+ private static void addBodyContent(Message message,
+ MessageResultImpl messageResult, MimePath mimePath) throws IOException, MimeException {
final int[] path = path(mimePath);
if (path == null) {
- addBody(row, messageResult);
+ addBody(message, messageResult);
} else {
- final PartContentBuilder builder = build(path, row);
+ final PartContentBuilder builder = build(path, message);
final Content content = builder.getMessageBodyContent();
messageResult.setBodyContent(mimePath, content);
}
}
- private static void addMimeBodyContent(MessageRow row,
+ private static void addMimeBodyContent(Message message,
MessageResultImpl messageResult, MimePath mimePath)
- throws TorqueException, IOException, MimeException {
+ throws IOException, MimeException {
final int[] path = path(mimePath);
- final PartContentBuilder builder = build(path, row);
+ final PartContentBuilder builder = build(path, message);
final Content content = builder.getMimeBodyContent();
messageResult.setMimeBodyContent(mimePath, content);
}
- private static void addFullContent(MessageRow row,
+ private static void addFullContent(Message message,
MessageResultImpl messageResult, MimePath mimePath)
- throws TorqueException, MailboxManagerException, IOException,
+ throws MailboxManagerException, IOException,
MimeException {
final int[] path = path(mimePath);
if (path == null) {
- addFullContent(row, messageResult);
+ addFullContent(message, messageResult);
} else {
- final PartContentBuilder builder = build(path, row);
+ final PartContentBuilder builder = build(path, message);
final Content content = builder.getFullContent();
messageResult.setFullContent(mimePath, content);
}
}
/**
- * Gets a comparator that evaluates {@link MessageRow}'s on the basis of
+ * Gets a comparator that evaluates {@link Message}'s on the basis of
* their UIDs.
*
* @return {@link Comparator}, not null
*/
- public static Comparator getUidComparator() {
+ public static Comparator<Message> getUidComparator() {
return UidComparator.INSTANCE;
}
- private static final class UidComparator implements Comparator {
+ private static final class UidComparator implements Comparator<Message> {
private static final UidComparator INSTANCE = new UidComparator();
- public int compare(Object one, Object two) {
- final MessageRow rowOne = (MessageRow) one;
- final MessageRow rowTwo = (MessageRow) two;
- final int result = (int) (rowOne.getUid() - rowTwo.getUid());
+ public int compare(Message one, Message two) {
+ final int result = (int) (one.getUid() - two.getUid());
return result;
}
Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java Wed Dec 31 02:44:55 2008
@@ -34,16 +34,15 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.james.imap.jpa.om.MessageFlags;
-import org.apache.james.imap.jpa.om.MessageHeader;
-import org.apache.james.imap.jpa.om.MessageRow;
+import org.apache.james.imap.jpa.om.Header;
+import org.apache.james.imap.jpa.om.Message;
+import org.apache.james.mailboxmanager.MailboxManagerException;
import org.apache.james.mailboxmanager.SearchQuery;
import org.apache.james.mailboxmanager.SearchQuery.NumericRange;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.field.datetime.DateTime;
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
import org.apache.james.mime4j.field.datetime.parser.ParseException;
-import org.apache.torque.TorqueException;
/**
* Uility methods to help perform search operations.
@@ -74,10 +73,10 @@
* @param row
* <code>MessageRow</code>, not null
* @return true if the row matches the given criteria, false otherwise
- * @throws TorqueException
+ * @throws MailboxManagerException
*/
- public boolean isMatch(final SearchQuery query, final MessageRow row)
- throws TorqueException {
+ public boolean isMatch(final SearchQuery query, final Message message)
+ throws MailboxManagerException {
final List criteria = query.getCriterias();
final Collection recentMessageUids = query.getRecentMessageUids();
boolean result = true;
@@ -85,7 +84,7 @@
for (Iterator it = criteria.iterator(); it.hasNext();) {
final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
.next();
- if (!isMatch(criterion, row, recentMessageUids)) {
+ if (!isMatch(criterion, message, recentMessageUids)) {
result = false;
break;
}
@@ -99,31 +98,31 @@
*
* @param query
* <code>SearchQuery.Criterion</code>, not null
- * @param row
+ * @param message
* <code>MessageRow</code>, not null
* @return true if the row matches the given criterion, false otherwise
- * @throws TorqueException
+ * @throws MailboxManagerException
*/
- public boolean isMatch(SearchQuery.Criterion criterion, MessageRow row,
- final Collection recentMessageUids) throws TorqueException {
+ public boolean isMatch(SearchQuery.Criterion criterion, Message message,
+ final Collection recentMessageUids) throws MailboxManagerException {
final boolean result;
if (criterion instanceof SearchQuery.InternalDateCriterion) {
- result = matches((SearchQuery.InternalDateCriterion) criterion, row);
+ result = matches((SearchQuery.InternalDateCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.SizeCriterion) {
- result = matches((SearchQuery.SizeCriterion) criterion, row);
+ result = matches((SearchQuery.SizeCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.HeaderCriterion) {
- result = matches((SearchQuery.HeaderCriterion) criterion, row);
+ result = matches((SearchQuery.HeaderCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.UidCriterion) {
- result = matches((SearchQuery.UidCriterion) criterion, row);
+ result = matches((SearchQuery.UidCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.FlagCriterion) {
- result = matches((SearchQuery.FlagCriterion) criterion, row,
+ result = matches((SearchQuery.FlagCriterion) criterion, message,
recentMessageUids);
} else if (criterion instanceof SearchQuery.TextCriterion) {
- result = matches((SearchQuery.TextCriterion) criterion, row);
+ result = matches((SearchQuery.TextCriterion) criterion, message);
} else if (criterion instanceof SearchQuery.AllCriterion) {
result = true;
} else if (criterion instanceof SearchQuery.ConjunctionCriterion) {
- result = matches((SearchQuery.ConjunctionCriterion) criterion, row,
+ result = matches((SearchQuery.ConjunctionCriterion) criterion, message,
recentMessageUids);
} else {
throw new UnsupportedSearchException();
@@ -131,8 +130,7 @@
return result;
}
- private boolean matches(SearchQuery.TextCriterion criterion, MessageRow row)
- throws TorqueException {
+ private boolean matches(SearchQuery.TextCriterion criterion, Message message) throws MailboxManagerException {
try {
final SearchQuery.ContainsOperator operator = criterion
.getOperator();
@@ -140,20 +138,20 @@
final int type = criterion.getType();
switch (type) {
case SearchQuery.TextCriterion.BODY:
- return bodyContains(value, row);
+ return bodyContains(value, message);
case SearchQuery.TextCriterion.FULL_MESSAGE:
- return messageContains(value, row);
+ return messageContains(value, message);
default:
throw new UnsupportedSearchException();
}
} catch (IOException e) {
- throw new TorqueException(e);
+ throw new MailboxManagerException(e);
}
}
- private boolean bodyContains(String value, MessageRow row)
- throws TorqueException, IOException, MimeException {
- final InputStream input = MessageRowUtils.toInput(row);
+ private boolean bodyContains(String value, Message message)
+ throws IOException, MimeException {
+ final InputStream input = MessageRowUtils.toInput(message);
final boolean result = isInMessage(value, input, false);
return result;
}
@@ -169,37 +167,36 @@
return result;
}
- private boolean messageContains(String value, MessageRow row)
- throws TorqueException, IOException, MimeException {
- final InputStream input = MessageRowUtils.toInput(row);
+ private boolean messageContains(String value, Message message)
+ throws IOException, MimeException {
+ final InputStream input = MessageRowUtils.toInput(message);
final boolean result = isInMessage(value, input, true);
return result;
}
private boolean matches(SearchQuery.ConjunctionCriterion criterion,
- MessageRow row, final Collection recentMessageUids)
- throws TorqueException {
+ Message message, final Collection recentMessageUids) throws MailboxManagerException {
final int type = criterion.getType();
final List criteria = criterion.getCriteria();
switch (type) {
case SearchQuery.ConjunctionCriterion.NOR:
- return nor(criteria, row, recentMessageUids);
+ return nor(criteria, message, recentMessageUids);
case SearchQuery.ConjunctionCriterion.OR:
- return or(criteria, row, recentMessageUids);
+ return or(criteria, message, recentMessageUids);
case SearchQuery.ConjunctionCriterion.AND:
- return and(criteria, row, recentMessageUids);
+ return and(criteria, message, recentMessageUids);
default:
return false;
}
}
- private boolean and(final List criteria, final MessageRow row,
- final Collection recentMessageUids) throws TorqueException {
+ private boolean and(final List criteria, final Message message,
+ final Collection recentMessageUids) throws MailboxManagerException {
boolean result = true;
for (Iterator it = criteria.iterator(); it.hasNext();) {
final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
.next();
- final boolean matches = isMatch(criterion, row, recentMessageUids);
+ final boolean matches = isMatch(criterion, message, recentMessageUids);
if (!matches) {
result = false;
break;
@@ -208,13 +205,13 @@
return result;
}
- private boolean or(final List criteria, final MessageRow row,
- final Collection recentMessageUids) throws TorqueException {
+ private boolean or(final List criteria, final Message message,
+ final Collection recentMessageUids) throws MailboxManagerException {
boolean result = false;
for (Iterator it = criteria.iterator(); it.hasNext();) {
final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
.next();
- final boolean matches = isMatch(criterion, row, recentMessageUids);
+ final boolean matches = isMatch(criterion, message, recentMessageUids);
if (matches) {
result = true;
break;
@@ -223,13 +220,13 @@
return result;
}
- private boolean nor(final List criteria, final MessageRow row,
- final Collection recentMessageUids) throws TorqueException {
+ private boolean nor(final List criteria, final Message message,
+ final Collection recentMessageUids) throws MailboxManagerException {
boolean result = true;
for (Iterator it = criteria.iterator(); it.hasNext();) {
final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
.next();
- final boolean matches = isMatch(criterion, row, recentMessageUids);
+ final boolean matches = isMatch(criterion, message, recentMessageUids);
if (matches) {
result = false;
break;
@@ -239,37 +236,34 @@
}
private boolean matches(SearchQuery.FlagCriterion criterion,
- MessageRow row, final Collection recentMessageUids)
- throws TorqueException {
+ Message message, final Collection recentMessageUids) {
final SearchQuery.BooleanOperator operator = criterion.getOperator();
final boolean isSet = operator.isSet();
final Flags.Flag flag = criterion.getFlag();
- final MessageFlags messageFlags = row.getMessageFlags();
final boolean result;
if (flag == Flags.Flag.ANSWERED) {
- result = isSet == messageFlags.getAnswered();
+ result = isSet == message.isAnswered();
} else if (flag == Flags.Flag.SEEN) {
- result = isSet == messageFlags.getSeen();
+ result = isSet == message.isSeen();
} else if (flag == Flags.Flag.DRAFT) {
- result = isSet == messageFlags.getDraft();
+ result = isSet == message.isDraft();
} else if (flag == Flags.Flag.FLAGGED) {
- result = isSet == messageFlags.getFlagged();
+ result = isSet == message.isFlagged();
} else if (flag == Flags.Flag.RECENT) {
- final long uid = row.getUid();
+ final long uid = message.getUid();
result = isSet == recentMessageUids.contains(new Long(uid));
} else if (flag == Flags.Flag.DELETED) {
- result = isSet == messageFlags.getDeleted();
+ result = isSet == message.isDeleted();
} else {
result = false;
}
return result;
}
- private boolean matches(SearchQuery.UidCriterion criterion, MessageRow row)
- throws TorqueException {
+ private boolean matches(SearchQuery.UidCriterion criterion, Message message) {
final SearchQuery.InOperator operator = criterion.getOperator();
final NumericRange[] ranges = operator.getRange();
- final long uid = row.getUid();
+ final long uid = message.getUid();
final int length = ranges.length;
boolean result = false;
for (int i = 0; i < length; i++) {
@@ -282,31 +276,26 @@
return result;
}
- private boolean matches(SearchQuery.HeaderCriterion criterion,
- MessageRow row) throws TorqueException {
+ private boolean matches(SearchQuery.HeaderCriterion criterion, Message message) throws UnsupportedSearchException {
final SearchQuery.HeaderOperator operator = criterion.getOperator();
final String headerName = criterion.getHeaderName();
final boolean result;
if (operator instanceof SearchQuery.DateOperator) {
- result = matches((SearchQuery.DateOperator) operator, headerName,
- row);
+ result = matches((SearchQuery.DateOperator) operator, headerName, message);
} else if (operator instanceof SearchQuery.ContainsOperator) {
- result = matches((SearchQuery.ContainsOperator) operator,
- headerName, row);
+ result = matches((SearchQuery.ContainsOperator) operator, headerName, message);
} else if (operator instanceof SearchQuery.ExistsOperator) {
- result = exists(headerName, row);
+ result = exists(headerName, message);
} else {
throw new UnsupportedSearchException();
}
return result;
}
- private boolean exists(String headerName, MessageRow row)
- throws TorqueException {
+ private boolean exists(String headerName, Message message) {
boolean result = false;
- final List headers = row.getMessageHeaders();
- for (Iterator it = headers.iterator(); it.hasNext();) {
- final MessageHeader header = (MessageHeader) it.next();
+ final List<Header> headers = message.getHeaders();
+ for (Header header:headers) {
final String name = header.getField();
if (headerName.equalsIgnoreCase(name)) {
result = true;
@@ -317,13 +306,11 @@
}
private boolean matches(final SearchQuery.ContainsOperator operator,
- final String headerName, final MessageRow row)
- throws TorqueException {
+ final String headerName, final Message message) {
final String text = operator.getValue().toUpperCase();
boolean result = false;
- final List headers = row.getMessageHeaders();
- for (Iterator it = headers.iterator(); it.hasNext();) {
- final MessageHeader header = (MessageHeader) it.next();
+ final List<Header> headers = message.getHeaders();
+ for (Header header:headers) {
final String name = header.getField();
if (headerName.equalsIgnoreCase(name)) {
final String value = header.getValue();
@@ -339,13 +326,12 @@
}
private boolean matches(final SearchQuery.DateOperator operator,
- final String headerName, final MessageRow row)
- throws TorqueException {
+ final String headerName, final Message message) throws UnsupportedSearchException {
final int day = operator.getDay();
final int month = operator.getMonth();
final int year = operator.getYear();
final int iso = toISODate(day, month, year);
- final String value = headerValue(headerName, row);
+ final String value = headerValue(headerName, message);
if (value == null) {
return false;
} else {
@@ -368,12 +354,10 @@
}
}
- private String headerValue(final String headerName, final MessageRow row)
- throws TorqueException {
- final List headers = row.getMessageHeaders();
+ private String headerValue(final String headerName, final Message message) {
+ final List<Header> headers = message.getHeaders();
String value = null;
- for (Iterator it = headers.iterator(); it.hasNext();) {
- final MessageHeader header = (MessageHeader) it.next();
+ for (Header header:headers) {
final String name = header.getField();
if (headerName.equalsIgnoreCase(name)) {
value = header.getValue();
@@ -391,10 +375,10 @@
return isoFieldValue;
}
- private boolean matches(SearchQuery.SizeCriterion criterion, MessageRow row)
+ private boolean matches(SearchQuery.SizeCriterion criterion, Message message)
throws UnsupportedSearchException {
final SearchQuery.NumericOperator operator = criterion.getOperator();
- final int size = row.getSize();
+ final int size = message.getSize();
final long value = operator.getValue();
final int type = operator.getType();
switch (type) {
@@ -410,19 +394,19 @@
}
private boolean matches(SearchQuery.InternalDateCriterion criterion,
- MessageRow row) throws UnsupportedSearchException {
+ Message message) throws UnsupportedSearchException {
final SearchQuery.DateOperator operator = criterion.getOperator();
- final boolean result = matchesInternalDate(operator, row);
+ final boolean result = matchesInternalDate(operator, message);
return result;
}
private boolean matchesInternalDate(
- final SearchQuery.DateOperator operator, final MessageRow row)
+ final SearchQuery.DateOperator operator, final Message message)
throws UnsupportedSearchException {
final int day = operator.getDay();
final int month = operator.getMonth();
final int year = operator.getYear();
- final Date internalDate = row.getInternalDate();
+ final Date internalDate = message.getInternalDate();
final int type = operator.getType();
switch (type) {
case SearchQuery.DateOperator.ON:
Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java Wed Dec 31 02:44:55 2008
@@ -36,8 +36,7 @@
public class MimeDescriptorImpl implements MessageResult.MimeDescriptor {
- public static MimeDescriptorImpl build(final InputStream stream)
- throws IOException {
+ public static MimeDescriptorImpl build(final InputStream stream) throws IOException {
final MimeTokenStream parser = MimeTokenStream
.createMaximalDescriptorStream();
parser.parse(stream);
@@ -53,7 +52,7 @@
&& next != MimeTokenStream.T_END_OF_STREAM
&& next != MimeTokenStream.T_START_MULTIPART) {
if (next == MimeTokenStream.T_FIELD) {
- headers.add(new Header(parser.getFieldName(), parser
+ headers.add(new ResultHeader(parser.getFieldName(), parser
.getFieldValue().trim()));
}
next = parser.next();
@@ -140,25 +139,25 @@
for (final Iterator it = valuesByName.keySet().iterator(); it.hasNext();) {
final String name = (String) it.next();
final String value = (String) valuesByName.get(name);
- contentTypeParameters.add(new Header(name, value));
+ contentTypeParameters.add(new ResultHeader(name, value));
}
final String codeset = descriptor.getCharset();
- Header header;
+ ResultHeader header;
if (codeset == null) {
if ("TEXT".equals(type)) {
- header = new Header("charset", "us-ascii");
+ header = new ResultHeader("charset", "us-ascii");
} else {
header = null;
}
} else {
- header = new Header("charset", codeset);
+ header = new ResultHeader("charset", codeset);
}
if (header != null) {
contentTypeParameters.add(header);
}
final String boundary = descriptor.getBoundary();
if (boundary != null) {
- contentTypeParameters.add(new Header("boundary", boundary));
+ contentTypeParameters.add(new ResultHeader("boundary", boundary));
}
final List languages = descriptor.getContentLanguage();
final String disposition = descriptor.getContentDispositionType();
Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java Wed Dec 31 02:44:55 2008
@@ -205,7 +205,7 @@
case MimeTokenStream.T_FIELD:
final String fieldValue = parser.getFieldValue().trim();
final String fieldName = parser.getFieldName();
- Header header = new Header(fieldName, fieldValue);
+ ResultHeader header = new ResultHeader(fieldName, fieldValue);
results.add(header);
break;
}
@@ -233,7 +233,7 @@
final String fieldValue = parser.getFieldValue()
.trim();
final String fieldName = parser.getFieldName();
- Header header = new Header(fieldName, fieldValue);
+ ResultHeader header = new ResultHeader(fieldName, fieldValue);
results.add(header);
break;
}
Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java (from r730067, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Header.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Header.java&r1=730067&r2=730371&rev=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Header.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java Wed Dec 31 02:44:55 2008
@@ -28,23 +28,23 @@
import javax.mail.MessagingException;
-import org.apache.james.imap.jpa.om.MessageHeader;
+import org.apache.james.imap.jpa.om.Header;
import org.apache.james.mailboxmanager.MailboxManagerException;
import org.apache.james.mailboxmanager.MessageResult;
import org.apache.james.mailboxmanager.MessageResult.Content;
-final class Header implements MessageResult.Header, MessageResult.Content {
+final class ResultHeader implements MessageResult.Header, MessageResult.Content {
private final String name;
private final String value;
private final long size;
- public Header(final MessageHeader header) {
+ public ResultHeader(final Header header) {
this(header.getField(), header.getValue());
}
- public Header(String name, String value) {
+ public ResultHeader(String name, String value) {
this.name = name;
this.value = value;
size = name.length() + value.length() + 2;
Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java Wed Dec 31 02:44:55 2008
@@ -19,12 +19,12 @@
package org.apache.james.imap.jpa;
-import org.apache.torque.TorqueException;
+import org.apache.james.mailboxmanager.MailboxManagerException;
/**
* Indicates that the requested search is not supported by this implementation.
*/
-public class UnsupportedSearchException extends TorqueException {
+public class UnsupportedSearchException extends MailboxManagerException {
private static final long serialVersionUID = -7442949630563672557L;
Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java (from r730067, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MailboxMapper.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MailboxMapper.java&r1=730067&r2=730371&rev=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MailboxMapper.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java Wed Dec 31 02:44:55 2008
@@ -17,116 +17,52 @@
* under the License. *
****************************************************************/
-package org.apache.james.imap.jpa.om;
+package org.apache.james.imap.jpa.map;
import java.util.List;
-import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.MessageRange;
-import org.apache.torque.TorqueException;
-import org.apache.torque.util.CountHelper;
-import org.apache.torque.util.Criteria;
+import javax.persistence.EntityManager;
+
+import org.apache.james.imap.jpa.om.Mailbox;
/**
* Data access management for mailbox.
*/
-public class MailboxMapper {
+public abstract class MailboxMapper extends Mapper {
+
+ public MailboxMapper(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ public void save(Mailbox mailbox) {
+ entityManager.persist(mailbox);
+ }
+
+ public Mailbox findMailboxByName(String name) {
+ return (Mailbox) entityManager.createNamedQuery("findMailboxByName").setParameter("nameParam", name).getSingleResult();
+ }
+
+ public void delete(Mailbox mailbox) {
+ entityManager.remove(mailbox);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Mailbox> findMailboxWithNameLike(String name) {
+ return entityManager.createNamedQuery("findMailboxWithNameLike").setParameter("nameParam", name).getResultList();
+ }
- public void save(MailboxRow mailbox) throws TorqueException {
- mailbox.save();
+ public void deleteAll() {
+ entityManager.createNamedQuery("deleteAll").executeUpdate();
}
- /**
- * Finds a mailbox by name.
- * @param name not null
- * @return not null
- * @throws TorqueException
- */
- public MailboxRow findByName(String name) throws TorqueException {
- return MailboxRowPeer.retrieveByName(name);
- }
-
- /**
- * Deletes the given mailbox.
- * @param mailbox not null
- * @throws TorqueException
- */
- public static void delete(MailboxRow mailbox) throws TorqueException {
- MailboxRowPeer.doDelete(mailbox);
- }
-
- public List findNameLike(String name) throws TorqueException {
- Criteria c = new Criteria();
- c.add(MailboxRowPeer.NAME,
- (Object) name,
- Criteria.LIKE);
- List l = MailboxRowPeer.doSelect(c);
- return l;
- }
-
- public void deleteAll() throws TorqueException {
- MailboxRowPeer.doDelete(new Criteria().and(
- MailboxRowPeer.MAILBOX_ID, new Integer(-1),
- Criteria.GREATER_THAN));
- }
-
- public int countOnName(String mailboxName) throws TorqueException {
- int count;
- Criteria c = new Criteria();
- c.add(MailboxRowPeer.NAME, mailboxName);
- CountHelper countHelper = new CountHelper();
- count = countHelper.count(c);
- return count;
- }
-
-
- public List findInMailbox(MessageRange set, long mailboxId) throws MailboxManagerException, TorqueException {
- Criteria c = criteriaForMessageSet(set);
- c.add(MessageFlagsPeer.MAILBOX_ID, mailboxId);
- List rows = MessageMapper.doSelectJoinMessageFlags(c);
- return rows;
- }
-
- public List findMarkedForDeletionInMailbox(final MessageRange set, final long mailboxId) throws TorqueException, MailboxManagerException {
- final Criteria criteria = criteriaForMessageSet(set);
- criteria.addJoin(MessageRowPeer.MAILBOX_ID, MessageFlagsPeer.MAILBOX_ID);
- criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
- criteria.add(MessageFlagsPeer.DELETED, true);
- criteria.add(MessageRowPeer.MAILBOX_ID, mailboxId);
- final List messageRows = MessageRowPeer.doSelect(criteria);
- return messageRows;
- }
-
- private Criteria criteriaForMessageSet(MessageRange set) throws MailboxManagerException {
- Criteria criteria = new Criteria();
- criteria.addAscendingOrderByColumn(MessageRowPeer.UID);
- 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.GREATER_EQUAL);
- if (set.getUidTo() > 0) {
- Criteria.Criterion criterion2 = criteria.getNewCriterion(
- MessageRowPeer.UID, new Long(set.getUidTo()),
- Criteria.LESS_EQUAL);
- criterion1.and(criterion2);
- }
- criteria.add(criterion1);
- }
- } else {
- throw new MailboxManagerException("Unsupported MessageSet: "
- + set.getType());
- }
- return criteria;
+ public long countMailboxesWithName(String name) {
+ return (Long) entityManager.createNamedQuery("countMailboxesWithName").setParameter("nameParam", name).getSingleResult();
}
- public MailboxRow findById(long mailboxId) throws TorqueException {
- return MailboxRowPeer.retrieveByPK(mailboxId);
+ public Mailbox findMailboxById(long mailboxId) {
+ return (Mailbox) entityManager.createNamedQuery("findMailboxById").setParameter("idParam", mailboxId).getSingleResult();
}
+ /** Locking is required and is implementation specific */
+ public abstract Mailbox consumeNextUid(long mailboxId);
}
Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,39 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.imap.jpa.map;
+
+import javax.persistence.EntityManager;
+
+abstract class Mapper {
+
+ protected final EntityManager entityManager;
+
+ public Mapper(final EntityManager entityManager) {
+ super();
+ this.entityManager = entityManager;
+ }
+
+ public void begin() {
+ entityManager.getTransaction().begin();
+ }
+
+ public void commit() {
+ entityManager.getTransaction().commit();
+ }
+}
Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java (from r730067, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MessageMapper.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MessageMapper.java&r1=730067&r2=730371&rev=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MessageMapper.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java Wed Dec 31 02:44:55 2008
@@ -16,223 +16,185 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.imap.jpa.om;
+package org.apache.james.imap.jpa.map;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.List;
-import javax.mail.Flags;
+import javax.persistence.EntityManager;
+import org.apache.james.imap.jpa.om.Message;
+import org.apache.james.mailboxmanager.MessageRange;
import org.apache.james.mailboxmanager.SearchQuery;
import org.apache.james.mailboxmanager.SearchQuery.Criterion;
import org.apache.james.mailboxmanager.SearchQuery.NumericRange;
-import org.apache.torque.TorqueException;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-import org.apache.torque.util.Transaction;
-
-import com.workingdogs.village.DataSetException;
-import com.workingdogs.village.Record;
-
-public class MessageMapper {
-
- public MailboxRow consumeNextUid(long mailboxId) throws SQLException, TorqueException {
- Connection c = Transaction.begin(MailboxRowPeer.DATABASE_NAME);
- int ti = c.getTransactionIsolation();
- boolean ac = c.getAutoCommit();
- c.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
- c.setAutoCommit(false);
- try {
- String sql = "UPDATE " + MailboxRowPeer.TABLE_NAME + " set "
- + MailboxRowPeer.LAST_UID + " = " + MailboxRowPeer.LAST_UID
- + "+1 WHERE " + MailboxRowPeer.MAILBOX_ID + " = "
- + mailboxId;
- MailboxRowPeer.executeStatement(sql, c);
- MailboxRow mr = MailboxRowPeer.retrieveByPK(mailboxId, c);
- Transaction.commit(c);
- return mr;
- } catch (TorqueException e) {
- Transaction.safeRollback(c);
- throw e;
- } finally {
- try {
- c.setTransactionIsolation(ti);
- c.setAutoCommit(ac);
- } catch (Exception e) {
- // TODO: Log?
- }
- }
+
+public class MessageMapper extends Mapper {
+
+ public MessageMapper(EntityManager entityManager) {
+ super(entityManager);
}
- public void resetRecent(long mailboxId) throws TorqueException {
- String sql = "UPDATE " + MessageFlagsPeer.TABLE_NAME + " set "
- + MessageFlagsPeer.RECENT + " = 0 WHERE "
- + MessageFlagsPeer.MAILBOX_ID + " = " + mailboxId
- + " AND " + MessageFlagsPeer.RECENT + " = 1 ";
- MessageFlagsPeer.executeStatement(sql);
- }
-
- public int countMessages(long mailboxId) throws TorqueException, DataSetException {
- return countMessages(new Flags(), true, mailboxId);
- }
-
- public int countMessages(Flags flags, boolean value, long mailboxId)
- throws TorqueException, DataSetException {
- Criteria criteria = new Criteria();
- criteria.addSelectColumn(" COUNT(" + MessageFlagsPeer.UID + ") ");
- criteria.add(MessageFlagsPeer.MAILBOX_ID, mailboxId);
- MessageMapper.addFlagsToCriteria(flags, value, criteria);
- List result = MessageFlagsPeer.doSelectVillageRecords(criteria);
- Record record = (Record) result.get(0);
- int numberOfRecords = record.getValue(1).asInt();
- return numberOfRecords;
- }
-
- public List find(SearchQuery query) throws TorqueException {
- final Criteria criterion = preSelect(query);
- final List rows = MessageMapper
- .doSelectJoinMessageFlags(criterion);
- return rows;
- }
-
- private Criteria preSelect(SearchQuery query) {
- final Criteria results = new Criteria();
- final List criteria = query.getCriterias();
- if (criteria.size() == 1) {
- final Criterion criterion = (Criterion) criteria.get(0);
- if (criterion instanceof SearchQuery.UidCriterion) {
- final SearchQuery.UidCriterion uidCriterion = (SearchQuery.UidCriterion) criterion;
- preSelectUid(results, uidCriterion);
- }
+ public List<Message> findInMailbox(MessageRange set, long mailboxId) {
+ final List<Message> results;
+ switch (set.getType()) {
+ case MessageRange.TYPE_UID:
+ final long from = set.getUidFrom();
+ final long to = set.getUidTo();
+ if (from == to) {
+ results = findMessagesInMailboxWithUID(mailboxId, from);
+ } else if (to > 0) {
+ results = findMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+ } else {
+ results = findMessagesInMailboxAfterUID(mailboxId, from);
+ }
+ break;
+ default:
+ //TODO: Log?
+ case MessageRange.TYPE_ALL:
+ results = findMessagesInMailbox(mailboxId);
+ break;
}
return results;
}
-
- 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();
- final long high = ranges[i].getHighValue();
- if (low == Long.MAX_VALUE) {
- results.add(MessageRowPeer.UID, high, Criteria.LESS_EQUAL);
- } else if (low == high) {
- results.add(MessageRowPeer.UID, low);
- } else {
- 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);
- fromCriterion.and(toCriterion);
+ @SuppressWarnings("unchecked")
+ private List<Message> findMessagesInMailboxAfterUID(long mailboxId, long uid) {
+ return entityManager.createNamedQuery("findMessagesInMailboxAfterUID")
+ .setParameter("idParam", mailboxId)
+ .setParameter("uidParam", uid).getResultList();
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<Message> findMessagesInMailboxWithUID(long mailboxId, long uid) {
+ return entityManager.createNamedQuery("findMessagesInMailboxWithUID")
+ .setParameter("idParam", mailboxId)
+ .setParameter("uidParam", uid).getResultList();
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<Message> findMessagesInMailboxBetweenUIDs(long mailboxId, long from, long to) {
+ return entityManager.createNamedQuery("findMessagesInMailboxBetweenUIDs")
+ .setParameter("idParam", mailboxId)
+ .setParameter("fromParam", from)
+ .setParameter("toParam", to).getResultList();
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<Message> findMessagesInMailbox(long mailboxId) {
+ return entityManager.createNamedQuery("findMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
+ }
+
+ public List<Message> findMarkedForDeletionInMailbox(final MessageRange set, final long mailboxId) {
+ final List<Message> results;
+ switch (set.getType()) {
+ case MessageRange.TYPE_UID:
+ final long from = set.getUidFrom();
+ final long to = set.getUidTo();
+ if (from == to) {
+ results = findDeletedMessagesInMailboxWithUID(mailboxId, from);
+ } else if (to > 0) {
+ results = findDeletedMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+ } else {
+ results = findDeletedMessagesInMailboxAfterUID(mailboxId, from);
}
- results.add(fromCriterion);
- }
+ break;
+ default:
+ //TODO: Log?
+ case MessageRange.TYPE_ALL:
+ results = findDeletedMessagesInMailbox(mailboxId);
+ break;
}
+ return results;
}
- public void delete(MessageRow messageRow) throws TorqueException {
- Criteria todelc = new Criteria();
- todelc
- .add(MessageRowPeer.MAILBOX_ID, messageRow
- .getMailboxId());
- todelc.add(MessageRowPeer.UID, messageRow.getUid());
- MessageRowPeer.doDelete(todelc);
- }
-
- public List findUnseen(final long mailboxId) throws TorqueException {
- Criteria criteria = new Criteria();
- criteria.addAscendingOrderByColumn(MessageRowPeer.UID);
- criteria.setLimit(1);
- criteria.setSingleRecord(true);
-
- criteria.addJoin(MessageFlagsPeer.MAILBOX_ID,
- MessageRowPeer.MAILBOX_ID);
- criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-
- MessageMapper.addFlagsToCriteria(new Flags(Flags.Flag.SEEN), false, criteria);
- criteria.add(MessageRowPeer.MAILBOX_ID, mailboxId);
-
- final List messageRows = MessageRowPeer.doSelect(criteria);
- return messageRows;
- }
-
- public List findRecent(final long mailboxId) throws TorqueException {
- final Criteria criteria = new Criteria();
- criteria.addJoin(MessageFlagsPeer.MAILBOX_ID,
- MessageRowPeer.MAILBOX_ID);
- criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-
- MessageMapper.addFlagsToCriteria(new Flags(Flags.Flag.RECENT), true,
- criteria);
- criteria.add(MessageRowPeer.MAILBOX_ID, mailboxId);
-
- final List messageRows = MessageRowPeer.doSelect(criteria);
- return messageRows;
- }
-
- static List doSelectJoinMessageFlags(Criteria criteria)
- throws TorqueException {
-
- MessageRowPeer.addSelectColumns(criteria);
- int offset = MessageRowPeer.numColumns + 1;
- MessageFlagsPeer.addSelectColumns(criteria);
-
- criteria
- .addJoin(MessageRowPeer.MAILBOX_ID, MessageFlagsPeer.MAILBOX_ID);
- criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-
- List rows = BasePeer.doSelect(criteria);
- List result = new ArrayList(rows.size());
-
- for (int i = 0; i < rows.size(); i++) {
- Record row = (Record) rows.get(i);
-
- Class omClass = MessageRowPeer.getOMClass();
- MessageRow messageRow = (MessageRow) MessageRowPeer.row2Object(row,
- 1, omClass);
-
- omClass = MessageFlagsPeer.getOMClass();
- MessageFlags messageFlags = (MessageFlags) MessageFlagsPeer
- .row2Object(row, offset, omClass);
- messageRow.setMessageFlags(messageFlags);
+ @SuppressWarnings("unchecked")
+ private List<Message> findDeletedMessagesInMailbox(long mailboxId) {
+ return entityManager.createNamedQuery("findDeletedMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
+ }
- result.add(messageRow);
- }
- return result;
+ @SuppressWarnings("unchecked")
+ private List<Message> findDeletedMessagesInMailboxAfterUID(long mailboxId, long uid) {
+ return entityManager.createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
+ .setParameter("idParam", mailboxId)
+ .setParameter("uidParam", uid).getResultList();
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<Message> findDeletedMessagesInMailboxWithUID(long mailboxId, long uid) {
+ return entityManager.createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
+ .setParameter("idParam", mailboxId)
+ .setParameter("uidParam", uid).getResultList();
+ }
+
+ @SuppressWarnings("unchecked")
+ private List<Message> findDeletedMessagesInMailboxBetweenUIDs(long mailboxId, long from, long to) {
+ return entityManager.createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
+ .setParameter("idParam", mailboxId)
+ .setParameter("fromParam", from)
+ .setParameter("toParam", to).getResultList();
}
+
- static void addFlagsToCriteria(Flags flags, boolean value, Criteria c) {
- if (flags.contains(Flags.Flag.ANSWERED)) {
- c.add(MessageFlagsPeer.ANSWERED, value);
- }
- if (flags.contains(Flags.Flag.DELETED)) {
- c.add(MessageFlagsPeer.DELETED, value);
- }
- if (flags.contains(Flags.Flag.DRAFT)) {
- c.add(MessageFlagsPeer.DRAFT, value);
- }
- if (flags.contains(Flags.Flag.FLAGGED)) {
- c.add(MessageFlagsPeer.FLAGGED, value);
- }
- if (flags.contains(Flags.Flag.RECENT)) {
- c.add(MessageFlagsPeer.RECENT, value);
- }
- if (flags.contains(Flags.Flag.SEEN)) {
- c.add(MessageFlagsPeer.SEEN, value);
- }
+ public void resetRecentMessages(long mailboxId) {
+ entityManager.createNamedQuery("resetRecentMessages").setParameter("idParam", mailboxId).executeUpdate();
+ }
+
+ public long countMessagesInMailbox(long mailboxId) {
+ return (Long) entityManager.createNamedQuery("countMessagesInMailbox").setParameter("idParam", mailboxId).getSingleResult();
+ }
+
+ public long countUnseenMessagesInMailbox(long mailboxId){
+ return (Long) entityManager.createNamedQuery("countUnseenMessagesInMailbox").setParameter("idParam", mailboxId).getSingleResult();
}
- public void save(MessageFlags messageFlags) throws TorqueException {
- messageFlags.save();
+ @SuppressWarnings("unchecked")
+ public List<Message> searchMailbox(long mailboxId, SearchQuery query) {
+ final String jql = formulateJQL(mailboxId, query);
+ return entityManager.createQuery(jql).getResultList();
+ }
+
+ private String formulateJQL(long mailboxId, SearchQuery query) {
+ final StringBuilder queryBuilder = new StringBuilder(50);
+ queryBuilder.append("SELECT message FROM Message message WHERE message.mailboxId = ").append(mailboxId);
+ final List<Criterion> criteria = query.getCriterias();
+ if (criteria.size() == 1) {
+ final Criterion firstCriterion = criteria.get(0);
+ if (firstCriterion instanceof SearchQuery.UidCriterion) {
+ final SearchQuery.UidCriterion uidCriterion = (SearchQuery.UidCriterion) firstCriterion;
+ final NumericRange[] ranges = uidCriterion.getOperator().getRange();
+ for (int i = 0; i < ranges.length; i++) {
+ final long low = ranges[i].getLowValue();
+ final long high = ranges[i].getHighValue();
+
+ if (low == Long.MAX_VALUE) {
+ queryBuilder.append(" AND message.uid<=").append(high);
+ } else if (low == high) {
+ queryBuilder.append(" AND message.uid=").append(low);
+ } else {
+ queryBuilder.append(" AND message.uid BETWEEN ").append(low).append(" AND ").append(high);
+ }
+ }
+ }
+ }
+ final String jql = queryBuilder.toString();
+ return jql;
+ }
+
+ public void delete(Message message) {
+ entityManager.remove(message);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Message> findUnseenMessagesInMailboxOrderByUid(final long mailboxId) {
+ return entityManager.createNamedQuery("findUnseenMessagesInMailboxOrderByUid").setParameter("idParam", mailboxId).getResultList();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Message> findRecentMessagesInMailbox(final long mailboxId) {
+ return entityManager.createNamedQuery("findRecentMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
}
- public void save(MessageRow messageRow) throws TorqueException {
- messageRow.save();
+ public void save(Message message) {
+ entityManager.persist(message);
}
}
Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java
------------------------------------------------------------------------------
svn:mergeinfo =
Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,119 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.imap.jpa.om;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Header implements Comparable<Header> {
+
+ private static final String TOSTRING_SEP = " ";
+
+ @Id @GeneratedValue private long id;
+
+ /** The value for the lineNumber field */
+ @Basic(optional=false) private int lineNumber;
+
+ /** The value for the field field */
+ @Basic(optional=false) private String field;
+
+ /** The value for the value field */
+ @Column(length=512)
+ @Basic(optional=false) private String value;
+
+ /**
+ * For JPA use only.
+ */
+ @Deprecated
+ public Header() {}
+
+ /**
+ * Copies the content of an existing header.
+ * @param mailboxId mailbox ID
+ * @param uid UI
+ * @param header
+ */
+ public Header(Header header) {
+ this(header.getLineNumber(), header.field, header.getValue());
+ }
+
+ public Header(int lineNumber, String field, String value) {
+ super();
+ this.lineNumber = lineNumber;
+ this.field = field;
+ this.value = value;
+ }
+
+ public String getField() {
+ return field;
+ }
+
+ public int getLineNumber() {
+ return lineNumber;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + (int) (id ^ (id >>> 32));
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ final Header other = (Header) obj;
+ if (id != other.id)
+ return false;
+ return true;
+ }
+
+ public String toString()
+ {
+ final String retValue = "Header ( "
+ + "id = " + this.id + TOSTRING_SEP
+ + "lineNumber = " + this.lineNumber + TOSTRING_SEP
+ + "field = " + this.field + TOSTRING_SEP
+ + "value = " + this.value + TOSTRING_SEP
+ + " )";
+ return retValue;
+ }
+
+ /**
+ * Natural sort is mailbox, (message) UID then line number
+ */
+ public int compareTo(final Header header) {
+ final int result = lineNumber - header.lineNumber;
+ return result;
+ }
+}
Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,147 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.imap.jpa.om;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+
+@Entity
+@NamedQueries({
+ @NamedQuery(name="findMailboxById",
+ query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.mailboxId = :idParam"),
+ @NamedQuery(name="findMailboxByName",
+ query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name = :nameParam"),
+ @NamedQuery(name="countMailboxesWithName",
+ query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name = :nameParam"),
+ @NamedQuery(name="deleteAll",
+ query="DELETE FROM Mailbox mailbox"),
+ @NamedQuery(name="findMailboxWithNameLike",
+ query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam")
+})
+public class Mailbox {
+
+ private static final String TAB = " ";
+
+ /** The value for the mailboxId field */
+ @Id @GeneratedValue private long mailboxId;
+
+ /** The value for the name field */
+ @Basic(optional=false) private String name;
+
+ /** The value for the uidValidity field */
+ @Basic(optional=false) private long uidValidity;
+
+
+ /** The value for the lastUid field */
+ @Basic(optional=false) private long lastUid = 0;
+
+
+ /** The value for the messageCount field */
+ @Basic(optional=false) private int messageCount = 0;
+
+
+ /** The value for the size field */
+ @Basic(optional=false) private long size = 0;
+
+ /**
+ * JPA only
+ */
+ @Deprecated
+ public Mailbox() {
+ super();
+ }
+
+ public Mailbox(String name, int uidValidity) {
+ this();
+ this.name= name;
+ this.uidValidity = uidValidity;
+ }
+
+ public long getLastUid() {
+ return lastUid;
+ }
+
+ public long getMailboxId() {
+ return mailboxId;
+ }
+
+ public int getMessageCount() {
+ return messageCount;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public long getSize() {
+ return size;
+ }
+
+ public long getUidValidity() {
+ return uidValidity;
+ }
+
+ public void consumeUid() {
+ ++lastUid;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString()
+ {
+ final String retValue = "Mailbox ( "
+ + "mailboxId = " + this.mailboxId + TAB
+ + "name = " + this.name + TAB
+ + "uidValidity = " + this.uidValidity + TAB
+ + "lastUid = " + this.lastUid + TAB
+ + "messageCount = " + this.messageCount + TAB
+ + "size = " + this.size + TAB
+ + " )";
+ return retValue;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32));
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ final Mailbox other = (Mailbox) obj;
+ if (mailboxId != other.mailboxId)
+ return false;
+ return true;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org