From 15ab5be476a96bf138f9c40110866e6370356537 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Sun, 9 Dec 2012 20:29:29 +0000
Subject: [PATCH] Equals method must be symmetric and transitive.

---
 briar-api/src/net/sf/briar/api/ContactId.java | 10 ++++-----
 .../net/sf/briar/api/protocol/Transport.java  | 21 +++++++++++--------
 .../src/net/sf/briar/db/JdbcDatabase.java     |  4 ++--
 .../src/net/sf/briar/protocol/GroupImpl.java  |  8 +++----
 .../net/sf/briar/protocol/MessageImpl.java    |  8 +++----
 .../sf/briar/protocol/ProtocolWriterImpl.java |  2 +-
 .../src/net/sf/briar/db/TestMessage.java      |  8 +++----
 .../net/sf/briar/protocol/ConstantsTest.java  |  4 +++-
 8 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/briar-api/src/net/sf/briar/api/ContactId.java b/briar-api/src/net/sf/briar/api/ContactId.java
index d8a9f7a388..7875f596d4 100644
--- a/briar-api/src/net/sf/briar/api/ContactId.java
+++ b/briar-api/src/net/sf/briar/api/ContactId.java
@@ -17,13 +17,13 @@ public class ContactId {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		if(o instanceof ContactId) return id == ((ContactId) o).id;
-		return false;
+	public int hashCode() {
+		return id;
 	}
 
 	@Override
-	public int hashCode() {
-		return id;
+	public boolean equals(Object o) {
+		if(o instanceof ContactId) return id == ((ContactId) o).id;
+		return false;
 	}
 }
diff --git a/briar-api/src/net/sf/briar/api/protocol/Transport.java b/briar-api/src/net/sf/briar/api/protocol/Transport.java
index 707d84fa7e..4ac071160b 100644
--- a/briar-api/src/net/sf/briar/api/protocol/Transport.java
+++ b/briar-api/src/net/sf/briar/api/protocol/Transport.java
@@ -3,37 +3,40 @@ package net.sf.briar.api.protocol;
 import java.util.Map;
 import java.util.TreeMap;
 
-public class Transport extends TreeMap<String, String> {
-
-	private static final long serialVersionUID = 4900420175715429560L;
+public class Transport {
 
 	private final TransportId id;
+	private final TreeMap<String, String> properties;
 
 	public Transport(TransportId id, Map<String, String> p) {
-		super(p);
 		this.id = id;
+		properties = new TreeMap<String, String>(p);
 	}
 
 	public Transport(TransportId id) {
-		super();
 		this.id = id;
+		properties = new TreeMap<String, String>();
 	}
 
 	public TransportId getId() {
 		return id;
 	}
 
-	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public Map<String, String> getProperties() {
+		return properties;
 	}
 
 	@Override
 	public boolean equals(Object o) {
 		if(o instanceof Transport) {
 			Transport t = (Transport) o;
-			return id.equals(t.id) && super.equals(o);
+			return id.equals(t.id) && properties.equals(t.properties);
 		}
 		return false;
 	}
+
+	@Override
+	public int hashCode() {
+		return id.hashCode();
+	}
 }
diff --git a/briar-core/src/net/sf/briar/db/JdbcDatabase.java b/briar-core/src/net/sf/briar/db/JdbcDatabase.java
index 49a336cabb..f44accc83a 100644
--- a/briar-core/src/net/sf/briar/db/JdbcDatabase.java
+++ b/briar-core/src/net/sf/briar/db/JdbcDatabase.java
@@ -1207,7 +1207,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 					t = new Transport(id);
 					transports.add(t);
 				}
-				t.put(rs.getString(2), rs.getString(3));
+				t.getProperties().put(rs.getString(2), rs.getString(3));
 				lastId = id;
 			}
 			rs.close();
