From 097d11f47169e7d71bf569338312c2e10fe66392 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Wed, 26 Oct 2011 15:18:02 +0100
Subject: [PATCH] Exposed getMessageHeaders() through DatabaseComponent
 interface.

---
 .../sf/briar/api/db/DatabaseComponent.java    |  4 ++++
 .../sf/briar/db/DatabaseComponentImpl.java    | 20 +++++++++++++++++++
 .../sf/briar/db/DatabaseComponentTest.java    |  5 +++++
 3 files changed, 29 insertions(+)

diff --git a/api/net/sf/briar/api/db/DatabaseComponent.java b/api/net/sf/briar/api/db/DatabaseComponent.java
index e8b1d51fd2..01d2253b95 100644
--- a/api/net/sf/briar/api/db/DatabaseComponent.java
+++ b/api/net/sf/briar/api/db/DatabaseComponent.java
@@ -16,6 +16,7 @@ import net.sf.briar.api.protocol.Batch;
 import net.sf.briar.api.protocol.Group;
 import net.sf.briar.api.protocol.GroupId;
 import net.sf.briar.api.protocol.Message;
+import net.sf.briar.api.protocol.MessageHeader;
 import net.sf.briar.api.protocol.MessageId;
 import net.sf.briar.api.protocol.Offer;
 import net.sf.briar.api.protocol.SubscriptionUpdate;
@@ -128,6 +129,9 @@ public interface DatabaseComponent {
 	Map<TransportId, TransportProperties> getLocalTransports()
 	throws DbException;
 
+	/** Returns the headers of all messages in the given group. */
+	Collection<MessageHeader> getMessageHeaders(GroupId g) throws DbException;
+
 	/** Returns the user's rating for the given author. */
 	Rating getRating(AuthorId a) throws DbException;
 
diff --git a/components/net/sf/briar/db/DatabaseComponentImpl.java b/components/net/sf/briar/db/DatabaseComponentImpl.java
index ea996eb776..b9ae4b7c60 100644
--- a/components/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/components/net/sf/briar/db/DatabaseComponentImpl.java
@@ -44,6 +44,7 @@ import net.sf.briar.api.protocol.BatchId;
 import net.sf.briar.api.protocol.Group;
 import net.sf.briar.api.protocol.GroupId;
 import net.sf.briar.api.protocol.Message;
+import net.sf.briar.api.protocol.MessageHeader;
 import net.sf.briar.api.protocol.MessageId;
 import net.sf.briar.api.protocol.Offer;
 import net.sf.briar.api.protocol.SubscriptionUpdate;
@@ -781,6 +782,25 @@ DatabaseCleaner.Callback {
 		}
 	}
 
+	public Collection<MessageHeader> getMessageHeaders(GroupId g)
+	throws DbException {
+		messageLock.readLock().lock();
+		try {
+			T txn = db.startTransaction();
+			try {
+				Collection<MessageHeader> headers =
+					db.getMessageHeaders(txn, g);
+				db.commitTransaction(txn);
+				return headers;
+			} catch(DbException e) {
+				db.abortTransaction(txn);
+				throw e;
+			}
+		} finally {
+			messageLock.readLock().unlock();
+		}
+	}
+
 	public Rating getRating(AuthorId a) throws DbException {
 		ratingLock.readLock().lock();
 		try {
diff --git a/test/net/sf/briar/db/DatabaseComponentTest.java b/test/net/sf/briar/db/DatabaseComponentTest.java
index bc846980bd..7d4efe5703 100644
--- a/test/net/sf/briar/db/DatabaseComponentTest.java
+++ b/test/net/sf/briar/db/DatabaseComponentTest.java
@@ -27,6 +27,7 @@ import net.sf.briar.api.protocol.BatchId;
 import net.sf.briar.api.protocol.Group;
 import net.sf.briar.api.protocol.GroupId;
 import net.sf.briar.api.protocol.Message;
+import net.sf.briar.api.protocol.MessageHeader;
 import net.sf.briar.api.protocol.MessageId;
 import net.sf.briar.api.protocol.Offer;
 import net.sf.briar.api.protocol.ProtocolConstants;
@@ -144,6 +145,9 @@ public abstract class DatabaseComponentTest extends TestCase {
 			will(returnValue(groupId));
 			oneOf(database).containsSubscription(txn, groupId);
 			will(returnValue(true));
+			// getMessageHeaders(groupId)
+			oneOf(database).getMessageHeaders(txn, groupId);
+			will(returnValue(Collections.<MessageHeader>emptyList()));
 			// getSubscriptions()
 			oneOf(database).getSubscriptions(txn);
 			will(returnValue(Collections.singletonList(groupId)));
@@ -181,6 +185,7 @@ public abstract class DatabaseComponentTest extends TestCase {
 		assertEquals(remoteProperties, db.getRemoteProperties(transportId));
 		db.subscribe(group); // First time - check listeners are called
 		db.subscribe(group); // Second time - check listeners aren't called
+		assertEquals(Collections.emptyList(), db.getMessageHeaders(groupId));
 		assertEquals(Collections.singletonList(groupId), db.getSubscriptions());
 		db.unsubscribe(groupId); // First time - check listeners are called
 		db.unsubscribe(groupId); // Second time - check listeners aren't called
-- 
GitLab