Skip to content

Commit 03d0e6c

Browse files
committed
chore: refactor module fj-doc-val-imageio
1 parent 13b9a08 commit 03d0e6c

File tree

13 files changed

+41
-29
lines changed

13 files changed

+41
-29
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12-
- TIFF validtor based on TwelveMonkeys ImageIO <https://github.com/fugerit-org/fj-doc/issues/551>
12+
- Image validator based on TwelveMonkeys ImageIO (currently supporting TIFF) <https://github.com/fugerit-org/fj-doc/issues/551>
1313

1414
### Changed
1515

fj-doc-val-imageio-tiff/pom.xml renamed to fj-doc-val-imageio/pom.xml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44

5-
<artifactId>fj-doc-val-imageio-tiff</artifactId>
5+
<artifactId>fj-doc-val-imageio</artifactId>
66

77
<parent>
88
<groupId>org.fugerit.java</groupId>
99
<artifactId>fj-doc</artifactId>
1010
<version>8.17.1-SNAPSHOT</version>
1111
</parent>
1212

13-
<name>fj-doc-val-imageio-tiff</name>
14-
<description>Module for validating TIFF TwelveMonkeys ImageIO</description>
13+
<name>fj-doc-val-imageio</name>
14+
<description>Module for validating Images based TwelveMonkeys ImageIO</description>
1515

1616
<licenses>
1717
<license>
@@ -22,7 +22,7 @@
2222
</licenses>
2323

2424
<properties>
25-
<imageio-tiff-version>3.12.0</imageio-tiff-version>
25+
<imageio-version>3.12.0</imageio-version>
2626
</properties>
2727

2828
<build>
@@ -44,9 +44,15 @@
4444
<dependency>
4545
<groupId>com.twelvemonkeys.imageio</groupId>
4646
<artifactId>imageio-tiff</artifactId>
47-
<version>${imageio-tiff-version}</version>
47+
<version>${imageio-version}</version>
4848
</dependency>
4949

50+
<dependency>
51+
<groupId>com.twelvemonkeys.imageio</groupId>
52+
<artifactId>imageio-jpeg</artifactId>
53+
<version>${imageio-version}</version>
54+
</dependency>
55+
5056
<dependency>
5157
<groupId>org.junit.jupiter</groupId>
5258
<artifactId>junit-jupiter-api</artifactId>
Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
package org.fugerit.java.doc.val.imageio.tiff;
1+
package org.fugerit.java.doc.val.imageio.core;
22

3-
import com.twelvemonkeys.imageio.metadata.tiff.TIFFEntry;
4-
import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageMetadata;
53
import lombok.extern.slf4j.Slf4j;
64
import org.fugerit.java.doc.val.core.DocTypeValidationResult;
75
import org.w3c.dom.NamedNodeMap;
@@ -15,13 +13,14 @@
1513
import java.util.ArrayList;
1614
import java.util.Iterator;
1715
import java.util.List;
16+
import java.util.function.BiFunction;
1817

