for (String measureUri : measureUris) {
Value v = null;
if (MeasureConstants.FORMAT_CONFORMITY_WELL_FORMEDNESS.equals(measureUri)) {
v = extractor.extractValue(fitsDocResult, new BooleanScale(),
"//fits:well-formed[@status='SINGLE_RESULT']/text()",
"//fits:filestatus/fits:message/text()");
} else if (MeasureConstants.FORMAT_CONFORMITY_VALIDITY.equals(measureUri)) {
v = extractor.extractValue(fitsDocResult, new BooleanScale(),
"//fits:filestatus/fits:valid[@status='SINGLE_RESULT']/text()",
"//fits:filestatus/fits:message/text()");
}
if (MeasureConstants.COMPRESSION_ALGORITHM.equals(measureUri)) {
v = extractor.extractValue(fitsDocResult, new FreeStringScale(),
"//fits:compressionScheme/text()", null);
}
if ((v != null) && (v.getComment() == null || "".equals(v.getComment()))) {
v.setComment(SOURCE);
results.put(measureUri, v);
listener
.updateStatus(String.format("%s: measurement: %s = %s", NAME, measureUri, v.toString()));
// this leaf has been processed
continue;
}
if (MeasureConstants.FORMAT_CONFORMITY_CONFORMS.equals(measureUri)) {
if (alternative.getAction() != null) {
String puid = "UNDEFINED";
FormatInfo info = alternative.getAction().getTargetFormatInfo();
if (info != null) {
puid = info.getPuid();
}
String fitsText = extractor.extractText(fitsDocResult,
"//fits:externalIdentifier[@type='puid']/text()");
v = identicalValues(puid, fitsText, new BooleanScale());
}
} else if ((MeasureConstants.IMAGE_SIZE_IMAGE_WIDTH_EQUAL).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:imageWidth/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:imageWidth/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.IMAGE_SIZE_IMAGE_HEIGHT_EQUAL).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:imageHeight/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:imageHeight/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.IMAGE_ASPECT_RATIO_RETAINED).equals(measureUri)) {
try {
int sampleHeight = Integer.parseInt(extractor.extractText(fitsDocSample,
"//fits:imageHeight/text()"));
int resultHeight = Integer.parseInt(extractor.extractText(fitsDocResult,
"//fits:imageHeight/text()"));
int sampleWidth = Integer.parseInt(extractor.extractText(fitsDocSample,
"//fits:imageWidth/text()"));
int resultWidth = Integer.parseInt(extractor.extractText(fitsDocResult,
"//fits:imageWidth/text()"));
double sampleRatio = ((double) sampleWidth) / sampleHeight;
double resultRatio = ((double) resultWidth) / resultHeight;
v = new BooleanValue();
((BooleanValue) v).bool(0 == Double.compare(sampleRatio, resultRatio));
v.setComment(String.format("Reference value: %s\nActual value: %s",
formatter.formatFloat(sampleRatio), formatter.formatFloat(resultRatio)));
} catch (NumberFormatException e) {
// not all values are available - aspectRatio cannot
// be calculated
v = new BooleanValue();
v.setComment("Image width and/or height are not available - aspectRatio cannot be calculated");
}
// } else if
// ((OBJECT_COMPRESSION_SCHEME_RETAINED).equals(measureUri))
// {
// v = identicalValues(sampleImageCompressionScheme,
// resultImageCompressionScheme,
// new BooleanScale());
} else if (MeasureConstants.COMPRESSION_COMPRESSION_TYPE.equals(measureUri)) {
v = new OrdinalValue();
if ((resultImageCompressionScheme == null) || ("".equals(resultImageCompressionScheme))
|| ("None".equals(resultImageCompressionScheme))
|| ("Uncompressed".equals(resultImageCompressionScheme))) {
v.parse("none");
} else if ("LZW".equals(resultImageCompressionScheme)
|| "Deflate".equals(resultImageCompressionScheme)
|| "JPEG 2000 Lossless".equals(resultImageCompressionScheme)) {
v.parse("lossless");
v.setComment("compression scheme: " + resultImageCompressionScheme);
} else {
v.parse("lossy");
v.setComment("compression scheme: " + resultImageCompressionScheme);
}
} else if ((MeasureConstants.COLOR_DEPTH_BITS_PER_SAMPLE_EQUAL).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:bitsPerSample/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:bitsPerSample/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
// } else if
// ((EXIF_SAMPLES_PER_PIXEL_RETAINED).equals(measureUri))
// {
// String sampleValue =
// extractor.extractText(fitsDocSample,
// "//fits:samplesPerPixel/text()");
// String resultValue =
// extractor.extractText(fitsDocResult,
// "//fits:samplesPerPixel/text()");
// v = identicalValues(sampleValue, resultValue, new
// BooleanScale());
// } else if
// ((OBJECT_IMAGE_PHOTOMETRICINTERPRETATION_COLORSPACE +
// "#equal").equals(measureUri)) {
// String sampleValue =
// extractor.extractText(fitsDocSample,
// "//fits:colorSpace/text()");
// String resultValue =
// extractor.extractText(fitsDocResult,
// "//fits:colorSpace/text()");
// v = identicalValues(sampleValue, resultValue, new
// BooleanScale());
} else if ((MeasureConstants.COLOUR_MODEL_RETAINED).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:iccProfileName/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:iccProfileName/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.SAMPLING_FREQUENCY_UNIT).equals(measureUri)) {
String resultValue = extractor
.extractText(fitsDocResult, "//fits:samplingFrequencyUnit/text()");
v = new OrdinalScale().createValue();
((OrdinalValue) v).setValue(resultValue);
} else if ((MeasureConstants.X_SAMPLING_FREQUENCY_PRESERVED).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:xSamplingFrequency/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:xSamplingFrequency/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.Y_SAMPLING_FREQUENCY_PRESERVED).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:ySamplingFrequency/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:ySamplingFrequency/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.EXIF_ALL_METADATA_RETAINED + "#equal").equals(measureUri)) {
// we use the equal metric. reserve PRESERVED metric for
// later and get it right.
HashMap<String, String> sampleMetadata = extractor.extractValues(fitsDocSample,
"//fits:exiftool/*[local-name() != 'rawdata']");
HashMap<String, String> resultMetadata = extractor.extractValues(fitsDocResult,
"//fits:exiftool/*[local-name() != 'rawdata']");
v = preservedValues(sampleMetadata, resultMetadata, new BooleanScale());
} else if ((MeasureConstants.PRODUCER_METADATA_ELEMENT_RETAINED).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample,
"//fits:ImageCreation/ImageProducer/text()");
String resultValue = extractor.extractText(fitsDocResult,
"//fits:ImageCreation/ImageProducer/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if (MeasureConstants.SOFTWARE_METADATA_ELEMENT_RETAINED.equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample,
"//fits:creatingApplicationName/text()");
String resultValue = extractor.extractText(fitsDocResult,
"//fits:creatingApplicationName/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.DATE_AND_TIME_OF_CREATION_METADATA_ELEMENT_RETAINED)
.equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample,
"//fits:ImageCreation/DateTimeCreated/text()");
String resultValue = extractor.extractText(fitsDocResult,
"//fits:ImageCreation/DateTimeCreated/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.EXIF_IMAGE_DESCRIPTION_RETAINED + "#equal").equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample,
"//fits:exiftool/ImageDescription/text()");
String resultValue = extractor.extractText(fitsDocResult,
"//fits:exiftool/ImageDescription/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
} else if ((MeasureConstants.IMAGE_ORIENTATION_METADATA_ELEMENT_RETAINED).equals(measureUri)) {
String sampleValue = extractor.extractText(fitsDocSample, "//fits:exiftool/Orientation/text()");
String resultValue = extractor.extractText(fitsDocResult, "//fits:exiftool/Orientation/text()");
v = identicalValues(sampleValue, resultValue, new BooleanScale());
}
if (v != null) {
v.setComment(v.getComment() + SOURCE);
results.put(measureUri, v);