From f903f2e14c49eeb17adfb659c0fd9c9e8c239824 Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <art1@andreas-romeyke.de> Date: Mon, 12 Sep 2022 18:34:45 +0200 Subject: [PATCH] - refactoring, renamed class using FormatValidationPlugin - refactoring, removed dead code - bugfix, closes buffer if not needed anymore --- ...MonographieTIFFFormatValidationPlugin.java | 1056 +---------------- 1 file changed, 62 insertions(+), 994 deletions(-) diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java index 7d47cee..3473949 100644 --- a/java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java +++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java @@ -23,6 +23,7 @@ import com.exlibris.core.sdk.strings.StringUtils; import com.exlibris.dps.sdk.techmd.FormatValidationPlugin; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; @@ -34,30 +35,25 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * SLUBTechnicalMetadataExtractorCheckItTiffPlugin * * @author andreas.romeyke@slub-dresden.de (Andreas Romeyke) - * @see com.exlibris.dps.sdk.techmd.MDExtractorPlugin + * @see com.exlibris.dps.sdk.techmd.FormatValidationPlugin */ /*public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtractorPlugin { */ -public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatValidationPlugin { - private static final ExLogger log = ExLogger.getExLogger(SLUBTechnicalMetadataExtractorCheckItTiffPlugin.class); +public class SLUBRetroMonographieTIFFFormatValidationPlugin implements FormatValidationPlugin { + private static final ExLogger log = ExLogger.getExLogger(SLUBRetroMonographieTIFFFormatValidationPlugin.class); private enum Checkit_tiff_versions { current, upcoming } private final Map<Checkit_tiff_versions, String> checkit_tiff_binary_path = new HashMap<>(); private final Map<Checkit_tiff_versions, String> checkit_tiff_config_path = new HashMap<>(); - private String exiftool_binary_path = null; - private List<String> extractionErrors = new ArrayList<>(); private final List<String> validationLog = new ArrayList<>(); - private Boolean isvalid = false; - private Boolean iswellformed = false; - private final Map<String,String> attributes = new HashMap<>(); + private boolean isvalid = false; + private boolean iswellformed = false; private final Map<Checkit_tiff_versions, String> md5Profile = new HashMap<>(); private final Map<Checkit_tiff_versions, String> md5CheckitTiff = new HashMap<>(); private boolean isDifferentProfile = true; @@ -66,7 +62,7 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa /** constructor */ - public SLUBTechnicalMetadataExtractorCheckItTiffPlugin() { + public SLUBRetroMonographieTIFFFormatValidationPlugin() { log.info("SLUBTechnicalMetadataExtractorCheckItTiffPlugin instantiated"); for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) { is_checkit_tiff_valid.put(v, false); @@ -82,9 +78,7 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa this.checkit_tiff_config_path.put(Checkit_tiff_versions.current, initp.get("current_config_file").trim()); this.checkit_tiff_config_path.put(Checkit_tiff_versions.upcoming, initp.get("upcoming_config_file").trim()); - this.exiftool_binary_path = initp.get("exiftool").trim(); try { - check_path(exiftool_binary_path, "path for exiftool_binary", true); for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) { check_path(checkit_tiff_binary_path.get(v), "path for checkit_tiff binary " + v, true); check_path(checkit_tiff_config_path.get(v), "path for checkit_tiff config " + v, false); @@ -103,21 +97,18 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa + " checkit_tiff_binary_path=" + checkit_tiff_binary_path.get(Checkit_tiff_versions.upcoming) + " cfg=" + checkit_tiff_config_path.get(Checkit_tiff_versions.upcoming) + ")" - + " and exiftool_binary_path=" + exiftool_binary_path ); } - private void parse_exiftool_output( String exiftoolxml ) { - // see output of exiftool -X, alternatively check http://ns.exiftool.ca/ExifTool/1.0/ - Pattern p = Pattern.compile("^\\s*<([^>]+)>([^<]+)</\\1>"); - log.debug("Orig string is: '" + exiftoolxml); - Matcher m = p.matcher(exiftoolxml); - if (m.matches()) { - String key = m.group(1); - String value = m.group(2); - log.debug("matcher: key=" + key + " value=" + value); - attributes.put(key, value); + @Override + public final String getProfile() { + /* there is no documentation in ExL API, therefore we use it to document the profile versions in a light way */ + StringBuilder returnvalue = new StringBuilder(); + for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) { + String modificationdate = modificationDateOfFile(this.checkit_tiff_config_path.get(v)); + returnvalue.append(v).append("profile:\n").append(" path=").append(this.checkit_tiff_config_path.get(v)).append("\n").append(" md5sum=").append(this.md5CheckitTiff.get(v)).append("\n").append(" modification date=").append(modificationdate).append("\n"); } + return returnvalue.toString(); } private void check_path(String filePath, String msgPath, boolean is_executable) throws Exception { @@ -133,63 +124,20 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa } } - @Override - public final void extract(String filePath) throws Exception { - validate_tiff_by_upcoming_checkit_tiff(filePath); - /* only check against current checkit_tiff if upcoming fails */ - if ((this.isDifferentCheckItTiff || isDifferentProfile) && is_checkit_tiff_valid.get(Checkit_tiff_versions.upcoming) == false) { - validate_tiff_by_current_checkit_tiff(filePath); - } - - /* If upcoming was true, only report a is valid, if current was true. report log of upcoming, if all fail, report log for all */ - if (true == is_checkit_tiff_valid.get(Checkit_tiff_versions.upcoming)) { - isvalid = true; - iswellformed = true; - extractionErrors.clear(); - } else if (true == is_checkit_tiff_valid.get(Checkit_tiff_versions.current)) { - isvalid = true; - iswellformed=true; - extractionErrors.clear(); - } else { - isvalid = false; - iswellformed = false; - extractionErrors = validationLog; - } - - // exiftool output of metadata - try { - String execstring = this.exiftool_binary_path + " -X " + filePath; - log.info("executing: " + execstring); - Process p = Runtime.getRuntime().exec(execstring); - p.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); - String line=reader.readLine(); - StringBuilder response= new StringBuilder(); - while (line != null) { - log.debug(line); - parse_exiftool_output(line.trim()); - response.append(line); - line = reader.readLine(); - } - attributes.put("exiftool-log", response.toString().trim()); - - } catch (IOException e) { - log.error(e); - } catch (InterruptedException e) { - log.error(e); - e.printStackTrace(); - - } - attributes.put("checkit-tiff-log", validationLog.toString()); - - } - private void validate_tiff_by_checkit_tiff_version(String filePath, Checkit_tiff_versions version) throws Exception { + private void validate_tiff_by_checkit_tiff_version(String filePath, Checkit_tiff_versions version) { + InputStreamReader process_out; try { String execstring = this.checkit_tiff_binary_path.get(version) + " -q " + this.checkit_tiff_config_path.get(version) + " " + filePath ; log.debug("executing: " + execstring); Process p = Runtime.getRuntime().exec(execstring); p.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + process_out = new InputStreamReader(p.getInputStream()); + if (p.exitValue() == 0) { + is_checkit_tiff_valid.put(version,true); + } else { // something wrong + is_checkit_tiff_valid.put(version, false); + } + BufferedReader reader = new BufferedReader(process_out); String line = reader.readLine(); while (line != null) { @@ -197,35 +145,41 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa validationLog.add(line + System.lineSeparator()); line = reader.readLine(); } - if (p.exitValue() == 0) { - is_checkit_tiff_valid.put(version,true); - } else { // something wrong - is_checkit_tiff_valid.put(version, false); - } + reader.close(); } catch (IOException e) { - //log.error("exception creation socket, clamd not available at host=" + host + "port=" + port, e); - //log.error("ERROR: ("+version.name()+") checkit_tiff not available, path=" + this.checkit_tiff_binary_path.get(version) + ", " + e.getMessage()); - throw new Exception("ERROR: ("+version.name()+") checkit_tiff not available, path=" + this.checkit_tiff_binary_path.get(version) + ", " + e.getMessage()); + log.error("ERROR: ("+version.name()+") checkit_tiff not available, path=" + this.checkit_tiff_binary_path.get(version) + ", " + e.getMessage()); + } catch (InterruptedException e) { + log.error("ERROR: ("+version.name()+") checkit_tiff interruption, " + e.getMessage()); } } - private void validate_tiff_by_current_checkit_tiff(String filePath) throws Exception { + private void validate_tiff_by_current_checkit_tiff(String filePath) { // checkit_tiff (current) validate_tiff_by_checkit_tiff_version(filePath, Checkit_tiff_versions.current); } - private void validate_tiff_by_upcoming_checkit_tiff(String filePath) throws Exception { + private void validate_tiff_by_upcoming_checkit_tiff(String filePath) { // checkit_tiff validation (upcoming) validate_tiff_by_checkit_tiff_version(filePath, Checkit_tiff_versions.upcoming); } + public final boolean validateFormat(String filePath) { + validate_tiff_by_upcoming_checkit_tiff(filePath); + /* only check against current checkit_tiff if upcoming fails */ + if ((this.isDifferentCheckItTiff || this.isDifferentProfile) && !is_checkit_tiff_valid.get(Checkit_tiff_versions.upcoming)) { + validate_tiff_by_current_checkit_tiff(filePath); + } - public final String getAgentName() { - log.debug("getAgentName() called"); - return "checkit_tiff"; - } - - @Override - public boolean validateFormat(String s) { - return false; + /* If upcoming was true, only report a is valid, if current was true. report log of upcoming, if all fail, report log for all */ + if (is_checkit_tiff_valid.get(Checkit_tiff_versions.upcoming)) { + isvalid = true; + iswellformed = true; + } else if (is_checkit_tiff_valid.get(Checkit_tiff_versions.current)) { + isvalid = true; + iswellformed=true; + } else { + isvalid = false; + iswellformed = false; + } + return (isvalid && iswellformed); } /** get agent version and signature version calling command VERSION @@ -235,13 +189,15 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa public final String getAgent() { log.debug("getAgent() called"); StringBuilder response= new StringBuilder(); + InputStreamReader process_out; for (Checkit_tiff_versions version : Checkit_tiff_versions.values()) { response.append(version.name()).append(" checkit_tiff:\n"); try { String execstring = this.checkit_tiff_binary_path.get(version); Process p = Runtime.getRuntime().exec(execstring); p.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + process_out = new InputStreamReader(p.getInputStream()); + BufferedReader reader = new BufferedReader(process_out); String line = reader.readLine(); while (line != null) { if (line.trim().startsWith("call it with:")) { break; } @@ -249,6 +205,7 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa response.append(line); line = reader.readLine(); } + reader.close(); } catch (IOException e) { log.error(e); } catch (InterruptedException e) { @@ -259,852 +216,14 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa return response.toString().trim(); } - @Override - public final String getAttributeByName(String attribute) { - if (attributes.containsKey(attribute)) { - return attributes.get(attribute); - } - return "not found"; - } - - @Override - public final List<String> getExtractionErrors() { - return this.extractionErrors; - } - /* processed using: - * exiftool -lang de -listx -s > /tmp/exif.xml - * then using - * - XPath "/taginfo/table[@name='Exif::Main']/tag[not(@g1)]/@name" to find IFD0-tags - * - XPath "/taginfo/table[@name='Exif::Main']/tag[@g1='ExifIFD']/@name" to find EXIF-tags - * - * exiftool -lang de -listx -s | xpath -q -e "/taginfo/table[@name='Exif::Main']/tag[not(@g1)]/@name" | sed -e "s/name=\"\(.*\)\"/available.add(\"IFD0:\1\");/" - * exiftool -lang de -listx -s | xpath -q -e "/taginfo/table[@name='Exif::Main']/tag[@g1='ExifIFD']/@name" | sed -e "s/name=\"\(.*\)\"/available.add(\"ExifIFD:\1\");/" - * exiftool -lang de -listx -s | xpath -q -e "/taginfo/table[@name='ICC_Profile::Main']/tag/@name" | sed -e "s/name=\"\(.*\)\"/available.add(\"ICC_Profile:\1\");/" - * exiftool -lang de -listx -s | xpath -q -e "/taginfo/table[@name='ICC_Profile::Header']/tag/@name" | sed -e "s/name=\"\(.*\)\"/available.add(\"ICC-Header:\1\");/" - * - * */ - @Override - public final List<String> getSupportedAttributeNames() { - //return new ArrayList<String>(attributes.keySet()); - List<String> available = new ArrayList<>(); - //available.add("checkit-tiff-conf"); - available.add("checkit-tiff-log"); - //available.add("checkit-tiff-path"); - - available.add("Composite:Aperture"); - available.add("Composite:CircleOfConfusion"); - available.add("Composite:DateTimeCreated"); - available.add("Composite:DigitalCreationDateTime"); - available.add("Composite:Flash"); - available.add("Composite:FocalLength35efl"); - available.add("Composite:FOV"); - available.add("Composite:HyperfocalDistance"); - available.add("Composite:ImageSize"); - available.add("Composite:LensID"); - available.add("Composite:LightValue"); - available.add("Composite:ScaleFactor35efl"); - available.add("Composite:ShutterSpeed"); - available.add("Composite:SubSecCreateDate"); - available.add("Composite:SubSecDateTimeOriginal"); - available.add("ExifIFD:A100DataOffset"); - available.add("ExifIFD:Acceleration"); - available.add("ExifIFD:AdventRevision"); - available.add("ExifIFD:AdventScale"); - available.add("ExifIFD:AffineTransformMat"); - available.add("ExifIFD:AliasLayerMetadata"); - available.add("ExifIFD:AlphaByteCount"); - available.add("ExifIFD:AlphaDataDiscard"); - available.add("ExifIFD:AlphaOffset"); - available.add("ExifIFD:AmbientTemperature"); - available.add("ExifIFD:Annotations"); - available.add("ExifIFD:ApertureValue"); - available.add("ExifIFD:ApplicationNotes"); - available.add("ExifIFD:BackgroundColorIndicator"); - available.add("ExifIFD:BackgroundColorValue"); - available.add("ExifIFD:BadFaxLines"); - available.add("ExifIFD:BatteryLevel"); - available.add("ExifIFD:BitsPerExtendedRunLength"); - available.add("ExifIFD:BitsPerRunLength"); - available.add("ExifIFD:Brightness"); - available.add("ExifIFD:BrightnessValue"); - available.add("ExifIFD:CameraElevationAngle"); - available.add("ExifIFD:CFALayout"); - available.add("ExifIFD:CFAPattern"); - available.add("ExifIFD:CFAPlaneColor"); - available.add("ExifIFD:CIP3DataFile"); - available.add("ExifIFD:CIP3Sheet"); - available.add("ExifIFD:CIP3Side"); - available.add("ExifIFD:CleanFaxData"); - available.add("ExifIFD:ClipPath"); - available.add("ExifIFD:CMYKEquivalent"); - available.add("ExifIFD:CodingMethods"); - available.add("ExifIFD:ColorCharacterization"); - available.add("ExifIFD:ColorMap"); - available.add("ExifIFD:ColorResponseUnit"); - available.add("ExifIFD:ColorSequence"); - available.add("ExifIFD:ColorSpace"); - available.add("ExifIFD:ColorTable"); - available.add("ExifIFD:ComponentsConfiguration"); - available.add("ExifIFD:CompressedBitsPerPixel"); - available.add("ExifIFD:ConsecutiveBadFaxLines"); - available.add("ExifIFD:Contrast"); - available.add("ExifIFD:Converter"); - available.add("ExifIFD:CreateDate"); - available.add("ExifIFD:CustomRendered"); - available.add("ExifIFD:DataType"); - available.add("ExifIFD:DateTimeOriginal"); - available.add("ExifIFD:Decode"); - available.add("ExifIFD:DefaultImageColor"); - available.add("ExifIFD:DeviceSettingDescription"); - available.add("ExifIFD:DigitalZoomRatio"); - available.add("ExifIFD:DotRange"); - available.add("ExifIFD:ExifImageHeight"); - available.add("ExifIFD:ExifImageWidth"); - available.add("ExifIFD:ExifVersion"); - available.add("ExifIFD:ExpandFilm"); - available.add("ExifIFD:ExpandFilterLens"); - available.add("ExifIFD:ExpandFlashLamp"); - available.add("ExifIFD:ExpandLens"); - available.add("ExifIFD:ExpandScanner"); - available.add("ExifIFD:ExpandSoftware"); - available.add("ExifIFD:Exposure"); - available.add("ExifIFD:ExposureCompensation"); - available.add("ExifIFD:ExposureIndex"); - available.add("ExifIFD:ExposureMode"); - available.add("ExifIFD:ExposureProgram"); - available.add("ExifIFD:ExposureTime"); - available.add("ExifIFD:ExtraSamples"); - available.add("ExifIFD:FaxProfile"); - available.add("ExifIFD:FaxRecvParams"); - available.add("ExifIFD:FaxRecvTime"); - available.add("ExifIFD:FaxSubAddress"); - available.add("ExifIFD:FedexEDR"); - available.add("ExifIFD:FileSource"); - available.add("ExifIFD:Flash"); - available.add("ExifIFD:FlashEnergy"); - available.add("ExifIFD:FlashpixVersion"); - available.add("ExifIFD:FNumber"); - available.add("ExifIFD:FocalLength"); - available.add("ExifIFD:FocalLengthIn35mmFormat"); - available.add("ExifIFD:FocalPlaneResolutionUnit"); - available.add("ExifIFD:FocalPlaneXResolution"); - available.add("ExifIFD:FocalPlaneYResolution"); - available.add("ExifIFD:FovCot"); - available.add("ExifIFD:FreeByteCounts"); - available.add("ExifIFD:FreeOffsets"); - available.add("ExifIFD:GainControl"); - available.add("ExifIFD:Gamma"); - available.add("ExifIFD:GDALMetadata"); - available.add("ExifIFD:GDALNoData"); - available.add("ExifIFD:GooglePlusUploadCode"); - available.add("ExifIFD:GrayResponseCurve"); - available.add("ExifIFD:HCUsage"); - available.add("ExifIFD:HeightResolution"); - available.add("ExifIFD:Humidity"); - available.add("ExifIFD:ImageByteCount"); - available.add("ExifIFD:ImageColorIndicator"); - available.add("ExifIFD:ImageColorValue"); - available.add("ExifIFD:ImageDataDiscard"); - available.add("ExifIFD:ImageDepth"); - available.add("ExifIFD:ImageFullHeight"); - available.add("ExifIFD:ImageFullWidth"); - available.add("ExifIFD:ImageHeight"); - available.add("ExifIFD:ImageHistory"); - available.add("ExifIFD:ImageID"); - available.add("ExifIFD:ImageLayer"); - available.add("ExifIFD:ImageNumber"); - available.add("ExifIFD:ImageOffset"); - available.add("ExifIFD:ImageReferencePoints"); - available.add("ExifIFD:ImageType"); - available.add("ExifIFD:ImageUniqueID"); - available.add("ExifIFD:ImageWidth"); - available.add("ExifIFD:Indexed"); - available.add("ExifIFD:INGRReserved"); - available.add("ExifIFD:InkNames"); - available.add("ExifIFD:IntergraphFlagRegisters"); - available.add("ExifIFD:IntergraphMatrix"); - available.add("ExifIFD:IntergraphPacketData"); - available.add("ExifIFD:Interlace"); - available.add("ExifIFD:ISO"); - available.add("ExifIFD:ISOSpeed"); - available.add("ExifIFD:ISOSpeedLatitudeyyy"); - available.add("ExifIFD:ISOSpeedLatitudezzz"); - available.add("ExifIFD:IT8Header"); - available.add("ExifIFD:JBIGOptions"); - available.add("ExifIFD:JPEGACTables"); - available.add("ExifIFD:JPEGDCTables"); - available.add("ExifIFD:JPEGLosslessPredictors"); - available.add("ExifIFD:JPEGPointTransforms"); - available.add("ExifIFD:JPEGProc"); - available.add("ExifIFD:JPEGQTables"); - available.add("ExifIFD:JPEGRestartInterval"); - available.add("ExifIFD:JPEGTables"); - available.add("ExifIFD:JPLCartoIFD"); - available.add("ExifIFD:Lens"); - available.add("ExifIFD:LensInfo"); - available.add("ExifIFD:LensMake"); - available.add("ExifIFD:LensModel"); - available.add("ExifIFD:LensSerialNumber"); - available.add("ExifIFD:LightSource"); - available.add("ExifIFD:MakerNoteApple"); - available.add("ExifIFD:MakerNoteCanon"); - available.add("ExifIFD:MakerNoteCasio"); - available.add("ExifIFD:MakerNoteCasio2"); - available.add("ExifIFD:MakerNoteDJI"); - available.add("ExifIFD:MakerNoteFLIR"); - available.add("ExifIFD:MakerNoteFujiFilm"); - available.add("ExifIFD:MakerNoteGE"); - available.add("ExifIFD:MakerNoteGE2"); - available.add("ExifIFD:MakerNoteHasselblad"); - available.add("ExifIFD:MakerNoteHP"); - available.add("ExifIFD:MakerNoteHP2"); - available.add("ExifIFD:MakerNoteHP4"); - available.add("ExifIFD:MakerNoteHP6"); - available.add("ExifIFD:MakerNoteISL"); - available.add("ExifIFD:MakerNoteJVC"); - available.add("ExifIFD:MakerNoteJVCText"); - available.add("ExifIFD:MakerNoteKodak10"); - available.add("ExifIFD:MakerNoteKodak11"); - available.add("ExifIFD:MakerNoteKodak1a"); - available.add("ExifIFD:MakerNoteKodak1b"); - available.add("ExifIFD:MakerNoteKodak2"); - available.add("ExifIFD:MakerNoteKodak3"); - available.add("ExifIFD:MakerNoteKodak4"); - available.add("ExifIFD:MakerNoteKodak5"); - available.add("ExifIFD:MakerNoteKodak6a"); - available.add("ExifIFD:MakerNoteKodak6b"); - available.add("ExifIFD:MakerNoteKodak7"); - available.add("ExifIFD:MakerNoteKodak8a"); - available.add("ExifIFD:MakerNoteKodak8b"); - available.add("ExifIFD:MakerNoteKodak8c"); - available.add("ExifIFD:MakerNoteKodak9"); - available.add("ExifIFD:MakerNoteKodakUnknown"); - available.add("ExifIFD:MakerNoteKyocera"); - available.add("ExifIFD:MakerNoteLeica"); - available.add("ExifIFD:MakerNoteLeica2"); - available.add("ExifIFD:MakerNoteLeica3"); - available.add("ExifIFD:MakerNoteLeica4"); - available.add("ExifIFD:MakerNoteLeica5"); - available.add("ExifIFD:MakerNoteLeica6"); - available.add("ExifIFD:MakerNoteLeica7"); - available.add("ExifIFD:MakerNoteLeica8"); - available.add("ExifIFD:MakerNoteLeica9"); - available.add("ExifIFD:MakerNoteMinolta"); - available.add("ExifIFD:MakerNoteMinolta2"); - available.add("ExifIFD:MakerNoteMinolta3"); - available.add("ExifIFD:MakerNoteMotorola"); - available.add("ExifIFD:MakerNoteNikon"); - available.add("ExifIFD:MakerNoteNikon2"); - available.add("ExifIFD:MakerNoteNikon3"); - available.add("ExifIFD:MakerNoteNintendo"); - available.add("ExifIFD:MakerNoteOlympus"); - available.add("ExifIFD:MakerNoteOlympus2"); - available.add("ExifIFD:MakerNotePanasonic"); - available.add("ExifIFD:MakerNotePanasonic2"); - available.add("ExifIFD:MakerNotePentax"); - available.add("ExifIFD:MakerNotePentax2"); - available.add("ExifIFD:MakerNotePentax3"); - available.add("ExifIFD:MakerNotePentax4"); - available.add("ExifIFD:MakerNotePentax5"); - available.add("ExifIFD:MakerNotePentax6"); - available.add("ExifIFD:MakerNotePhaseOne"); - available.add("ExifIFD:MakerNoteReconyx"); - available.add("ExifIFD:MakerNoteRicoh"); - available.add("ExifIFD:MakerNoteRicoh2"); - available.add("ExifIFD:MakerNoteRicohText"); - available.add("ExifIFD:MakerNoteSamsung1a"); - available.add("ExifIFD:MakerNoteSamsung1b"); - available.add("ExifIFD:MakerNoteSamsung2"); - available.add("ExifIFD:MakerNoteSanyo"); - available.add("ExifIFD:MakerNoteSanyoC4"); - available.add("ExifIFD:MakerNoteSanyoPatch"); - available.add("ExifIFD:MakerNoteSigma"); - available.add("ExifIFD:MakerNoteSony"); - available.add("ExifIFD:MakerNoteSony2"); - available.add("ExifIFD:MakerNoteSony3"); - available.add("ExifIFD:MakerNoteSony4"); - available.add("ExifIFD:MakerNoteSony5"); - available.add("ExifIFD:MakerNoteSonyEricsson"); - available.add("ExifIFD:MakerNoteSonySRF"); - available.add("ExifIFD:MakerNoteUnknown"); - available.add("ExifIFD:MakerNoteUnknownBinary"); - available.add("ExifIFD:MakerNoteUnknownText"); - available.add("ExifIFD:MatrixWorldToCamera"); - available.add("ExifIFD:MatrixWorldToScreen"); - available.add("ExifIFD:Matteing"); - available.add("ExifIFD:MaxApertureValue"); - available.add("ExifIFD:MDColorTable"); - available.add("ExifIFD:MDFileTag"); - available.add("ExifIFD:MDFileUnits"); - available.add("ExifIFD:MDLabName"); - available.add("ExifIFD:MDPrepDate"); - available.add("ExifIFD:MDPrepTime"); - available.add("ExifIFD:MDSampleInfo"); - available.add("ExifIFD:MDScalePixel"); - available.add("ExifIFD:MeteringMode"); - available.add("ExifIFD:Model2"); - available.add("ExifIFD:ModelTiePoint"); - available.add("ExifIFD:ModelTransform"); - available.add("ExifIFD:ModeNumber"); - available.add("ExifIFD:MoireFilter"); - available.add("ExifIFD:MSDocumentText"); - available.add("ExifIFD:MSDocumentTextPosition"); - available.add("ExifIFD:MSPropertySetStorage"); - available.add("ExifIFD:MultiProfiles"); - available.add("ExifIFD:Noise"); - available.add("ExifIFD:NumberofInks"); - available.add("ExifIFD:OceApplicationSelector"); - available.add("ExifIFD:OceIDNumber"); - available.add("ExifIFD:OceImageLogic"); - available.add("ExifIFD:OceScanjobDesc"); - available.add("ExifIFD:OffsetSchema"); - available.add("ExifIFD:OffsetTime"); - available.add("ExifIFD:OffsetTimeDigitized"); - available.add("ExifIFD:OffsetTimeOriginal"); - available.add("ExifIFD:OPIProxy"); - available.add("ExifIFD:Opto-ElectricConvFactor"); - available.add("ExifIFD:OriginalFileName"); - available.add("ExifIFD:OtherImageLength"); - available.add("ExifIFD:OtherImageStart"); - available.add("ExifIFD:OwnerName"); - available.add("ExifIFD:Padding"); - available.add("ExifIFD:PixelFormat"); - available.add("ExifIFD:PixelIntensityRange"); - available.add("ExifIFD:PixelMagicJBIGOptions"); - available.add("ExifIFD:PixelScale"); - available.add("ExifIFD:Pressure"); - available.add("ExifIFD:ProfileType"); - available.add("ExifIFD:RasterPadding"); - available.add("ExifIFD:RawFile"); - available.add("ExifIFD:RawImageSegmentation"); - available.add("ExifIFD:RecommendedExposureIndex"); - available.add("ExifIFD:RegionXformTackPoint"); - available.add("ExifIFD:RelatedSoundFile"); - available.add("ExifIFD:RowInterleaveFactor"); - available.add("ExifIFD:SampleFormat"); - available.add("ExifIFD:SamsungRawByteOrder"); - available.add("ExifIFD:SamsungRawPointersLength"); - available.add("ExifIFD:SamsungRawPointersOffset"); - available.add("ExifIFD:SamsungRawUnknown"); - available.add("ExifIFD:Saturation"); - available.add("ExifIFD:SceneCaptureType"); - available.add("ExifIFD:SceneType"); - available.add("ExifIFD:SecurityClassification"); - available.add("ExifIFD:SelfTimerMode"); - available.add("ExifIFD:SensingMethod"); - available.add("ExifIFD:SensitivityType"); - available.add("ExifIFD:SerialNumber"); - available.add("ExifIFD:Shadows"); - available.add("ExifIFD:SharedData"); - available.add("ExifIFD:Sharpness"); - available.add("ExifIFD:ShutterSpeedValue"); - available.add("ExifIFD:Site"); - available.add("ExifIFD:SMaxSampleValue"); - available.add("ExifIFD:SMinSampleValue"); - available.add("ExifIFD:Smoothness"); - available.add("ExifIFD:SonyRawFileType"); - available.add("ExifIFD:SpatialFrequencyResponse"); - available.add("ExifIFD:SpectralSensitivity"); - available.add("ExifIFD:SRawType"); - available.add("ExifIFD:StandardOutputSensitivity"); - available.add("ExifIFD:StoNits"); - available.add("ExifIFD:StripByteCounts"); - available.add("ExifIFD:StripOffsets"); - available.add("ExifIFD:StripRowCounts"); - available.add("ExifIFD:SubjectArea"); - available.add("ExifIFD:SubjectDistance"); - available.add("ExifIFD:SubjectDistanceRange"); - available.add("ExifIFD:SubjectLocation"); - available.add("ExifIFD:SubSecTime"); - available.add("ExifIFD:SubSecTimeDigitized"); - available.add("ExifIFD:SubSecTimeOriginal"); - available.add("ExifIFD:SubTileBlockSize"); - available.add("ExifIFD:T4Options"); - available.add("ExifIFD:T6Options"); - available.add("ExifIFD:T82Options"); - available.add("ExifIFD:T88Options"); - available.add("ExifIFD:TextureFormat"); - available.add("ExifIFD:TIFF-EPStandardID"); - available.add("ExifIFD:TIFF_FXExtensions"); - available.add("ExifIFD:TileByteCounts"); - available.add("ExifIFD:TileDepth"); - available.add("ExifIFD:TileOffsets"); - available.add("ExifIFD:TimeZoneOffset"); - available.add("ExifIFD:TransferRange"); - available.add("ExifIFD:Transformation"); - available.add("ExifIFD:TransparencyIndicator"); - available.add("ExifIFD:TrapIndicator"); - available.add("ExifIFD:UIC1Tag"); - available.add("ExifIFD:UIC2Tag"); - available.add("ExifIFD:UIC3Tag"); - available.add("ExifIFD:UIC4Tag"); - available.add("ExifIFD:Uncompressed"); - available.add("ExifIFD:UserComment"); - available.add("ExifIFD:USPTOMiscellaneous"); - available.add("ExifIFD:USPTOOriginalContentType"); - available.add("ExifIFD:VersionYear"); - available.add("ExifIFD:WangAnnotation"); - available.add("ExifIFD:WangTag1"); - available.add("ExifIFD:WangTag3"); - available.add("ExifIFD:WangTag4"); - available.add("ExifIFD:WarpQuadrilateral"); - available.add("ExifIFD:WaterDepth"); - available.add("ExifIFD:WB_GRGBLevels"); - available.add("ExifIFD:WhiteBalance"); - available.add("ExifIFD:WidthResolution"); - available.add("ExifIFD:WrapModes"); - available.add("ExifIFD:XClipPathUnits"); - available.add("ExifIFD:XP_DIP_XML"); - available.add("ExifIFD:YClipPathUnits"); - available.add("ExifTool:ExifToolVersion"); - available.add("exiftool-log"); - available.add("File:CurrentIPTCDigest"); - available.add("File:ExifByteOrder"); - available.add("File:FileType"); - available.add("File:MIMEType"); - available.add("ICC-header:CMMFlags"); - available.add("ICC-header:ColorSpaceData"); - available.add("ICC-header:ConnectionSpaceIlluminant"); - available.add("ICC-header:DeviceAttributes"); - available.add("ICC-header:DeviceManufacturer"); - available.add("ICC-header:DeviceModel"); - available.add("ICC-header:PrimaryPlatform"); - available.add("ICC-header:ProfileClass"); - available.add("ICC-header:ProfileCMMType"); - available.add("ICC-header:ProfileConnectionSpace"); - available.add("ICC-header:ProfileCreator"); - available.add("ICC-header:ProfileDateTime"); - available.add("ICC-header:ProfileFileSignature"); - available.add("ICC-header:ProfileID"); - available.add("ICC-header:ProfileVersion"); - available.add("ICC-header:RenderingIntent"); - available.add("ICC_Profile:AToB0"); - available.add("ICC_Profile:AToB1"); - available.add("ICC_Profile:AToB2"); - available.add("ICC_Profile:BlueMatrixColumn"); - available.add("ICC_Profile:BlueTRC"); - available.add("ICC_Profile:BToA0"); - available.add("ICC_Profile:BToA1"); - available.add("ICC_Profile:BToA2"); - available.add("ICC_Profile:BToD0"); - available.add("ICC_Profile:BToD1"); - available.add("ICC_Profile:BToD2"); - available.add("ICC_Profile:BToD3"); - available.add("ICC_Profile:CalibrationDateTime"); - available.add("ICC_Profile:CharTarget"); - available.add("ICC_Profile:ChromaticAdaptation"); - available.add("ICC_Profile:ColorantOrder"); - available.add("ICC_Profile:ColorantTableOut"); - available.add("ICC_Profile:ColorimetricIntentImageState"); - available.add("ICC_Profile:CRDInfo"); - available.add("ICC_Profile:DeviceMfgDesc"); - available.add("ICC_Profile:DeviceModelDesc"); - available.add("ICC_Profile:DeviceSettings"); - available.add("ICC_Profile:DToB0"); - available.add("ICC_Profile:DToB1"); - available.add("ICC_Profile:DToB2"); - available.add("ICC_Profile:DToB3"); - available.add("ICC_Profile:FocalPlaneColorimetryEstimates"); - available.add("ICC_Profile:Gamut"); - available.add("ICC_Profile:GrayTRC"); - available.add("ICC_Profile:GreenMatrixColumn"); - available.add("ICC_Profile:GreenTRC"); - available.add("ICC_Profile:Luminance"); - available.add("ICC_Profile:MakeAndModel"); - available.add("ICC_Profile:MediaBlackPoint"); - available.add("ICC_Profile:MediaWhitePoint"); - available.add("ICC_Profile:NamedColor"); - available.add("ICC_Profile:NamedColor2"); - available.add("ICC_Profile:NativeDisplayInfo"); - available.add("ICC_Profile:OutputResponse"); - available.add("ICC_Profile:PerceptualRenderingIntentGamut"); - available.add("ICC_Profile:PostScript2CRD0"); - available.add("ICC_Profile:PostScript2CRD1"); - available.add("ICC_Profile:PostScript2CRD2"); - available.add("ICC_Profile:PostScript2CSA"); - available.add("ICC_Profile:Preview0"); - available.add("ICC_Profile:Preview1"); - available.add("ICC_Profile:Preview2"); - available.add("ICC_Profile:ProfileCopyright"); - available.add("ICC_Profile:ProfileDescription"); - available.add("ICC_Profile:ProfileDescriptionML"); - available.add("ICC_Profile:ProfileSequenceDesc"); - available.add("ICC_Profile:ProfileSequenceIdentifier"); - available.add("ICC_Profile:PS2CRDVMSize"); - available.add("ICC_Profile:PS2RenderingIntent"); - available.add("ICC_Profile:RedMatrixColumn"); - available.add("ICC_Profile:RedTRC"); - available.add("ICC_Profile:ReflectionHardcopyOrigColorimetry"); - available.add("ICC_Profile:ReflectionPrintOutputColorimetry"); - available.add("ICC_Profile:SaturationRenderingIntentGamut"); - available.add("ICC_Profile:SceneAppearanceEstimates"); - available.add("ICC_Profile:SceneColorimetryEstimates"); - available.add("ICC_Profile:Screening"); - available.add("ICC_Profile:ScreeningDesc"); - available.add("ICC_Profile:Technology"); - available.add("ICC_Profile:UCRBG"); - available.add("ICC_Profile:VideoCardGamma"); - available.add("ICC_Profile:ViewingCondDesc"); - available.add("ICC_Profile:WCSProfiles"); - available.add("IFD0:AnalogBalance"); - available.add("IFD0:Artist"); - available.add("IFD0:AsShotICCProfile"); - available.add("IFD0:AsShotNeutral"); - available.add("IFD0:AsShotPreProfileMatrix"); - available.add("IFD0:AsShotProfileName"); - available.add("IFD0:AsShotWhiteXY"); - available.add("IFD0:BaselineExposure"); - available.add("IFD0:BaselineExposureOffset"); - available.add("IFD0:BaselineNoise"); - available.add("IFD0:BaselineSharpness"); - available.add("IFD0:BitsPerSample"); - available.add("IFD0:CalibrationIlluminant1"); - available.add("IFD0:CalibrationIlluminant2"); - available.add("IFD0:CameraCalibration1"); - available.add("IFD0:CameraCalibration2"); - available.add("IFD0:CameraCalibrationSig"); - available.add("IFD0:CameraLabel"); - available.add("IFD0:CameraSerialNumber"); - available.add("IFD0:CellLength"); - available.add("IFD0:CellWidth"); - available.add("IFD0:ColorimetricReference"); - available.add("IFD0:ColorMatrix1"); - available.add("IFD0:ColorMatrix2"); - available.add("IFD0:Compression"); - available.add("IFD0:Copyright"); - available.add("IFD0:CurrentICCProfile"); - available.add("IFD0:CurrentPreProfileMatrix"); - available.add("IFD0:DefaultBlackRender"); - available.add("IFD0:DNGAdobeData"); - available.add("IFD0:DNGBackwardVersion"); - available.add("IFD0:DNGLensInfo"); - available.add("IFD0:DNGPrivateData"); - available.add("IFD0:DNGVersion"); - available.add("IFD0:DocumentName"); - available.add("IFD0:FillOrder"); - available.add("IFD0:ForwardMatrix1"); - available.add("IFD0:ForwardMatrix2"); - available.add("IFD0:FrameRate"); - available.add("IFD0:GeoTiffAsciiParams"); - available.add("IFD0:GeoTiffDirectory"); - available.add("IFD0:GeoTiffDoubleParams"); - available.add("IFD0:GrayResponseUnit"); - available.add("IFD0:HalftoneHints"); - available.add("IFD0:HostComputer"); - available.add("IFD0:ImageDescription"); - available.add("IFD0:ImageHeight"); - available.add("IFD0:ImageSourceData"); - available.add("IFD0:ImageWidth"); - available.add("IFD0:InkSet"); - available.add("IFD0:IPTC-NAA"); - available.add("IFD0:LinearResponseLimit"); - available.add("IFD0:LocalizedCameraModel"); - available.add("IFD0:Make"); - available.add("IFD0:MakerNoteSafety"); - available.add("IFD0:MaxSampleValue"); - available.add("IFD0:MinSampleValue"); - available.add("IFD0:Model"); - available.add("IFD0:ModifyDate"); - available.add("IFD0:NewRawImageDigest"); - available.add("IFD0:OldSubfileType"); - available.add("IFD0:Orientation"); - available.add("IFD0:OriginalBestQualitySize"); - available.add("IFD0:OriginalDefaultCropSize"); - available.add("IFD0:OriginalDefaultFinalSize"); - available.add("IFD0:OriginalRawFileData"); - available.add("IFD0:OriginalRawFileDigest"); - available.add("IFD0:OriginalRawFileName"); - available.add("IFD0:PageName"); - available.add("IFD0:PageNumber"); - available.add("IFD0:PanasonicTitle"); - available.add("IFD0:PanasonicTitle2"); - available.add("IFD0:PhotometricInterpretation"); - available.add("IFD0:PlanarConfiguration"); - available.add("IFD0:Predictor"); - available.add("IFD0:PreviewApplicationName"); - available.add("IFD0:PreviewApplicationVersion"); - available.add("IFD0:PreviewColorSpace"); - available.add("IFD0:PreviewDateTime"); - available.add("IFD0:PreviewImageLength"); - available.add("IFD0:PreviewImageStart"); - available.add("IFD0:PreviewSettingsDigest"); - available.add("IFD0:PreviewSettingsName"); - available.add("IFD0:PrimaryChromaticities"); - available.add("IFD0:PrintIM"); - available.add("IFD0:ProcessingSoftware"); - available.add("IFD0:ProfileCalibrationSig"); - available.add("IFD0:ProfileCopyright"); - available.add("IFD0:ProfileEmbedPolicy"); - available.add("IFD0:ProfileHueSatMapData1"); - available.add("IFD0:ProfileHueSatMapData2"); - available.add("IFD0:ProfileHueSatMapDims"); - available.add("IFD0:ProfileHueSatMapEncoding"); - available.add("IFD0:ProfileLookTableData"); - available.add("IFD0:ProfileLookTableDims"); - available.add("IFD0:ProfileLookTableEncoding"); - available.add("IFD0:ProfileName"); - available.add("IFD0:ProfileToneCurve"); - available.add("IFD0:Rating"); - available.add("IFD0:RatingPercent"); - available.add("IFD0:RawDataUniqueID"); - available.add("IFD0:RawImageDigest"); - available.add("IFD0:RawToPreviewGain"); - available.add("IFD0:ReductionMatrix1"); - available.add("IFD0:ReductionMatrix2"); - available.add("IFD0:ReelName"); - available.add("IFD0:ReferenceBlackWhite"); - available.add("IFD0:ResolutionUnit"); - available.add("IFD0:RowsPerStrip"); - available.add("IFD0:SamplesPerPixel"); - available.add("IFD0:SEMInfo"); - available.add("IFD0:ShadowScale"); - available.add("IFD0:Software"); - available.add("IFD0:StripByteCounts"); - available.add("IFD0:StripOffsets"); - available.add("IFD0:SubfileType"); - available.add("IFD0:T6Options"); - available.add("IFD0:TargetPrinter"); - available.add("IFD0:Thresholding"); - available.add("IFD0:ThumbnailLength"); - available.add("IFD0:ThumbnailOffset"); - available.add("IFD0:TileLength"); - available.add("IFD0:TileWidth"); - available.add("IFD0:TimeCodes"); - available.add("IFD0:TransferFunction"); - available.add("IFD0:TStop"); - available.add("IFD0:UniqueCameraModel"); - available.add("IFD0:WhitePoint"); - available.add("IFD0:XPAuthor"); - available.add("IFD0:XPComment"); - available.add("IFD0:XPKeywords"); - available.add("IFD0:XPosition"); - available.add("IFD0:XPSubject"); - available.add("IFD0:XPTitle"); - available.add("IFD0:XResolution"); - available.add("IFD0:YCbCrCoefficients"); - available.add("IFD0:YCbCrPositioning"); - available.add("IFD0:YCbCrSubSampling"); - available.add("IFD0:YPosition"); - available.add("IFD0:YResolution"); - available.add("IPTC2:ApplicationRecordVersion"); - available.add("IPTC2:CopyrightNotice"); - available.add("IPTC:ApplicationRecordVersion"); - available.add("IPTC:CodedCharacterSet"); - available.add("IPTC:CopyrightNotice"); - available.add("IPTC:DateCreated"); - available.add("IPTC:DigitalCreationDate"); - available.add("IPTC:DigitalCreationTime"); - available.add("IPTC:TimeCreated"); - available.add("Photoshop:AlphaChannelsNames"); - available.add("Photoshop:CopyrightFlag"); - available.add("Photoshop:DisplayedUnitsX"); - available.add("Photoshop:DisplayedUnitsY"); - available.add("Photoshop:GlobalAltitude"); - available.add("Photoshop:GlobalAngle"); - available.add("Photoshop:IPTCDigest"); - available.add("Photoshop:PhotoshopThumbnail"); - available.add("Photoshop:XResolution"); - available.add("Photoshop:YResolution"); - available.add("System:Directory"); - available.add("System:FileAccessDate"); - available.add("System:FileInodeChangeDate"); - available.add("System:FileModifyDate"); - available.add("System:FileName"); - available.add("System:FilePermissions"); - available.add("System:FileSize"); - available.add("XMP-aux:ApproximateFocusDistance"); - available.add("XMP-aux:ImageNumber"); - available.add("XMP-aux:Lens"); - available.add("XMP-aux:LensID"); - available.add("XMP-aux:LensInfo"); - available.add("XMP-aux:SerialNumber"); - available.add("XMP-crs:AlreadyApplied"); - available.add("XMP-crs:AutoLateralCA"); - available.add("XMP-crs:AutoWhiteVersion"); - available.add("XMP-crs:Blacks2012"); - available.add("XMP-crs:BlueHue"); - available.add("XMP-crs:BlueSaturation"); - available.add("XMP-crs:CameraProfile"); - available.add("XMP-crs:CameraProfileDigest"); - available.add("XMP-crs:Clarity2012"); - available.add("XMP-crs:ColorNoiseReduction"); - available.add("XMP-crs:ColorNoiseReductionDetail"); - available.add("XMP-crs:ColorNoiseReductionSmoothness"); - available.add("XMP-crs:ColorTemperature"); - available.add("XMP-crs:Contrast2012"); - available.add("XMP-crs:ConvertToGrayscale"); - available.add("XMP-crs:CropAngle"); - available.add("XMP-crs:CropBottom"); - available.add("XMP-crs:CropConstrainToWarp"); - available.add("XMP-crs:CropLeft"); - available.add("XMP-crs:CropRight"); - available.add("XMP-crs:CropTop"); - available.add("XMP-crs:DefringeGreenAmount"); - available.add("XMP-crs:DefringeGreenHueHi"); - available.add("XMP-crs:DefringeGreenHueLo"); - available.add("XMP-crs:DefringePurpleAmount"); - available.add("XMP-crs:DefringePurpleHueHi"); - available.add("XMP-crs:DefringePurpleHueLo"); - available.add("XMP-crs:Exposure2012"); - available.add("XMP-crs:GrainAmount"); - available.add("XMP-crs:GreenHue"); - available.add("XMP-crs:GreenSaturation"); - available.add("XMP-crs:HasCrop"); - available.add("XMP-crs:HasSettings"); - available.add("XMP-crs:Highlights2012"); - available.add("XMP-crs:HueAdjustmentAqua"); - available.add("XMP-crs:HueAdjustmentBlue"); - available.add("XMP-crs:HueAdjustmentGreen"); - available.add("XMP-crs:HueAdjustmentMagenta"); - available.add("XMP-crs:HueAdjustmentOrange"); - available.add("XMP-crs:HueAdjustmentPurple"); - available.add("XMP-crs:HueAdjustmentRed"); - available.add("XMP-crs:HueAdjustmentYellow"); - available.add("XMP-crs:LensManualDistortionAmount"); - available.add("XMP-crs:LensProfileChromaticAberrationScale"); - available.add("XMP-crs:LensProfileDigest"); - available.add("XMP-crs:LensProfileDistortionScale"); - available.add("XMP-crs:LensProfileEnable"); - available.add("XMP-crs:LensProfileFilename"); - available.add("XMP-crs:LensProfileName"); - available.add("XMP-crs:LensProfileSetup"); - available.add("XMP-crs:LensProfileVignettingScale"); - available.add("XMP-crs:LuminanceAdjustmentAqua"); - available.add("XMP-crs:LuminanceAdjustmentBlue"); - available.add("XMP-crs:LuminanceAdjustmentGreen"); - available.add("XMP-crs:LuminanceAdjustmentMagenta"); - available.add("XMP-crs:LuminanceAdjustmentOrange"); - available.add("XMP-crs:LuminanceAdjustmentPurple"); - available.add("XMP-crs:LuminanceAdjustmentRed"); - available.add("XMP-crs:LuminanceAdjustmentYellow"); - available.add("XMP-crs:LuminanceSmoothing"); - available.add("XMP-crs:ParametricDarks"); - available.add("XMP-crs:ParametricHighlights"); - available.add("XMP-crs:ParametricHighlightSplit"); - available.add("XMP-crs:ParametricLights"); - available.add("XMP-crs:ParametricMidtoneSplit"); - available.add("XMP-crs:ParametricShadows"); - available.add("XMP-crs:ParametricShadowSplit"); - available.add("XMP-crs:PerspectiveAspect"); - available.add("XMP-crs:PerspectiveHorizontal"); - available.add("XMP-crs:PerspectiveRotate"); - available.add("XMP-crs:PerspectiveScale"); - available.add("XMP-crs:PerspectiveUpright"); - available.add("XMP-crs:PerspectiveVertical"); - available.add("XMP-crs:PostCropVignetteAmount"); - available.add("XMP-crs:ProcessVersion"); - available.add("XMP-crs:RawFileName"); - available.add("XMP-crs:RedHue"); - available.add("XMP-crs:RedSaturation"); - available.add("XMP-crs:Saturation"); - available.add("XMP-crs:SaturationAdjustmentAqua"); - available.add("XMP-crs:SaturationAdjustmentBlue"); - available.add("XMP-crs:SaturationAdjustmentGreen"); - available.add("XMP-crs:SaturationAdjustmentMagenta"); - available.add("XMP-crs:SaturationAdjustmentOrange"); - available.add("XMP-crs:SaturationAdjustmentPurple"); - available.add("XMP-crs:SaturationAdjustmentRed"); - available.add("XMP-crs:SaturationAdjustmentYellow"); - available.add("XMP-crs:Shadows2012"); - available.add("XMP-crs:ShadowTint"); - available.add("XMP-crs:SharpenDetail"); - available.add("XMP-crs:SharpenEdgeMasking"); - available.add("XMP-crs:SharpenRadius"); - available.add("XMP-crs:Sharpness"); - available.add("XMP-crs:SplitToningBalance"); - available.add("XMP-crs:SplitToningHighlightHue"); - available.add("XMP-crs:SplitToningHighlightSaturation"); - available.add("XMP-crs:SplitToningShadowHue"); - available.add("XMP-crs:SplitToningShadowSaturation"); - available.add("XMP-crs:Tint"); - available.add("XMP-crs:Version"); - available.add("XMP-crs:Vibrance"); - available.add("XMP-crs:VignetteAmount"); - available.add("XMP-crs:WhiteBalance"); - available.add("XMP-crs:Whites2012"); - available.add("XMP-dc:Format"); - available.add("XMP-dc:Rights"); - available.add("XMP-exif:ApertureValue"); - available.add("XMP-exif:BrightnessValue"); - available.add("XMP-exif:ColorSpace"); - available.add("XMP-exif:CompressedBitsPerPixel"); - available.add("XMP-exif:Contrast"); - available.add("XMP-exif:CustomRendered"); - available.add("XMP-exif:DateTimeDigitized"); - available.add("XMP-exif:DateTimeOriginal"); - available.add("XMP-exif:ExifImageHeight"); - available.add("XMP-exif:ExifImageWidth"); - available.add("XMP-exif:ExifVersion"); - available.add("XMP-exif:ExposureCompensation"); - available.add("XMP-exif:ExposureMode"); - available.add("XMP-exif:ExposureProgram"); - available.add("XMP-exif:ExposureTime"); - available.add("XMP-exif:FileSource"); - available.add("XMP-exif:FlashFired"); - available.add("XMP-exif:FlashFunction"); - available.add("XMP-exif:FlashMode"); - available.add("XMP-exif:FlashpixVersion"); - available.add("XMP-exif:FlashRedEyeMode"); - available.add("XMP-exif:FlashReturn"); - available.add("XMP-exif:FNumber"); - available.add("XMP-exif:FocalLength"); - available.add("XMP-exif:FocalLengthIn35mmFormat"); - available.add("XMP-exif:FocalPlaneResolutionUnit"); - available.add("XMP-exif:FocalPlaneXResolution"); - available.add("XMP-exif:FocalPlaneYResolution"); - available.add("XMP-exif:ISO"); - available.add("XMP-exif:LightSource"); - available.add("XMP-exif:MeteringMode"); - available.add("XMP-exif:NativeDigest"); - available.add("XMP-exif:Saturation"); - available.add("XMP-exif:SceneCaptureType"); - available.add("XMP-exif:SceneType"); - available.add("XMP-exif:SensingMethod"); - available.add("XMP-exif:Sharpness"); - available.add("XMP-exif:ShutterSpeedValue"); - available.add("XMP-exif:SubjectDistanceRange"); - available.add("XMP-exif:WhiteBalance"); - available.add("XMP-photoshop:ColorMode"); - available.add("XMP-photoshop:DateCreated"); - available.add("XMP-photoshop:History"); - available.add("XMP-photoshop:ICCProfileName"); - available.add("XMP-tiff:BitsPerSample"); - available.add("XMP-tiff:Compression"); - available.add("XMP-tiff:ImageHeight"); - available.add("XMP-tiff:ImageWidth"); - available.add("XMP-tiff:Make"); - available.add("XMP-tiff:Model"); - available.add("XMP-tiff:NativeDigest"); - available.add("XMP-tiff:Orientation"); - available.add("XMP-tiff:PhotometricInterpretation"); - available.add("XMP-tiff:ResolutionUnit"); - available.add("XMP-tiff:SamplesPerPixel"); - available.add("XMP-tiff:XResolution"); - available.add("XMP-tiff:YResolution"); - available.add("XMP-xmp:CreateDate"); - available.add("XMP-xmp:CreatorTool"); - available.add("XMP-xmp:MetadataDate"); - available.add("XMP-xmpMM:DerivedFrom"); - available.add("XMP-xmpMM:DerivedFromDocumentID"); - available.add("XMP-xmpMM:DerivedFromInstanceID"); - available.add("XMP-xmpMM:DerivedFromOriginalDocumentID"); - available.add("XMP-xmpMM:DocumentID"); - available.add("XMP-xmpMM:HistoryParameters"); - available.add("XMP-xmpMM:InstanceID"); - available.add("XMP-xmpMM:OriginalDocumentID"); - available.add("XMP-xmp:ModifyDate"); - available.add("XMP-x:XMPToolkit"); - return available; - } - @Override public final boolean isWellFormed() { return this.iswellformed; } @Override - public List<String> getErrors() { - return null; + public final List<String> getErrors() { + return List.copyOf(this.validationLog); } @Override @@ -1112,35 +231,13 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa log.debug("is valid=" + this.isvalid); return this.isvalid; } - @Override - public final String getFormatName() { - return "TIFF"; - } - - @Override - public final String getFormatVersion() { - return "6 (baseline + SLUB extensions)"; - } - @Override - public final Integer getImageCount() { - return 1; //baseline tiff holds exact one - } - - @Override - public final String getMimeType() { - return "image/tiff"; - } - - @Override - public final String getProfile() { - /* there is no documentation in ExL API, therefore we use it to document the profile versions in a light way */ - StringBuilder returnvalue = new StringBuilder(); - for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) { - String modificationdate = modificationDateOfFile(this.checkit_tiff_config_path.get(v)); - returnvalue.append(v).append("profile:\n").append(" path=").append(this.checkit_tiff_config_path.get(v)).append("\n").append(" md5sum=").append(this.md5CheckitTiff.get(v)).append("\n").append(" modification date=").append(modificationdate).append("\n"); + private void checkFileExists (String filename) throws Exception { + File f = new File(filename); + if (! f.exists() ) { + System.out.println("ERROR: path=" + filename + " not available"); + throw new Exception("ERROR: path=" + filename + " not available"); } - return returnvalue.toString(); } private String md5SumOfFile(String filename ) { @@ -1164,56 +261,27 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements FormatVa return ""; } - /** stand-alone check, main file * @param args list of files which should be scanned */ public static void main(String[] args) { - SLUBTechnicalMetadataExtractorCheckItTiffPlugin plugin = new SLUBTechnicalMetadataExtractorCheckItTiffPlugin(); + SLUBRetroMonographieTIFFFormatValidationPlugin plugin = new SLUBRetroMonographieTIFFFormatValidationPlugin(); Map<String, String> initp = new HashMap<>(); initp.put( "current_checkit_tiff", "/operational_shared/software/checkit_tiff_current"); initp.put( "current_config_file", "/operational_shared/software/cit_tiff6_baseline_SLUB_current.cfg"); initp.put( "upcoming_checkit_tiff", "/operational_shared/software/checkit_tiff_upcoming"); initp.put( "upcoming_config_file", "/operational_shared/software/cit_tiff6_baseline_SLUB_current.cfg"); - initp.put( "exiftool", "/usr/bin/exiftool"); plugin.initParams( initp ); + System.out.println("----------------------------------"); System.out.println("Agent: '" + plugin.getAgent() + "'"); System.out.println(); - for (String file : args) { - try { - plugin.extract(file); - } catch (Exception e) { - e.printStackTrace(); - } - System.out.println("RESULT: " + plugin.isValid()); - System.out.println("ERRORMESSAGE: " + plugin.getExtractionErrors()); - } - System.out.println("----------------------------------"); - System.out.println("getAgentName:"); - System.out.println( plugin.getAgentName()); + System.out.println("RESULT: " + plugin.isValid()); System.out.println("----------------------------------"); System.out.println("getAgent:"); System.out.println( plugin.getAgent()); System.out.println("----------------------------------"); - System.out.println("getSupportedAttributeNames:"); - System.out.println( plugin.getSupportedAttributeNames()); - System.out.println("----------------------------------"); - System.out.println("getFormatName:"); - System.out.println( plugin.getFormatName()); - System.out.println("----------------------------------"); - System.out.println("getFormatVersion:"); - System.out.println( plugin.getFormatVersion()); - System.out.println("----------------------------------"); - System.out.println("getMimeType:"); - System.out.println( plugin.getMimeType()); - System.out.println("----------------------------------"); System.out.println("getProfile:"); System.out.println( plugin.getProfile()); System.out.println("----------------------------------"); - System.out.println("getAttributeByName (summarized):"); - for (Map.Entry<String, String> m : plugin.attributes.entrySet()) { - String s = m.getKey() + " -> " + m.getValue(); - System.out.println(s); - } } } -- GitLab