You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by se...@apache.org on 2017/10/10 13:38:03 UTC
[tika] 01/02: [TIKA-2472] Reimplementing Metadata.hashCode using
the AbstractMap code but with Arrays.hashCode as suggested by Ken
This is an automated email from the ASF dual-hosted git repository.
sergeyb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tika.git
commit b1d80bd7a649e90b225b2769c8affc4809a9cb9b
Author: Sergey Beryozkin <sb...@gmail.com>
AuthorDate: Tue Oct 10 14:19:27 2017 +0100
[TIKA-2472] Reimplementing Metadata.hashCode using the AbstractMap code but with Arrays.hashCode as suggested by Ken
---
.../java/org/apache/tika/metadata/Metadata.java | 18 ++++++++-
.../org/apache/tika/metadata/TestMetadata.java | 46 ++++++++++++++++++++++
2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/tika-core/src/main/java/org/apache/tika/metadata/Metadata.java b/tika-core/src/main/java/org/apache/tika/metadata/Metadata.java
index 217eb01..03f9cfc 100644
--- a/tika-core/src/main/java/org/apache/tika/metadata/Metadata.java
+++ b/tika-core/src/main/java/org/apache/tika/metadata/Metadata.java
@@ -22,12 +22,16 @@ import java.io.Serializable;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Properties;
import java.util.TimeZone;
@@ -483,10 +487,20 @@ public class Metadata implements CreativeCommons, Geographic, HttpHeaders,
}
public int hashCode() {
- return metadata.hashCode();
+ int h = 0;
+ for (Iterator<Entry<String,String[]>> i = metadata.entrySet().iterator();
+ i.hasNext();) {
+ h += getMetadataEntryHashCode(i.next());
+ }
+ return h;
}
- public boolean equals(Object o) {
+ private int getMetadataEntryHashCode(Entry<String, String[]> e) {
+ return Objects.hashCode(e.getKey())
+ ^ (e.getValue() == null ? 0 : Arrays.hashCode(e.getValue()));
+ }
+
+ public boolean equals(Object o) {
if (o == null) {
return false;
diff --git a/tika-core/src/test/java/org/apache/tika/metadata/TestMetadata.java b/tika-core/src/test/java/org/apache/tika/metadata/TestMetadata.java
index e44b277..46b956d 100644
--- a/tika-core/src/test/java/org/apache/tika/metadata/TestMetadata.java
+++ b/tika-core/src/test/java/org/apache/tika/metadata/TestMetadata.java
@@ -422,4 +422,50 @@ public class TestMetadata {
return 1;
}
}
+
+ @Test
+ public void testEquals() {
+ Metadata meta1 = new Metadata();
+ meta1.add("key", "value1");
+ meta1.add("key", "value2");
+ meta1.add("key2", "value12");
+
+ Metadata meta2 = new Metadata();
+ meta2.add("key", "value1");
+ meta2.add("key", "value2");
+ meta2.add("key2", "value12");
+
+ assertEquals(meta1, meta2);
+ }
+
+ @Test
+ public void testNotEquals() {
+ Metadata meta1 = new Metadata();
+ meta1.add("key", "value1");
+ meta1.add("key", "value2");
+ meta1.add("key2", "value12");
+
+ Metadata meta2 = new Metadata();
+ meta2.add("key", "value1");
+ meta2.add("key", "value2");
+ meta2.add("key2", "value22");
+
+ assertFalse(meta1.equals(meta2));
+ }
+
+ @Test
+ public void testEqualAndHashCode() {
+ Metadata meta1 = new Metadata();
+ meta1.add("key", "value1");
+ meta1.add("key", "value2");
+ meta1.add("key2", "value12");
+
+ Metadata meta2 = new Metadata();
+ meta2.add("key", "value1");
+ meta2.add("key", "value2");
+ meta2.add("key2", "value12");
+
+ assertEquals(meta1, meta2);
+ assertEquals(meta1.hashCode(), meta2.hashCode());
+ }
}
--
To stop receiving notification emails like this one, please contact
"commits@tika.apache.org" <co...@tika.apache.org>.