From bcc899eebfc7d1c2d57dc8c1e75167ba3633e5c7 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 9 May 2019 17:46:45 +0100 Subject: [PATCH] Attach information to ContactExistsException. --- .../api/db/ContactExistsException.java | 19 +++++++++++++++++++ .../contact/ContactExchangeManagerImpl.java | 2 +- .../bramble/db/DatabaseComponentImpl.java | 7 +++---- .../bramble/db/DatabaseComponentImplTest.java | 6 ++++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/ContactExistsException.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/ContactExistsException.java index 6b51ce5b6..05b5821ef 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/ContactExistsException.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/ContactExistsException.java @@ -1,8 +1,27 @@ package org.briarproject.bramble.api.db; +import org.briarproject.bramble.api.identity.Author; +import org.briarproject.bramble.api.identity.AuthorId; + /** * Thrown when a duplicate contact is added to the database. This exception may * occur due to concurrent updates and does not indicate a database error. */ public class ContactExistsException extends DbException { + + private final AuthorId local; + private final Author remote; + + public ContactExistsException(AuthorId local, Author remote) { + this.local = local; + this.remote = remote; + } + + public AuthorId getLocalAuthorId() { + return local; + } + + public Author getRemoteAuthor() { + return remote; + } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeManagerImpl.java index f68ab538b..bebe3c407 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeManagerImpl.java @@ -229,7 +229,7 @@ class ContactExchangeManagerImpl implements ContactExchangeManager { logException(LOG, WARNING, e); tryToClose(conn); eventBus.broadcast( - new ContactExchangeFailedEvent(remoteInfo.author)); + new ContactExchangeFailedEvent(e.getRemoteAuthor())); } catch (DbException e) { logException(LOG, WARNING, e); tryToClose(conn); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index c4aeb15c5..275d04147 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -234,16 +234,15 @@ class DatabaseComponentImpl implements DatabaseComponent { @Override public ContactId addContact(Transaction transaction, Author remote, - AuthorId local, boolean verified) - throws DbException { + AuthorId local, boolean verified) throws DbException { if (transaction.isReadOnly()) throw new IllegalArgumentException(); T txn = unbox(transaction); if (!db.containsIdentity(txn, local)) throw new NoSuchIdentityException(); if (db.containsIdentity(txn, remote.getId())) - throw new ContactExistsException(); + throw new ContactExistsException(local, remote); if (db.containsContact(txn, remote.getId(), local)) - throw new ContactExistsException(); + throw new ContactExistsException(local, remote); ContactId c = db.addContact(txn, remote, local, verified); transaction.attach(new ContactAddedEvent(c)); return c; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java index a77acbdd6..24c363e22 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java @@ -1459,7 +1459,8 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { true)); fail(); } catch (ContactExistsException expected) { - // Expected + assertEquals(localAuthor.getId(), expected.getLocalAuthorId()); + assertEquals(author, expected.getRemoteAuthor()); } } @@ -1488,7 +1489,8 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { true)); fail(); } catch (ContactExistsException expected) { - // Expected + assertEquals(localAuthor.getId(), expected.getLocalAuthorId()); + assertEquals(author, expected.getRemoteAuthor()); } }