Converted database events from an enum to classes to allow them to

carry data.
This commit is contained in:
akwizgran
2011-10-17 22:47:38 +01:00
parent 89001e4c91
commit ec56b12384
18 changed files with 165 additions and 80 deletions

View File

@@ -9,6 +9,7 @@ import net.sf.briar.api.Rating;
import net.sf.briar.api.TransportConfig; import net.sf.briar.api.TransportConfig;
import net.sf.briar.api.TransportId; import net.sf.briar.api.TransportId;
import net.sf.briar.api.TransportProperties; import net.sf.briar.api.TransportProperties;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.protocol.Ack; import net.sf.briar.api.protocol.Ack;
import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.AuthorId;
import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.Batch;

View File

@@ -1,15 +0,0 @@
package net.sf.briar.api.db;
/** An interface for receiving notifications when database events occur. */
public interface DatabaseListener {
static enum Event {
BATCH_RECEIVED,
CONTACTS_UPDATED,
MESSAGES_ADDED,
SUBSCRIPTIONS_UPDATED,
TRANSPORTS_UPDATED
};
void eventOccurred(Event e);
}

View File

@@ -0,0 +1,5 @@
package net.sf.briar.api.db.event;
public class BatchReceivedEvent extends DatabaseEvent {
}

View File

@@ -0,0 +1,16 @@
package net.sf.briar.api.db.event;
import net.sf.briar.api.ContactId;
public class ContactAddedEvent extends DatabaseEvent {
private final ContactId contactId;
public ContactAddedEvent(ContactId contactId) {
this.contactId = contactId;
}
public ContactId getContactId() {
return contactId;
}
}

View File

@@ -0,0 +1,10 @@
package net.sf.briar.api.db.event;
import net.sf.briar.api.ContactId;
public class ContactRemovedEvent extends ContactAddedEvent {
public ContactRemovedEvent(ContactId contactId) {
super(contactId);
}
}

View File

@@ -0,0 +1,5 @@
package net.sf.briar.api.db.event;
public abstract class DatabaseEvent {
}

View File

@@ -0,0 +1,8 @@
package net.sf.briar.api.db.event;
/** An interface for receiving notifications when database events occur. */
public interface DatabaseListener {
void eventOccurred(DatabaseEvent e);
}

View File

@@ -0,0 +1,5 @@
package net.sf.briar.api.db.event;
public class MessagesAddedEvent extends DatabaseEvent {
}

View File

@@ -0,0 +1,19 @@
package net.sf.briar.api.db.event;
import java.util.Collection;
import net.sf.briar.api.ContactId;
public class SubscriptionsUpdatedEvent extends DatabaseEvent {
private final Collection<ContactId> affectedContacts;
// FIXME: Replace this constructor
public SubscriptionsUpdatedEvent() {
affectedContacts = null;
}
public Collection<ContactId> getAffectedContacts() {
return affectedContacts;
}
}

View File

@@ -0,0 +1,5 @@
package net.sf.briar.api.db.event;
public class TransportsUpdatedEvent extends DatabaseEvent {
}

View File

