Author: norman
Date: Mon Sep 26 10:10:50 2011
New Revision: 1175769
URL: http://svn.apache.org/viewvc?rev=1175769&view=rev
Log:
Fix management operations. See JAMES-1316
Modified:
james/server/trunk/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
Modified:
james/server/trunk/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java?rev=1175769&r1=1175768&r2=1175769&view=diff
==============================================================================
---
james/server/trunk/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
(original)
+++
james/server/trunk/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
Mon Sep 26 10:10:50 2011
@@ -28,6 +28,8 @@ import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
@@ -424,15 +426,31 @@ public class FileMailQueue implements Ma
return i;
}
- /**
- * TODO: implement me
- *
- * @return
- * @throws MailQueueException
- */
@Override
public long clear() throws MailQueueException {
- throw new MailQueueException("Not supported yet");
+ final Iterator<Entry<String, FileItem>> items =
keyMappings.entrySet().iterator();
+ long count = 0;
+ while(items.hasNext()) {
+ Entry<String, FileItem> entry = items.next();
+ FileItem item = entry.getValue();
+ String key = entry.getKey();
+ File msgFile = new File(item.getMessageFile());
+ File objectFile = new File(item.getObjectFile());
+ if (objectFile.exists()) {
+ if (!objectFile.delete()) {
+ throw new MailQueueException("Unable to delete mail " +
key);
+ }
+ }
+ keyMappings.remove(key);
+ count++;
+ if (msgFile.exists()) {
+ if (!msgFile.delete()) {
+ log.debug("Remove of msg file for mail " + key +" failed");
+ }
+
+ }
+ }
+ return count;
}
/**
@@ -449,15 +467,78 @@ public class FileMailQueue implements Ma
}
- /**
- * TODO: implement me
- *
- * @return
- * @throws MailQueueException
- */
@Override
public MailQueueIterator browse() throws MailQueueException {
- throw new MailQueueException("Not supported yet");
+ final Iterator<FileItem> items = keyMappings.values().iterator();
+ return new MailQueueIterator() {
+ private MailQueueItemView item = null;
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("Read-only");
+ }
+
+ @Override
+ public MailQueueItemView next() {
+ if (hasNext()) {
+ MailQueueItemView vitem = item;
+ item = null;
+ return vitem;
+ } else {
+
+ throw new NoSuchElementException();
+ }
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (item == null) {
+ while (items.hasNext()) {
+ ObjectInputStream in = null;
+ try {
+ in = new ObjectInputStream(new
FileInputStream(items.next().getObjectFile()));
+ final Mail mail = (Mail) in.readObject();
+ item = new MailQueueItemView() {
+
+ @Override
+ public long getNextDelivery() {
+ return (Long)
mail.getAttribute(NEXT_DELIVERY);
+ }
+
+ @Override
+ public Mail getMail() {
+ return mail;
+ }
+ };
+ return true;
+ } catch (FileNotFoundException e) {
+ log.info("Unable to load mail", e);
+ } catch (IOException e) {
+ log.info("Unable to load mail", e);
+
+ } catch (ClassNotFoundException e) {
+ log.info("Unable to load mail", e);
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ // ignore on close
+ }
+ }
+ }
+ }
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ @Override
+ public void close() {
+ // do nothing
+ }
+ };
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]