@@ -2763,7 +2763,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 			int batchSize = 0;
 			for(Transport t : transports) {
 				ps.setBytes(2, t.getId().getBytes());
-				for(Entry<String, String> e1 : t.entrySet()) {
+				for(Entry<String, String> e1 : t.getProperties().entrySet()) {
 					ps.setString(3, e1.getKey());
 					ps.setString(4, e1.getValue());
 					ps.addBatch();
diff --git a/briar-core/src/net/sf/briar/protocol/GroupImpl.java b/briar-core/src/net/sf/briar/protocol/GroupImpl.java
index 88f63622d8..d3a84ba5ac 100644
--- a/briar-core/src/net/sf/briar/protocol/GroupImpl.java
+++ b/briar-core/src/net/sf/briar/protocol/GroupImpl.java
@@ -28,12 +28,12 @@ class GroupImpl implements Group {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		return o instanceof Group && id.equals(((Group) o).getId());
+	public int hashCode() {
+		return id.hashCode();
 	}
 
 	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public boolean equals(Object o) {
+		return o instanceof Group && id.equals(((Group) o).getId());
 	}
 }
diff --git a/briar-core/src/net/sf/briar/protocol/MessageImpl.java b/briar-core/src/net/sf/briar/protocol/MessageImpl.java
index 505f9e6218..3b6c739c23 100644
--- a/briar-core/src/net/sf/briar/protocol/MessageImpl.java
+++ b/briar-core/src/net/sf/briar/protocol/MessageImpl.java
@@ -72,12 +72,12 @@ class MessageImpl implements Message {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		return o instanceof Message && id.equals(((Message) o).getId());
+	public int hashCode() {
+		return id.hashCode();
 	}
 
 	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public boolean equals(Object o) {
+		return o instanceof Message && id.equals(((Message) o).getId());
 	}
 }
diff --git a/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java b/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java
index d7bebf4e2e..fd100d561e 100644
--- a/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java
+++ b/briar-core/src/net/sf/briar/protocol/ProtocolWriterImpl.java
@@ -148,7 +148,7 @@ class ProtocolWriterImpl implements ProtocolWriter {
 		for(Transport p : t.getTransports()) {
 			w.writeStructId(Types.TRANSPORT);
 			w.writeBytes(p.getId().getBytes());
-			w.writeMap(p);
+			w.writeMap(p.getProperties());
 		}
 		w.writeListEnd();
 		w.writeInt64(t.getTimestamp());
diff --git a/briar-tests/src/net/sf/briar/db/TestMessage.java b/briar-tests/src/net/sf/briar/db/TestMessage.java
index 4dbe7584a5..bf25200e04 100644
--- a/briar-tests/src/net/sf/briar/db/TestMessage.java
+++ b/briar-tests/src/net/sf/briar/db/TestMessage.java
@@ -78,12 +78,12 @@ class TestMessage implements Message {
 	}
 
 	@Override
-	public boolean equals(Object o) {
-		return o instanceof Message && id.equals(((Message)o).getId());
+	public int hashCode() {
+		return id.hashCode();
 	}
 
 	@Override
-	public int hashCode() {
-		return id.hashCode();
+	public boolean equals(Object o) {
+		return o instanceof Message && id.equals(((Message)o).getId());
 	}
 }
diff --git a/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java b/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java
index e4c6af3a1a..5a438af495 100644
--- a/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java
+++ b/briar-tests/src/net/sf/briar/protocol/ConstantsTest.java
@@ -15,6 +15,7 @@ import java.security.PrivateKey;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
 
 import net.sf.briar.BriarTestCase;
 import net.sf.briar.TestUtils;
@@ -158,10 +159,11 @@ public class ConstantsTest extends BriarTestCase {
 		for(int i = 0; i < MAX_TRANSPORTS; i++) {
 			TransportId id = new TransportId(TestUtils.getRandomId());
 			Transport t = new Transport(id);
+			Map<String, String> m = t.getProperties();
 			for(int j = 0; j < MAX_PROPERTIES_PER_TRANSPORT; j++) {
 				String key = createRandomString(MAX_PROPERTY_LENGTH);
 				String value = createRandomString(MAX_PROPERTY_LENGTH);
-				t.put(key, value);
+				m.put(key, value);
 			}
 			transports.add(t);
 		}
-- 
GitLab