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>.