1918
@Slf4j
20-
public class ImageIOTiffUtils {
19+
public class ImageIOCoreUtils {
2120

22-
private ImageIOTiffUtils() {}
21+
private ImageIOCoreUtils() {}
2322

24-
public static DocTypeValidationResult validateTiffAndMetadata(InputStream is, Integer[] idTags) {
23+
public static DocTypeValidationResult validateMetadata(InputStream is, String imageFormat, BiFunction<IIOMetadata, List<String>, Boolean> tagFunction) {
2524
ImageReader reader = null;
2625
try (ImageInputStream iis = ImageIO.createImageInputStream(is)) {
2726
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
@@ -35,7 +34,6 @@ public static DocTypeValidationResult validateTiffAndMetadata(InputStream is, In
3534

3635
IIOMetadata meta = reader.getImageMetadata(0);
3736

38-
// TIFF plugin metadata format name
3937
String[] formatNames = meta.getMetadataFormatNames();
4038
for (String format : formatNames) {
4139
log.debug("Metadata format: {}", format);
@@ -45,16 +43,8 @@ public static DocTypeValidationResult validateTiffAndMetadata(InputStream is, In
4543

4644
List<String> missingTags = new ArrayList<>();
4745

48-
if (meta instanceof TIFFImageMetadata) {
49-
for ( int idTag : idTags ) {
50-
TIFFImageMetadata tiffMeta = (TIFFImageMetadata) meta;
51-
TIFFEntry entry = (TIFFEntry) tiffMeta.getTIFFField(idTag);
52-
if (entry == null) {
53-
missingTags.add( ImageIOTiffTags.tagDescription(idTag) );
54-
}
55-
}
56-
} else {
57-
return DocTypeValidationResult.newFail().withValidationMessage( "No TIFF metadata available" );
46+
if ( !tagFunction.apply( meta, missingTags ) ) {
47+
return DocTypeValidationResult.newFail().withValidationMessage( String.format( "No %s metadata available", imageFormat ) );
5848
}
5949

6050
if (missingTags.isEmpty()) {
@@ -64,7 +54,7 @@ public static DocTypeValidationResult validateTiffAndMetadata(InputStream is, In
6454
}
6555

6656
} catch (Exception e) {
67-
String message = String.format( "Error reading TIFF metadata from stream %s", e );
57+
String message = String.format( "Error reading %s metadata from stream %s", imageFormat, e );
6858
log.error( message, e );
6959
return DocTypeValidationResult.newFail().withMainException( e );
7060
} finally {
Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.fugerit.java.doc.val.imageio.tiff;
22

33
import com.twelvemonkeys.imageio.metadata.tiff.TIFF;
4+
import com.twelvemonkeys.imageio.metadata.tiff.TIFFEntry;
5+
import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageMetadata;
46
import org.fugerit.java.doc.val.core.DocTypeValidationResult;
57
import org.fugerit.java.doc.val.core.basic.AbstractDocTypeValidator;
68
import org.fugerit.java.doc.val.core.basic.ImageValidator;
9+
import org.fugerit.java.doc.val.imageio.core.ImageIOCoreUtils;
710

811
import java.io.InputStream;
912
import java.util.Arrays;
@@ -34,7 +37,20 @@ public ImageIOTiffValidator() {
3437

3538
@Override
3639
public DocTypeValidationResult validate(InputStream is) {
37-
return ImageIOTiffUtils.validateTiffAndMetadata( is, this.idTags );
40+
return ImageIOCoreUtils.validateMetadata( is, "TIFF", (meta, missingTags ) -> {
41+
if (meta instanceof TIFFImageMetadata) {
42+
for ( int idTag : idTags ) {
43+
TIFFImageMetadata tiffMeta = (TIFFImageMetadata) meta;
44+
TIFFEntry entry = (TIFFEntry) tiffMeta.getTIFFField(idTag);
45+
if (entry == null) {
46+
missingTags.add( ImageIOTiffTags.tagDescription(idTag) );
47+
}
48+
}
49+
return Boolean.TRUE;
50+
} else {
51+
return Boolean.FALSE;
52+
}
53+
} );
3854
}
3955

4056
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.fugerit.java.doc.val.imageio.tiff;
1+
package org.fugerit.java.doc.val.imageio.core;
22

33
import org.fugerit.java.core.xml.dom.DOMIO;
44
import org.junit.jupiter.api.Assertions;
@@ -8,13 +8,13 @@
88
import java.io.ByteArrayInputStream;
99
import java.io.InputStream;
1010

11-
class TestImageIOTiffUtils {
11+
class TestImageIOCoreUtils {
1212

1313
@Test
1414
void testNodeWithoutAttributes() throws Exception {
1515
try (InputStream stream = new ByteArrayInputStream( "<test/>".getBytes() )) {
1616
Document doc = DOMIO.newSafeDocumentBuilderFactory().newDocumentBuilder().parse( stream );
17-
ImageIOTiffUtils.dumpNode( doc, 1 );
17+
ImageIOCoreUtils.dumpNode( doc, 1 );
1818
Assertions.assertNotNull( doc );
1919
}
2020

0 commit comments

Comments
 (0)