[OpenJDK 2D-Dev] RFR: 8149815: Misleading
Brian Burkhalter
brian.burkhalter at oracle.com
Tue May 17 20:44:26 UTC 2016
Hello Bharath,
Thank you for your comments.
On May 10, 2016, at 8:45 AM, Bluv Nallakaluva <bharath.nallakaluva at oracle.com> wrote:
> Please find my observations below on this.
>
> Even when hasDirectory is true for the TIFFField , the node returned by TIFFField#getAsNativeNode does not return "TIFFIFD" value when the method getNodeName is invoked on it. Please refer to old attached test case here : https://bugs.openjdk.java.net/browse/JDK-8149815.
When I run the test case GetAsNativeNode attached to https://bugs.openjdk.java.net/browse/JDK-8149815 against my current clone it produces no output.
> The TIFFField constructed with a TIFFDirectory argument returns "true” when hasDirectory method is invoked on that instance.
>
> The root cause might be originating from the internal api "com.sun.imageio.plugins.tiff.TIFFFieldNode#getNodeName.” This method is using the check return f.getData() instanceof TIFFDirectory ? "TIFFIFD" : "TIFFField which is not quite true because f.getData cannot be an instance of TIFFDirectory as per the current API.
>
> I believe the fix for this should be "return f.hasDirectory && f.getTag().isIFDPointer ? "TIFFIFD" :"TIFFField""
With this patch http://cr.openjdk.java.net/~bpb/8149815/webrev.00/ applied, the TIFFField.getAsNativeNode() is
/**
* Returns the {@code TIFFField} as a node named either
* <tt>"TIFFField"</tt> or <tt>"TIFFIFD"</tt> as described in the
* TIFF native image metadata specification. The node will be named
* <tt>"TIFFIFD"</tt> if and only if {@link #hasDirectory()} returns
* {@code true}, or the field's data object is an instance of
* {@link TIFFDirectory}.
*
* @return a {@code Node} named <tt>"TIFFField"</tt> or
* <tt>"TIFFIFD"</tt>.
*/
public Node getAsNativeNode() {
return new TIFFFieldNode(this);
}
and the TIFFFieldNode constructor uses
private static String getNodeName(TIFFField f) {
return (f.hasDirectory() || f.getData() instanceof TIFFDirectory) ?
"TIFFIFD" : "TIFFField";
}
I think you do have a point but I do not think it is entirely correct. I would propose instead the following version of the above two methods:
/**
* Returns the {@code TIFFField} as a node named either
* <tt>"TIFFField"</tt> or <tt>"TIFFIFD"</tt> as described in the
* TIFF native image metadata specification. The node will be named
* <tt>"TIFFIFD"</tt> if and only if {@link #hasDirectory()} returns
* {@code true} and the field’s type is either {@link TIFFTag#TIFF_LONG}
* or {@link TIFFTag#TIFF_IFD_POINTER}.
*
* @return a {@code Node} named <tt>"TIFFField"</tt> or
* <tt>"TIFFIFD"</tt>.
*/
public Node getAsNativeNode() {
return new TIFFFieldNode(this);
}
private static String getNodeName(TIFFField f) {
int type = f.getType();
return (f.hasDirectory() &&
(type == TIFFTag.TIFF_LONG || type == TIFFTag.TIFF_IFD_POINTER)) ?
"TIFFIFD" : "TIFFField";
}
Thanks,
Brian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160517/eec00739/attachment.html>
More information about the 2d-dev
mailing list