@@ -406,13 +406,14 @@ interface Database<T> {
void removeMessage(T txn, MessageId m) throws DbException; void removeMessage(T txn, MessageId m) throws DbException;
/** /**
* Unsubscribes from the given group. Any messages belonging to the group * Unsubscribes from the given group and returns true if a subscription
* previously existed. Any messages belonging to the group
* are deleted from the database. * are deleted from the database.
* <p> * <p>
* Locking: contacts read, messages write, messageStatuses write, * Locking: contacts read, messages write, messageStatuses write,
* subscriptions write. * subscriptions write.
*/ */
void removeSubscription(T txn, GroupId g) throws DbException; boolean removeSubscription(T txn, GroupId g) throws DbException;
/** /**
* Sets the configuration for the given transport, replacing any existing * Sets the configuration for the given transport, replacing any existing

View File

@@ -25,11 +25,17 @@ import net.sf.briar.api.TransportConfig;
import net.sf.briar.api.TransportId; import net.sf.briar.api.TransportId;
import net.sf.briar.api.TransportProperties; import net.sf.briar.api.TransportProperties;
import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener;
import net.sf.briar.api.db.DatabaseListener.Event;
import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.DbException;
import net.sf.briar.api.db.NoSuchContactException; import net.sf.briar.api.db.NoSuchContactException;
import net.sf.briar.api.db.Status; import net.sf.briar.api.db.Status;
import net.sf.briar.api.db.event.BatchReceivedEvent;
import net.sf.briar.api.db.event.ContactAddedEvent;
import net.sf.briar.api.db.event.ContactRemovedEvent;
import net.sf.briar.api.db.event.DatabaseEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.db.event.MessagesAddedEvent;
import net.sf.briar.api.db.event.SubscriptionsUpdatedEvent;
import net.sf.briar.api.db.event.TransportsUpdatedEvent;
import net.sf.briar.api.protocol.Ack; import net.sf.briar.api.protocol.Ack;
import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.AuthorId;
import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.Batch;
@@ -146,12 +152,12 @@ DatabaseCleaner.Callback {
contactLock.writeLock().unlock(); contactLock.writeLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
callListeners(Event.CONTACTS_UPDATED); callListeners(new ContactAddedEvent(c));
return c; return c;
} }
/** Notifies all listeners of a database event. */ /** Notifies all listeners of a database event. */
private void callListeners(DatabaseListener.Event e) { private void callListeners(DatabaseEvent e) {
synchronized(listeners) { synchronized(listeners) {
if(!listeners.isEmpty()) { if(!listeners.isEmpty()) {
// Shuffle the listeners so we don't always send new messages // Shuffle the listeners so we don't always send new messages
@@ -199,7 +205,7 @@ DatabaseCleaner.Callback {
contactLock.readLock().unlock(); contactLock.readLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
if(added) callListeners(Event.MESSAGES_ADDED); if(added) callListeners(new MessagesAddedEvent());
} }
/** /**
@@ -316,7 +322,7 @@ DatabaseCleaner.Callback {
contactLock.readLock().unlock(); contactLock.readLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
if(added) callListeners(Event.MESSAGES_ADDED); if(added) callListeners(new MessagesAddedEvent());
} }
/** /**
@@ -937,8 +943,8 @@ DatabaseCleaner.Callback {
contactLock.readLock().unlock(); contactLock.readLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
callListeners(Event.BATCH_RECEIVED); callListeners(new BatchReceivedEvent());
if(anyAdded) callListeners(Event.MESSAGES_ADDED); if(anyAdded) callListeners(new MessagesAddedEvent());
} }
/** /**
@@ -1102,7 +1108,7 @@ DatabaseCleaner.Callback {
contactLock.writeLock().unlock(); contactLock.writeLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
callListeners(Event.CONTACTS_UPDATED); callListeners(new ContactRemovedEvent(c));
} }
public void setConfig(TransportId t, TransportConfig config) public void setConfig(TransportId t, TransportConfig config)
@@ -1126,7 +1132,7 @@ DatabaseCleaner.Callback {
transportLock.writeLock().unlock(); transportLock.writeLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
if(changed) callListeners(Event.TRANSPORTS_UPDATED); if(changed) callListeners(new TransportsUpdatedEvent());
} }
public void setConnectionWindow(ContactId c, TransportId t, public void setConnectionWindow(ContactId c, TransportId t,
@@ -1172,7 +1178,7 @@ DatabaseCleaner.Callback {
transportLock.writeLock().unlock(); transportLock.writeLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
if(changed) callListeners(Event.TRANSPORTS_UPDATED); if(changed) callListeners(new TransportsUpdatedEvent());
} }
public void setRating(AuthorId a, Rating r) throws DbException { public void setRating(AuthorId a, Rating r) throws DbException {
@@ -1317,7 +1323,7 @@ DatabaseCleaner.Callback {
subscriptionLock.writeLock().unlock(); subscriptionLock.writeLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
if(added) callListeners(Event.SUBSCRIPTIONS_UPDATED); if(added) callListeners(new SubscriptionsUpdatedEvent());
} }
public void unsubscribe(GroupId g) throws DbException { public void unsubscribe(GroupId g) throws DbException {
@@ -1333,10 +1339,7 @@ DatabaseCleaner.Callback {
try { try {
T txn = db.startTransaction(); T txn = db.startTransaction();
try { try {
if(db.containsSubscription(txn, g)) { removed = db.removeSubscription(txn, g);
db.removeSubscription(txn, g);
removed = true;
}
db.commitTransaction(txn); db.commitTransaction(txn);
} catch(DbException e) { } catch(DbException e) {
db.abortTransaction(txn); db.abortTransaction(txn);
@@ -1355,7 +1358,7 @@ DatabaseCleaner.Callback {
contactLock.readLock().unlock(); contactLock.readLock().unlock();
} }
// Call the listeners outside the lock // Call the listeners outside the lock
if(removed) callListeners(Event.SUBSCRIPTIONS_UPDATED); if(removed) callListeners(new SubscriptionsUpdatedEvent());
} }
public void checkFreeSpaceAndClean() throws DbException { public void checkFreeSpaceAndClean() throws DbException {

View File

@@ -1754,7 +1754,7 @@ abstract class JdbcDatabase implements Database<Connection> {
} }
} }
public void removeSubscription(Connection txn, GroupId g) public boolean removeSubscription(Connection txn, GroupId g)
throws DbException { throws DbException {
PreparedStatement ps = null; PreparedStatement ps = null;
try { try {
@@ -1762,8 +1762,9 @@ abstract class JdbcDatabase implements Database<Connection> {
ps = txn.prepareStatement(sql); ps = txn.prepareStatement(sql);
ps.setBytes(1, g.getBytes()); ps.setBytes(1, g.getBytes());
int affected = ps.executeUpdate(); int affected = ps.executeUpdate();
if(affected != 1) throw new DbStateException(); if(affected > 1) throw new DbStateException();
ps.close(); ps.close();
return affected > 0;
} catch(SQLException e) { } catch(SQLException e) {
tryToClose(ps); tryToClose(ps);
throw new DbException(e); throw new DbException(e);

View File

@@ -16,9 +16,12 @@ import net.sf.briar.api.ContactId;
import net.sf.briar.api.TransportId; import net.sf.briar.api.TransportId;
import net.sf.briar.api.crypto.CryptoComponent; import net.sf.briar.api.crypto.CryptoComponent;
import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener;
import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.DbException;
import net.sf.briar.api.db.NoSuchContactException; import net.sf.briar.api.db.NoSuchContactException;
import net.sf.briar.api.db.event.ContactAddedEvent;
import net.sf.briar.api.db.event.ContactRemovedEvent;
import net.sf.briar.api.db.event.DatabaseEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.transport.ConnectionRecogniser; import net.sf.briar.api.transport.ConnectionRecogniser;
import net.sf.briar.api.transport.ConnectionWindow; import net.sf.briar.api.transport.ConnectionWindow;
@@ -127,9 +130,9 @@ DatabaseListener {
return contactId; return contactId;
} }
public void eventOccurred(Event e) { public void eventOccurred(DatabaseEvent e) {
// When the set of contacts changes we need to re-initialise everything // When the set of contacts changes we need to re-initialise everything
if(e == Event.CONTACTS_UPDATED) { if(e instanceof ContactAddedEvent || e instanceof ContactRemovedEvent) {
synchronized(this) { synchronized(this) {
initialised = false; initialised = false;
} }

View File

@@ -4,7 +4,7 @@ interface Flags {
// Flags raised by the database listener // Flags raised by the database listener
static final int BATCH_RECEIVED = 1; static final int BATCH_RECEIVED = 1;
static final int CONTACTS_UPDATED = 2; static final int CONTACT_REMOVED = 2;
static final int MESSAGES_ADDED = 4; static final int MESSAGES_ADDED = 4;
static final int SUBSCRIPTIONS_UPDATED = 8; static final int SUBSCRIPTIONS_UPDATED = 8;
static final int TRANSPORTS_UPDATED = 16; static final int TRANSPORTS_UPDATED = 16;

View File

@@ -14,8 +14,14 @@ import net.sf.briar.api.ContactId;
import net.sf.briar.api.FormatException; import net.sf.briar.api.FormatException;
import net.sf.briar.api.TransportId; import net.sf.briar.api.TransportId;
import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener;
import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.DbException;
import net.sf.briar.api.db.event.BatchReceivedEvent;
import net.sf.briar.api.db.event.ContactRemovedEvent;
import net.sf.briar.api.db.event.DatabaseEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.db.event.MessagesAddedEvent;
import net.sf.briar.api.db.event.SubscriptionsUpdatedEvent;
import net.sf.briar.api.db.event.TransportsUpdatedEvent;
import net.sf.briar.api.protocol.Ack; import net.sf.briar.api.protocol.Ack;
import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.Batch;
import net.sf.briar.api.protocol.MessageId; import net.sf.briar.api.protocol.MessageId;
@@ -81,19 +87,28 @@ abstract class StreamConnection implements DatabaseListener {
protected abstract ConnectionWriter createConnectionWriter() protected abstract ConnectionWriter createConnectionWriter()
throws DbException, IOException ; throws DbException, IOException ;
public void eventOccurred(Event e) { public void eventOccurred(DatabaseEvent e) {
synchronized(this) { synchronized(this) {
if(e == Event.BATCH_RECEIVED) if(e instanceof BatchReceivedEvent) {
writerFlags |= Flags.BATCH_RECEIVED; writerFlags |= Flags.BATCH_RECEIVED;
else if(e == Event.CONTACTS_UPDATED) notifyAll();
writerFlags |= Flags.CONTACTS_UPDATED; } else if(e instanceof ContactRemovedEvent) {
else if(e == Event.MESSAGES_ADDED) ContactId c = ((ContactRemovedEvent) e).getContactId();
if(contactId.equals(c)) {
writerFlags |= Flags.CONTACT_REMOVED;
notifyAll();
}
} else if(e instanceof MessagesAddedEvent) {
writerFlags |= Flags.MESSAGES_ADDED; writerFlags |= Flags.MESSAGES_ADDED;
else if(e == Event.SUBSCRIPTIONS_UPDATED) notifyAll();
} else if(e instanceof SubscriptionsUpdatedEvent) {
// FIXME: Check whether the change affected this contact
writerFlags |= Flags.SUBSCRIPTIONS_UPDATED; writerFlags |= Flags.SUBSCRIPTIONS_UPDATED;
else if(e == Event.TRANSPORTS_UPDATED) notifyAll();
} else if(e instanceof TransportsUpdatedEvent) {
writerFlags |= Flags.TRANSPORTS_UPDATED; writerFlags |= Flags.TRANSPORTS_UPDATED;
notifyAll(); notifyAll();
}
} }
} }
@@ -207,11 +222,9 @@ abstract class StreamConnection implements DatabaseListener {
writerFlags = 0; writerFlags = 0;
} }
// Handle the flags in approximate order of urgency // Handle the flags in approximate order of urgency
if((flags & Flags.CONTACTS_UPDATED) != 0) { if((flags & Flags.CONTACT_REMOVED) != 0) {
if(!db.getContacts().contains(contactId)) { connection.dispose(true);
connection.dispose(true); return;
return;
}
} }
if((flags & Flags.TRANSPORTS_UPDATED) != 0) { if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
sendTransports(transportWriter); sendTransports(transportWriter);
@@ -246,11 +259,9 @@ abstract class StreamConnection implements DatabaseListener {
writerFlags = 0; writerFlags = 0;
} }
// Handle the flags in approximate order of urgency // Handle the flags in approximate order of urgency
if((flags & Flags.CONTACTS_UPDATED) != 0) { if((flags & Flags.CONTACT_REMOVED) != 0) {
if(!db.getContacts().contains(contactId)) { connection.dispose(true);
connection.dispose(true); return;
return;
}
} }
if((flags & Flags.TRANSPORTS_UPDATED) != 0) { if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
sendTransports(transportWriter); sendTransports(transportWriter);
@@ -279,11 +290,9 @@ abstract class StreamConnection implements DatabaseListener {
writerFlags = 0; writerFlags = 0;
} }
// Handle the flags in approximate order of urgency // Handle the flags in approximate order of urgency
if((flags & Flags.CONTACTS_UPDATED) != 0) { if((flags & Flags.CONTACT_REMOVED) != 0) {
if(!db.getContacts().contains(contactId)) { connection.dispose(true);
connection.dispose(true); return;
return;
}
} }
if((flags & Flags.TRANSPORTS_UPDATED) != 0) { if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
sendTransports(transportWriter); sendTransports(transportWriter);

View File

@@ -14,10 +14,14 @@ import net.sf.briar.api.TransportConfig;
import net.sf.briar.api.TransportId; import net.sf.briar.api.TransportId;
import net.sf.briar.api.TransportProperties; import net.sf.briar.api.TransportProperties;
import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener;
import net.sf.briar.api.db.DatabaseListener.Event;
import net.sf.briar.api.db.NoSuchContactException; import net.sf.briar.api.db.NoSuchContactException;
import net.sf.briar.api.db.Status; import net.sf.briar.api.db.Status;
import net.sf.briar.api.db.event.ContactAddedEvent;
import net.sf.briar.api.db.event.ContactRemovedEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.db.event.MessagesAddedEvent;
import net.sf.briar.api.db.event.SubscriptionsUpdatedEvent;
import net.sf.briar.api.db.event.TransportsUpdatedEvent;
import net.sf.briar.api.protocol.Ack; import net.sf.briar.api.protocol.Ack;
import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.AuthorId;
import net.sf.briar.api.protocol.Batch; import net.sf.briar.api.protocol.Batch;
@@ -112,7 +116,7 @@ public abstract class DatabaseComponentTest extends TestCase {
// addContact(transports) // addContact(transports)
oneOf(database).addContact(txn, transports, secret); oneOf(database).addContact(txn, transports, secret);
will(returnValue(contactId)); will(returnValue(contactId));
oneOf(listener).eventOccurred(Event.CONTACTS_UPDATED); oneOf(listener).eventOccurred(with(any(ContactAddedEvent.class)));
// getContacts() // getContacts()
oneOf(database).getContacts(txn); oneOf(database).getContacts(txn);
will(returnValue(Collections.singletonList(contactId))); will(returnValue(Collections.singletonList(contactId)));
@@ -135,7 +139,8 @@ public abstract class DatabaseComponentTest extends TestCase {
oneOf(database).containsSubscription(txn, groupId); oneOf(database).containsSubscription(txn, groupId);
will(returnValue(false)); will(returnValue(false));
oneOf(database).addSubscription(txn, group); oneOf(database).addSubscription(txn, group);
oneOf(listener).eventOccurred(Event.SUBSCRIPTIONS_UPDATED); oneOf(listener).eventOccurred(with(any(
SubscriptionsUpdatedEvent.class)));
// subscribe(group) again // subscribe(group) again
oneOf(group).getId(); oneOf(group).getId();
will(returnValue(groupId)); will(returnValue(groupId));
@@ -145,12 +150,12 @@ public abstract class DatabaseComponentTest extends TestCase {
oneOf(database).getSubscriptions(txn); oneOf(database).getSubscriptions(txn);
will(returnValue(Collections.singletonList(groupId))); will(returnValue(Collections.singletonList(groupId)));
// unsubscribe(groupId) // unsubscribe(groupId)
oneOf(database).containsSubscription(txn, groupId);
will(returnValue(true));
oneOf(database).removeSubscription(txn, groupId); oneOf(database).removeSubscription(txn, groupId);
oneOf(listener).eventOccurred(Event.SUBSCRIPTIONS_UPDATED); will(returnValue(true));
oneOf(listener).eventOccurred(with(any(
SubscriptionsUpdatedEvent.class)));
// unsubscribe(groupId) again // unsubscribe(groupId) again
oneOf(database).containsSubscription(txn, groupId); oneOf(database).removeSubscription(txn, groupId);
will(returnValue(false)); will(returnValue(false));
// setConnectionWindow(contactId, 123, connectionWindow) // setConnectionWindow(contactId, 123, connectionWindow)
oneOf(database).containsContact(txn, contactId); oneOf(database).containsContact(txn, contactId);
@@ -159,7 +164,7 @@ public abstract class DatabaseComponentTest extends TestCase {
connectionWindow); connectionWindow);
// removeContact(contactId) // removeContact(contactId)
oneOf(database).removeContact(txn, contactId); oneOf(database).removeContact(txn, contactId);
oneOf(listener).eventOccurred(Event.CONTACTS_UPDATED); oneOf(listener).eventOccurred(with(any(ContactRemovedEvent.class)));
// close() // close()
oneOf(cleaner).stopCleaning(); oneOf(cleaner).stopCleaning();
oneOf(database).close(); oneOf(database).close();
@@ -1177,7 +1182,7 @@ public abstract class DatabaseComponentTest extends TestCase {
oneOf(database).setSendability(txn, messageId, 0); oneOf(database).setSendability(txn, messageId, 0);
oneOf(database).commitTransaction(txn); oneOf(database).commitTransaction(txn);
// The message was added, so the listener should be called // The message was added, so the listener should be called
oneOf(listener).eventOccurred(Event.MESSAGES_ADDED); oneOf(listener).eventOccurred(with(any(MessagesAddedEvent.class)));
}}); }});
DatabaseComponent db = createDatabaseComponent(database, cleaner); DatabaseComponent db = createDatabaseComponent(database, cleaner);
@@ -1205,7 +1210,7 @@ public abstract class DatabaseComponentTest extends TestCase {
will(returnValue(true)); will(returnValue(true));
oneOf(database).setStatus(txn, contactId, messageId, Status.NEW); oneOf(database).setStatus(txn, contactId, messageId, Status.NEW);
// The message was added, so the listener should be called // The message was added, so the listener should be called
oneOf(listener).eventOccurred(Event.MESSAGES_ADDED); oneOf(listener).eventOccurred(with(any(MessagesAddedEvent.class)));
}}); }});
DatabaseComponent db = createDatabaseComponent(database, cleaner); DatabaseComponent db = createDatabaseComponent(database, cleaner);
@@ -1290,7 +1295,8 @@ public abstract class DatabaseComponentTest extends TestCase {
oneOf(database).setLocalProperties(txn, transportId, oneOf(database).setLocalProperties(txn, transportId,
properties1); properties1);
oneOf(database).commitTransaction(txn); oneOf(database).commitTransaction(txn);
oneOf(listener).eventOccurred(Event.TRANSPORTS_UPDATED); oneOf(listener).eventOccurred(with(any(
TransportsUpdatedEvent.class)));
}}); }});
DatabaseComponent db = createDatabaseComponent(database, cleaner); DatabaseComponent db = createDatabaseComponent(database, cleaner);
@@ -1344,7 +1350,8 @@ public abstract class DatabaseComponentTest extends TestCase {
will(returnValue(config)); will(returnValue(config));
oneOf(database).setConfig(txn, transportId, config1); oneOf(database).setConfig(txn, transportId, config1);
oneOf(database).commitTransaction(txn); oneOf(database).commitTransaction(txn);
oneOf(listener).eventOccurred(Event.TRANSPORTS_UPDATED); oneOf(listener).eventOccurred(with(any(
TransportsUpdatedEvent.class)));
}}); }});
DatabaseComponent db = createDatabaseComponent(database, cleaner); DatabaseComponent db = createDatabaseComponent(database, cleaner);

View File

@@ -17,7 +17,9 @@ import net.sf.briar.api.ContactId;
import net.sf.briar.api.TransportId; import net.sf.briar.api.TransportId;
import net.sf.briar.api.TransportProperties; import net.sf.briar.api.TransportProperties;
import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseComponent;
import net.sf.briar.api.db.DatabaseListener; import net.sf.briar.api.db.event.DatabaseEvent;
import net.sf.briar.api.db.event.DatabaseListener;
import net.sf.briar.api.db.event.MessagesAddedEvent;
import net.sf.briar.api.protocol.Message; import net.sf.briar.api.protocol.Message;
import net.sf.briar.api.protocol.MessageEncoder; import net.sf.briar.api.protocol.MessageEncoder;
import net.sf.briar.api.protocol.ProtocolReaderFactory; import net.sf.briar.api.protocol.ProtocolReaderFactory;
@@ -163,8 +165,8 @@ public class BatchConnectionReadWriteTest extends TestCase {
private boolean messagesAdded = false; private boolean messagesAdded = false;
public void eventOccurred(Event e) { public void eventOccurred(DatabaseEvent e) {
if(e == Event.MESSAGES_ADDED) messagesAdded = true; if(e instanceof MessagesAddedEvent) messagesAdded = true;
} }
} }