diff --git a/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntry.java b/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntry.java index c4c7f1da..82f566ad 100644 --- a/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntry.java +++ b/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntry.java @@ -30,6 +30,10 @@ package com.twelvemonkeys.imageio.metadata.xmp; import com.twelvemonkeys.imageio.metadata.AbstractEntry; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * XMPEntry * @@ -63,6 +67,23 @@ final class XMPEntry extends AbstractEntry { return fieldName != null ? fieldName : XMP.DEFAULT_NS_MAPPING.get(getIdentifier()); } + @Override + public String getTypeName() { + // Special handling for collections + Object value = getValue(); + if (value instanceof List) { + return "List"; + } + else if (value instanceof Set) { + return "Set"; + } + else if (value instanceof Map) { + return "Map"; + } + + // Fall back to class name + return super.getTypeName(); + } @Override public String toString() { String type = getTypeName(); diff --git a/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntryTest.java b/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntryTest.java index 176561c5..c656cc4b 100644 --- a/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntryTest.java +++ b/imageio/imageio-metadata/src/test/java/com/twelvemonkeys/imageio/metadata/xmp/XMPEntryTest.java @@ -30,6 +30,11 @@ package com.twelvemonkeys.imageio.metadata.xmp; import com.twelvemonkeys.imageio.metadata.Entry; import com.twelvemonkeys.imageio.metadata.EntryAbstractTest; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertEquals; /** * XMPEntryTest @@ -43,4 +48,25 @@ public class XMPEntryTest extends EntryAbstractTest { protected Entry createEntry(Object value) { return new XMPEntry(XMP.NS_XAP + ":foo", value); } + + @Test + public void testTypeNameMap() { + assertEquals("Map", createEntry(new HashMap<>()).getTypeName()); + assertEquals("Map", createEntry(Collections.emptyMap()).getTypeName()); + assertEquals("Map", createEntry(Collections.singletonMap("foo", "bar")).getTypeName()); + } + + @Test + public void testTypeNameSet() { + assertEquals("Set", createEntry(new HashSet<>()).getTypeName()); + assertEquals("Set", createEntry(Collections.singleton("foo")).getTypeName()); + assertEquals("Set", createEntry(Collections.unmodifiableSet(Collections.singleton("foo"))).getTypeName()); + } + + @Test + public void testTypeNameList() { + assertEquals("List", createEntry(new ArrayList<>()).getTypeName()); + assertEquals("List", createEntry(Collections.emptyList()).getTypeName()); + assertEquals("List", createEntry(Arrays.asList("foo", "bar")).getTypeName()); + } }