From: Andreas Müller Date: Mon, 13 Jul 2020 19:01:58 +0000 (+0200) Subject: fix #9137 IPTC keywords read by CdmImageInfo X-Git-Tag: 5.17.0^2~56 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/commitdiff_plain/2e047df9e907f36f7179ebbda3a420adfa690c78 fix #9137 IPTC keywords read by CdmImageInfo --- diff --git a/cdmlib-commons/src/main/java/eu/etaxonomy/cdm/common/media/CdmImageInfo.java b/cdmlib-commons/src/main/java/eu/etaxonomy/cdm/common/media/CdmImageInfo.java index b530b2964f..66fa16488d 100644 --- a/cdmlib-commons/src/main/java/eu/etaxonomy/cdm/common/media/CdmImageInfo.java +++ b/cdmlib-commons/src/main/java/eu/etaxonomy/cdm/common/media/CdmImageInfo.java @@ -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); } diff --git a/cdmlib-commons/src/test/java/eu/etaxonomy/cdm/common/media/CdmImageInfoTest.java b/cdmlib-commons/src/test/java/eu/etaxonomy/cdm/common/media/CdmImageInfoTest.java index cb616a37c4..dc2c2e4c12 100644 --- a/cdmlib-commons/src/test/java/eu/etaxonomy/cdm/common/media/CdmImageInfoTest.java +++ b/cdmlib-commons/src/test/java/eu/etaxonomy/cdm/common/media/CdmImageInfoTest.java @@ -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 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")); + } diff --git a/cdmlib-commons/src/test/resources/images/OregonScientificDS6639-DSC_0307-small.jpg b/cdmlib-commons/src/test/resources/images/OregonScientificDS6639-DSC_0307-small.jpg index be6b448d09..674f29a7f4 100644 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