fix #9137 IPTC keywords read by CdmImageInfo
authorAndreas Müller <a.mueller@bgbm.org>
Mon, 13 Jul 2020 19:01:58 +0000 (21:01 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Mon, 13 Jul 2020 19:01:58 +0000 (21:01 +0200)
cdmlib-commons/src/main/java/eu/etaxonomy/cdm/common/media/CdmImageInfo.java
cdmlib-commons/src/test/java/eu/etaxonomy/cdm/common/media/CdmImageInfoTest.java
cdmlib-commons/src/test/resources/images/OregonScientificDS6639-DSC_0307-small.jpg

index b530b2964f257ec683dceebc4da2a7f4832b3cdb..66fa16488d52ee5c0487a8cc04fec9a282d1ce57 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.http.HttpException;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.log4j.Logger;
 
+import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.common.UriUtils;
 
 /**
@@ -159,10 +160,20 @@ public  class CdmImageInfo extends MediaInfo {
 
                        if (mediaData != null){
                                metaData = new HashMap<>();
-                               for (ImageMetadataItem item2 : mediaData.getItems()){
-                                       if (item2 instanceof GenericImageMetadataItem){
-                                           GenericImageMetadataItem item = (GenericImageMetadataItem)item2;
-                                           if (item.getKeyword().contains("/")){
+                               for (ImageMetadataItem imItem : mediaData.getItems()){
+                                       if (imItem instanceof GenericImageMetadataItem){
+                                           GenericImageMetadataItem item = (GenericImageMetadataItem)imItem;
+                                           if ("Keywords".equals(item.getKeyword())){
+                                               String value = text(item);
+                                               String[] splits = value.split(":");
+                               if (splits.length == 2){
+                                   //convention used e.g. for Flora of cyprus (#9137)
+                                   metaData.put(splits[0].trim(), splits[1].trim());
+                               }else{
+                                   metaData.put(item.getKeyword(), CdmUtils.concat("; ", metaData.get(item.getKeyword()), value));
+                               }
+                                           }else if (item.getKeyword().contains("/")){
+                               //TODO: not sure where this syntax is used originally
                                                String key = item.getKeyword();
                                                //key.replace("/", "");
                                                int index = key.indexOf("/");
@@ -174,8 +185,7 @@ public  class CdmImageInfo extends MediaInfo {
                                        }
                                }
                        }
-               }
-               catch (ImageReadException e) {
+               }catch (ImageReadException e) {
                        logger.error("Could not read: " + imageUri + ". " + e.getMessage());
                        //throw new IOException(e);
                }
index cb616a37c4449a5b41f92ad4b4dedeec698424f8..dc2c2e4c12a936ea459d6577c303efd5a7332007 100644 (file)
@@ -213,7 +213,7 @@ public class CdmImageInfoTest {
 
     @Test
     public void testGetLength(){
-        Assert.assertEquals(63500, getJpegInstance().getLength());
+        Assert.assertEquals(55872, getJpegInstance().getLength());
         Assert.assertEquals(202926, getTifInstance().getLength());
 
         try {
@@ -249,7 +249,14 @@ public class CdmImageInfoTest {
 
         Map<String, String> metaData = instance.getMetaData();
 
-        Assert.assertEquals(48, metaData.size());
+        Assert.assertEquals(52, metaData.size());
+
+        Assert.assertEquals("My taxon", metaData.get("Taxon"));
+        Assert.assertEquals("on the road", metaData.get("Locality"));
+        Assert.assertEquals("15.02.1955", metaData.get("Date"));
+        Assert.assertEquals("Any person", metaData.get("Photographer"));
+        Assert.assertEquals("My Keyword; Second Keyword", metaData.get("Keywords"));
+
     }
 
 
index be6b448d09c53993bfac8cfdb1a2c7a4266dddf0..674f29a7f4d1334c91005d51a336a467d799c036 100644 (file)
Binary files a/cdmlib-commons/src/test/resources/images/OregonScientificDS6639-DSC_0307-small.jpg and b/cdmlib-commons/src/test/resources/images/OregonScientificDS6639-DSC_0307-small.jpg differ