jdk/src/java.desktop/share/classes/javax/imageio/plugins/tiff/TIFFField.java
author bpb
Fri, 09 Dec 2016 11:08:38 -0800
changeset 42742 60484cf11911
parent 41900 6181b834ba16
child 42743 e61f0c011e93
permissions -rw-r--r--
8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE Summary: Change constructor TIFFField(TIFFTag,int) to TIFFField(TIFFTag,long). Reviewed-by: jdv, prr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     1
/*
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
     2
 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     4
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    10
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    15
 * accompanied this code).
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    16
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    20
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    23
 * questions.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    24
 */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    25
package javax.imageio.plugins.tiff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    26
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    27
import java.util.StringTokenizer;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    28
import org.w3c.dom.NamedNodeMap;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    29
import org.w3c.dom.Node;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    30
import com.sun.imageio.plugins.tiff.TIFFFieldNode;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    31
import com.sun.imageio.plugins.tiff.TIFFIFD;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    32
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    33
/**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    34
 * A class representing a field in a TIFF 6.0 Image File Directory.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    35
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    36
 * <p> A field in a TIFF Image File Directory (IFD) is defined as a
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    37
 * tag number accompanied by a sequence of values of identical data type.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
    38
 * TIFF 6.0 defines 12 data types; a 13th type {@code IFD} is
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    39
 * defined in TIFF Tech Note 1 of TIFF Specification Supplement 1. These
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    40
 * TIFF data types are referred to by Java constants and mapped internally
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    41
 * onto Java language data types and type names as follows:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    42
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    43
 * <br>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    44
 * <br>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    45
 * <table border="1">
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    46
 * <caption>TIFF Data Type to Java Data Type Mapping</caption>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    47
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    48
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    49
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    50
 * <b>TIFF Data Type</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    51
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    52
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    53
 * <b>Java Constant</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    54
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    55
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    56
 * <b>Java Data Type</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    57
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    58
 * <th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    59
 * <b>Java Type Name</b>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    60
 * </th>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    61
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    62
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    63
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    64
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    65
 * <tt>BYTE</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    66
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    67
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    68
 * {@link TIFFTag#TIFF_BYTE}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    69
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    70
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
    71
 * {@code byte}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    72
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    73
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
    74
 * {@code "Byte"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    75
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    76
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    77
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    78
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    79
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    80
 * <tt>ASCII</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    81
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    82
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    83
 * {@link TIFFTag#TIFF_ASCII}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    84
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    85
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
    86
 * {@code String}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    87
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    88
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
    89
 * {@code "Ascii"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    90
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    91
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    92
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    93
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    94
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    95
 * <tt>SHORT</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    96
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    97
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    98
 * {@link TIFFTag#TIFF_SHORT}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
    99
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   100
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   101
 * {@code char}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   102
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   103
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   104
 * {@code "Short"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   105
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   106
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   107
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   108
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   109
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   110
 * <tt>LONG</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   111
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   112
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   113
 * {@link TIFFTag#TIFF_LONG}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   114
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   115
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   116
 * {@code long}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   117
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   118
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   119
 * {@code "Long"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   120
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   121
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   122
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   123
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   124
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   125
 * <tt>RATIONAL</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   126
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   127
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   128
 * {@link TIFFTag#TIFF_RATIONAL}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   129
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   130
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   131
 * {@code long[2]} {numerator, denominator}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   132
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   133
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   134
 * {@code "Rational"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   135
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   136
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   137
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   138
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   139
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   140
 * <tt>SBYTE</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   141
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   142
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   143
 * {@link TIFFTag#TIFF_SBYTE}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   144
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   145
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   146
 * {@code byte}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   147
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   148
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   149
 * {@code "SByte"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   150
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   151
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   152
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   153
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   154
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   155
 * <tt>UNDEFINED</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   156
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   157
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   158
 * {@link TIFFTag#TIFF_UNDEFINED}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   159
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   160
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   161
 * {@code byte}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   162
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   163
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   164
 * {@code "Undefined"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   165
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   166
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   167
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   168
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   169
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   170
 * <tt>SSHORT</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   171
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   172
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   173
 * {@link TIFFTag#TIFF_SSHORT}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   174
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   175
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   176
 * {@code short}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   177
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   178
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   179
 * {@code "SShort"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   180
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   181
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   182
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   183
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   184
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   185
 * <tt>SLONG</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   186
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   187
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   188
 * {@link TIFFTag#TIFF_SLONG}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   189
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   190
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   191
 * {@code int}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   192
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   193
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   194
 * {@code "SLong"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   195
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   196
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   197
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   198
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   199
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   200
 * <tt>SRATIONAL</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   201
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   202
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   203
 * {@link TIFFTag#TIFF_SRATIONAL}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   204
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   205
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   206
 * {@code int[2]} {numerator, denominator}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   207
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   208
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   209
 * {@code "SRational"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   210
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   211
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   212
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   213
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   214
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   215
 * <tt>FLOAT</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   216
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   217
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   218
 * {@link TIFFTag#TIFF_FLOAT}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   219
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   220
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   221
 * {@code float}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   222
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   223
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   224
 * {@code "Float"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   225
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   226
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   227
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   228
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   229
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   230
 * <tt>DOUBLE</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   231
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   232
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   233
 * {@link TIFFTag#TIFF_DOUBLE}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   234
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   235
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   236
 * {@code double}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   237
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   238
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   239
 * {@code "Double"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   240
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   241
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   242
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   243
 * <tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   244
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   245
 * <tt>IFD</tt>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   246
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   247
 * <td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   248
 * {@link TIFFTag#TIFF_IFD_POINTER}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   249
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   250
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   251
 * {@code long}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   252
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   253
 * <td>
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   254
 * {@code "IFDPointer"}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   255
 * </td>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   256
 * </tr>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   257
 *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   258
 * </table>
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   259
 *
35302
e4d2275861c3 8136494: Update "@since 1.9" to "@since 9" to match java.version.specification
iris
parents: 34416
diff changeset
   260
 * @since 9
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   261
 * @see   TIFFDirectory
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   262
 * @see   TIFFTag
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   263
 */
41900
6181b834ba16 8165981: Consider making some classes in javax.imageio.plugins.tiff final
bpb
parents: 40721
diff changeset
   264
public final class TIFFField implements Cloneable {
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   265
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   266
    private static final String[] typeNames = {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   267
        null,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   268
        "Byte", "Ascii", "Short", "Long", "Rational",
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   269
        "SByte", "Undefined", "SShort", "SLong", "SRational",
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   270
        "Float", "Double", "IFDPointer"
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   271
    };
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   272
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   273
    private static final boolean[] isIntegral = {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   274
        false,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   275
        true, false, true, true, false,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   276
        true, true, true, true, false,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   277
        false, false, false
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   278
    };
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   279
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   280
    /** The tag. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   281
    private TIFFTag tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   282
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   283
    /** The tag number. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   284
    private int tagNumber;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   285
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   286
    /** The tag type. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   287
    private int type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   288
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   289
    /** The number of data items present in the field. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   290
    private int count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   291
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   292
    /** The field data. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   293
    private Object data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   294
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   295
    /** The IFD contents if available. This will usually be a TIFFIFD. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   296
    private TIFFDirectory dir;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   297
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   298
    /** The default constructor. */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   299
    private TIFFField() {}
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   300
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   301
    private static String getAttribute(Node node, String attrName) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   302
        NamedNodeMap attrs = node.getAttributes();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   303
        return attrs.getNamedItem(attrName).getNodeValue();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   304
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   305
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   306
    private static void initData(Node node,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   307
                                 int[] otype, int[] ocount, Object[] odata) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   308
        int type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   309
        int count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   310
        Object data = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   311
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   312
        String typeName = node.getNodeName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   313
        typeName = typeName.substring(4);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   314
        typeName = typeName.substring(0, typeName.length() - 1);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   315
        type = TIFFField.getTypeByName(typeName);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   316
        if (type == -1) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   317
            throw new IllegalArgumentException("typeName = " + typeName);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   318
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   319
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   320
        Node child = node.getFirstChild();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   321
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   322
        count = 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   323
        while (child != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   324
            String childTypeName = child.getNodeName().substring(4);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   325
            if (!typeName.equals(childTypeName)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   326
                // warning
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   327
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   328
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   329
            ++count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   330
            child = child.getNextSibling();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   331
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   332
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   333
        if (count > 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   334
            data = createArrayForType(type, count);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   335
            child = node.getFirstChild();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   336
            int idx = 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   337
            while (child != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   338
                String value = getAttribute(child, "value");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   339
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   340
                String numerator, denominator;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   341
                int slashPos;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   342
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   343
                switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   344
                case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   345
                    ((String[])data)[idx] = value;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   346
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   347
                case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   348
                case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   349
                    ((byte[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   350
                        (byte)Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   351
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   352
                case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   353
                    ((char[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   354
                        (char)Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   355
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   356
                case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   357
                    ((short[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   358
                        (short)Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   359
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   360
                case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   361
                    ((int[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   362
                        Integer.parseInt(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   363
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   364
                case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   365
                case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   366
                    ((long[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   367
                        Long.parseLong(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   368
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   369
                case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   370
                    ((float[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   371
                        Float.parseFloat(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   372
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   373
                case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   374
                    ((double[])data)[idx] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   375
                        Double.parseDouble(value);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   376
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   377
                case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   378
                    slashPos = value.indexOf("/");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   379
                    numerator = value.substring(0, slashPos);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   380
                    denominator = value.substring(slashPos + 1);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   381
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   382
                    ((int[][])data)[idx] = new int[2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   383
                    ((int[][])data)[idx][0] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   384
                        Integer.parseInt(numerator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   385
                    ((int[][])data)[idx][1] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   386
                        Integer.parseInt(denominator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   387
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   388
                case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   389
                    slashPos = value.indexOf("/");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   390
                    numerator = value.substring(0, slashPos);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   391
                    denominator = value.substring(slashPos + 1);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   392
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   393
                    ((long[][])data)[idx] = new long[2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   394
                    ((long[][])data)[idx][0] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   395
                        Long.parseLong(numerator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   396
                    ((long[][])data)[idx][1] =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   397
                        Long.parseLong(denominator);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   398
                    break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   399
                default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   400
                    // error
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   401
                }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   402
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   403
                idx++;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   404
                child = child.getNextSibling();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   405
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   406
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   407
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   408
        otype[0] = type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   409
        ocount[0] = count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   410
        odata[0] = data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   411
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   412
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   413
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   414
     * Creates a {@code TIFFField} from a TIFF native image
40721
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   415
     * metadata node. If the value of the {@code "number"} attribute
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   416
     * of the node is not found in {@code tagSet} then a new
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   417
     * {@code TIFFTag} with name {@code TIFFTag.UNKNOWN_TAG_NAME}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   418
     * will be created and assigned to the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   419
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   420
     * @param tagSet The {@code TIFFTagSet} to which the
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   421
     * {@code TIFFTag} of the field belongs.
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   422
     * @param node A native TIFF image metadata {@code TIFFField} node.
40721
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   423
     * @throws IllegalArgumentException If the {@code Node} parameter content
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   424
     * does not adhere to the {@code TIFFField} element structure defined by
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   425
     * the <a href="../../metadata/doc-files/tiff_metadata.html#ImageMetadata">
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   426
     * TIFF native image metadata format specification</a>, or if the
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   427
     * combination of node attributes and data is not legal per the
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   428
     * {@link #TIFFField(TIFFTag,int,int,Object)} constructor specification.
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   429
     * Note that a cause might be set on such an exception.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   430
     * @return A new {@code TIFFField}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   431
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   432
    public static TIFFField createFromMetadataNode(TIFFTagSet tagSet,
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   433
                                                   Node node) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   434
        if (node == null) {
40721
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   435
            // This method is specified to throw only IllegalArgumentExceptions
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   436
            // so we create an IAE with a NullPointerException as its cause.
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   437
            throw new IllegalArgumentException(new NullPointerException
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   438
                ("node == null!"));
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   439
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   440
        String name = node.getNodeName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   441
        if (!name.equals("TIFFField")) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   442
            throw new IllegalArgumentException("!name.equals(\"TIFFField\")");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   443
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   444
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   445
        int tagNumber = Integer.parseInt(getAttribute(node, "number"));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   446
        TIFFTag tag = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   447
        if (tagSet != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   448
            tag = tagSet.getTag(tagNumber);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   449
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   450
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   451
        int type = TIFFTag.TIFF_UNDEFINED;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   452
        int count = 0;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   453
        Object data = null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   454
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   455
        Node child = node.getFirstChild();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   456
        if (child != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   457
            String typeName = child.getNodeName();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   458
            if (typeName.equals("TIFFUndefined")) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   459
                String values = getAttribute(child, "value");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   460
                StringTokenizer st = new StringTokenizer(values, ",");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   461
                count = st.countTokens();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   462
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   463
                byte[] bdata = new byte[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   464
                for (int i = 0; i < count; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   465
                    bdata[i] = (byte)Integer.parseInt(st.nextToken());
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   466
                }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   467
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   468
                type = TIFFTag.TIFF_UNDEFINED;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   469
                data = bdata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   470
            } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   471
                int[] otype = new int[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   472
                int[] ocount = new int[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   473
                Object[] odata = new Object[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   474
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   475
                initData(node.getFirstChild(), otype, ocount, odata);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   476
                type = otype[0];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   477
                count = ocount[0];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   478
                data = odata[0];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   479
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   480
        } else if (tag != null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   481
            int t = TIFFTag.MAX_DATATYPE;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   482
            while(t >= TIFFTag.MIN_DATATYPE && !tag.isDataTypeOK(t)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   483
                t--;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   484
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   485
            type = t;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   486
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   487
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   488
        if (tag == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   489
            tag = new TIFFTag(TIFFTag.UNKNOWN_TAG_NAME, tagNumber, 1 << type);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   490
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   491
40721
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   492
        TIFFField field;
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   493
        try {
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   494
            field = new TIFFField(tag, type, count, data);
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   495
        } catch (NullPointerException npe) {
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   496
            // This method is specified to throw only IllegalArgumentExceptions
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   497
            // so we catch the NullPointerException and set it as the cause of
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   498
            // the IAE which is thrown.
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   499
            throw new IllegalArgumentException(npe);
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   500
        }
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   501
69084433be85 8149562: TIFFField#createFromMetadataNode javadoc should provide information about sibling/child nodes that should be part of parameter node
bpb
parents: 40135
diff changeset
   502
        return field;
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   503
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   504
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   505
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   506
     * Constructs a {@code TIFFField} with arbitrary data. The
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   507
     * {@code type} parameter must be a value for which
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   508
     * {@link TIFFTag#isDataTypeOK tag.isDataTypeOK()}
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   509
     * returns {@code true}. The {@code data} parameter must
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   510
     * be an array of a Java type appropriate for the type of the TIFF
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   511
     * field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   512
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   513
     * <p>Note that the value (data) of the {@code TIFFField}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   514
     * will always be the actual field value regardless of the number of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   515
     * bytes required for that value. This is the case despite the fact
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   516
     * that the TIFF <i>IFD Entry</i> corresponding to the field may
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   517
     * actually contain the offset to the value of the field rather than
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   518
     * the value itself (the latter occurring if and only if the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   519
     * value fits into 4 bytes). In other words, the value of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   520
     * field will already have been read from the TIFF stream. (An exception
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   521
     * to this case may occur when the field represents the contents of a
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   522
     * non-baseline IFD. In that case the data will be a {@code long[]}
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   523
     * containing the offset to the IFD and the {@code TIFFDirectory}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   524
     * returned by {@link #getDirectory()} will be its contents.)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   525
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   526
     * @param tag The tag to associated with this field.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   527
     * @param type One of the {@code TIFFTag.TIFF_*} constants
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   528
     * indicating the data type of the field as written to the TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   529
     * @param count The number of data values.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   530
     * @param data The actual data content of the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   531
     *
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   532
     * @throws NullPointerException if {@code tag == null}.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   533
     * @throws IllegalArgumentException if {@code type} is not
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   534
     * one of the {@code TIFFTag.TIFF_*} data type constants.
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   535
     * @throws IllegalArgumentException if {@code type} is an unacceptable
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   536
     * data type for the supplied {@code TIFFTag}.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   537
     * @throws IllegalArgumentException if {@code count < 0}.
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   538
     * @throws IllegalArgumentException if {@code count < 1}
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   539
     * and {@code type} is {@code TIFF_RATIONAL} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   540
     * {@code TIFF_SRATIONAL}.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   541
     * @throws IllegalArgumentException if {@code count != 1}
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   542
     * and {@code type} is {@code TIFF_IFD_POINTER}.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   543
     * @throws NullPointerException if {@code data == null}.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   544
     * @throws IllegalArgumentException if {@code data} is an instance of
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   545
     * a class incompatible with the specified type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   546
     * @throws IllegalArgumentException if the size of the data array is wrong.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   547
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   548
    public TIFFField(TIFFTag tag, int type, int count, Object data) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   549
        if(tag == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   550
            throw new NullPointerException("tag == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   551
        } else if(type < TIFFTag.MIN_DATATYPE || type > TIFFTag.MAX_DATATYPE) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   552
            throw new IllegalArgumentException("Unknown data type "+type);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   553
        } else if(!tag.isDataTypeOK(type)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   554
            throw new IllegalArgumentException("Illegal data type " + type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   555
                + " for " + tag.getName() + " tag");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   556
        } else if(count < 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   557
            throw new IllegalArgumentException("count < 0!");
36445
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   558
        } else if((type == TIFFTag.TIFF_RATIONAL
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   559
                   || type == TIFFTag.TIFF_SRATIONAL)
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   560
                  && count < 1) {
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   561
            throw new IllegalArgumentException
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   562
                ("Type is TIFF_RATIONAL or TIFF_SRATIONAL and count < 1");
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   563
        } else if (type == TIFFTag.TIFF_IFD_POINTER && count != 1) {
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   564
            throw new IllegalArgumentException
8784d61c0476 8149120: TIFFField constructor throws ArrayIndexOutOfBoundsException and IllegalArgumentException for scenarios explained in description
bpb
parents: 35302
diff changeset
   565
                ("Type is TIFF_IFD_POINTER count != 1");
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   566
        } else if(data == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   567
            throw new NullPointerException("data == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   568
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   569
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   570
        boolean isDataArrayCorrect = false;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   571
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   572
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   573
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   574
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   575
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   576
            isDataArrayCorrect = data instanceof byte[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   577
                && ((byte[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   578
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   579
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   580
            isDataArrayCorrect = data instanceof String[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   581
                && ((String[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   582
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   583
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   584
            isDataArrayCorrect = data instanceof char[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   585
                && ((char[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   586
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   587
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   588
            isDataArrayCorrect = data instanceof long[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   589
                && ((long[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   590
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   591
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   592
            isDataArrayCorrect = data instanceof long[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   593
                && ((long[])data).length == 1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   594
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   595
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   596
            isDataArrayCorrect = data instanceof long[][]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   597
                && ((long[][])data).length == count
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   598
                && ((long[][])data)[0].length == 2;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   599
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   600
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   601
            isDataArrayCorrect = data instanceof short[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   602
                && ((short[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   603
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   604
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   605
            isDataArrayCorrect = data instanceof int[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   606
                && ((int[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   607
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   608
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   609
            isDataArrayCorrect = data instanceof int[][]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   610
                && ((int[][])data).length == count
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   611
                && ((int[][])data)[0].length == 2;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   612
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   613
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   614
            isDataArrayCorrect = data instanceof float[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   615
                && ((float[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   616
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   617
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   618
            isDataArrayCorrect = data instanceof double[]
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   619
                && ((double[])data).length == count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   620
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   621
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   622
            throw new IllegalArgumentException("Unknown data type "+type);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   623
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   624
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   625
        if (!isDataArrayCorrect) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   626
            throw new IllegalArgumentException
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   627
                ("Illegal class or length for data array");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   628
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   629
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   630
        this.tag = tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   631
        this.tagNumber = tag.getNumber();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   632
        this.type = type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   633
        this.count = count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   634
        this.data = data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   635
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   636
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   637
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   638
     * Constructs a data array using {@link #createArrayForType
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   639
     * createArrayForType()} and invokes
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   640
     * {@link #TIFFField(TIFFTag,int,int,Object)} with the supplied
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   641
     * parameters and the created array.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   642
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   643
     * @param tag The tag to associated with this field.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   644
     * @param type One of the {@code TIFFTag.TIFF_*} constants
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   645
     * indicating the data type of the field as written to the TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   646
     * @param count The number of data values.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   647
     * @throws NullPointerException if {@code tag == null}.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   648
     * @throws IllegalArgumentException if {@code type} is not
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   649
     * one of the {@code TIFFTag.TIFF_*} data type constants.
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   650
     * @throws IllegalArgumentException if {@code type} is an unacceptable
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   651
     * data type for the supplied {@code TIFFTag}.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   652
     * @throws IllegalArgumentException if {@code count < 0}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   653
     * @see #TIFFField(TIFFTag,int,int,Object)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   654
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   655
    public TIFFField(TIFFTag tag, int type, int count) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   656
        this(tag, type, count, createArrayForType(type, count));
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   657
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   658
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   659
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   660
     * Constructs a {@code TIFFField} with a single non-negative integral
42742
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   661
     * value. The field will have type {@link TIFFTag#TIFF_SHORT TIFF_SHORT}
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   662
     * if {@code value} is in {@code [0,0xffff]}, and type
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   663
     * {@link TIFFTag#TIFF_LONG TIFF_LONG} if {@code value} is in
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   664
     * {@code [0x10000,0xffffffff]}. The count of the field will be unity.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   665
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   666
     * @param tag The tag to associate with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   667
     * @param value The value to associate with this field.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   668
     * @throws NullPointerException if {@code tag == null}.
42742
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   669
     * @throws IllegalArgumentException if {@code value} is not in
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   670
     * {@code [0,0xffffffff]}.
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   671
     * @throws IllegalArgumentException if {@code value} is in
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   672
     * {@code [0,0xffff]} and {@code TIFF_SHORT} is an unacceptable type
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   673
     * for the {@code TIFFTag}, or if {@code value} is in
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   674
     * {@code [0x10000,0xffffffff]} and {@code TIFF_LONG} is an unacceptable
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   675
     * type for the {@code TIFFTag}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   676
     */
42742
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   677
    public TIFFField(TIFFTag tag, long value) {
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   678
        if(tag == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   679
            throw new NullPointerException("tag == null!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   680
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   681
        if (value < 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   682
            throw new IllegalArgumentException("value < 0!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   683
        }
42742
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   684
        if (value > 0xffffffffL) {
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   685
            throw new IllegalArgumentException("value > 0xffffffff!");
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   686
        }
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   687
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   688
        this.tag = tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   689
        this.tagNumber = tag.getNumber();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   690
        this.count = 1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   691
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   692
        if (value < 65536) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   693
            if (!tag.isDataTypeOK(TIFFTag.TIFF_SHORT)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   694
                throw new IllegalArgumentException("Illegal data type "
42742
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   695
                    + getTypeName(TIFFTag.TIFF_SHORT) + " for tag "
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   696
                    + "\"" + tag.getName() + "\"");
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   697
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   698
            this.type = TIFFTag.TIFF_SHORT;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   699
            char[] cdata = new char[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   700
            cdata[0] = (char)value;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   701
            this.data = cdata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   702
        } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   703
            if (!tag.isDataTypeOK(TIFFTag.TIFF_LONG)) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   704
                throw new IllegalArgumentException("Illegal data type "
42742
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   705
                    + getTypeName(TIFFTag.TIFF_LONG) + " for tag "
60484cf11911 8169725: cannot use TIFFField(TIFFTag tag, int value) for TIFF_LONG values greater than Integer.MAX_VALUE
bpb
parents: 41900
diff changeset
   706
                    + "\"" + tag.getName() + "\"");
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   707
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   708
            this.type = TIFFTag.TIFF_LONG;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   709
            long[] ldata = new long[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   710
            ldata[0] = value;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   711
            this.data = ldata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   712
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   713
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   714
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   715
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   716
     * Constructs a {@code TIFFField} with an IFD offset and contents.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   717
     * The offset will be stored as the data of this field as
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   718
     * {@code long[] {offset}}. The directory will not be cloned. The count
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   719
     * of the field will be unity.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   720
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   721
     * @param tag The tag to associated with this field.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   722
     * @param type One of the constants {@code TIFFTag.TIFF_LONG} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   723
     * {@code TIFFTag.TIFF_IFD_POINTER}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   724
     * @param offset The IFD offset.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   725
     * @param dir The directory.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   726
     *
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   727
     * @throws NullPointerException if {@code tag == null}.
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   728
     * @throws IllegalArgumentException if {@code type} is an unacceptable
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   729
     * data type for the supplied {@code TIFFTag}.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   730
     * @throws IllegalArgumentException if {@code type} is neither
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   731
     * {@code TIFFTag.TIFF_LONG} nor {@code TIFFTag.TIFF_IFD_POINTER}.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   732
     * @throws IllegalArgumentException if {@code offset <= 0}.
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   733
     * @throws NullPointerException if {@code dir == null}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   734
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   735
     * @see #TIFFField(TIFFTag,int,int,Object)
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   736
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   737
    public TIFFField(TIFFTag tag, int type, long offset, TIFFDirectory dir) {
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   738
        if (tag == null) {
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   739
            throw new NullPointerException("tag == null!");
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   740
        } else if (type < TIFFTag.MIN_DATATYPE || type > TIFFTag.MAX_DATATYPE) {
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   741
            throw new IllegalArgumentException("Unknown data type "+type);
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   742
        } else if (!tag.isDataTypeOK(type)) {
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   743
            throw new IllegalArgumentException("Illegal data type " + type
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   744
                + " for " + tag.getName() + " tag");
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   745
        } else if (type != TIFFTag.TIFF_LONG
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   746
                   && type != TIFFTag.TIFF_IFD_POINTER) {
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   747
            throw new IllegalArgumentException("type " + type
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   748
                + " is neither TIFFTag.TIFF_LONG nor TIFFTag.TIFF_IFD_POINTER");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   749
        } else if (offset <= 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   750
            throw new IllegalArgumentException("offset " + offset
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   751
                + " is non-positive");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   752
        } else if (dir == null) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   753
            throw new NullPointerException("dir == null");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   754
        }
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   755
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   756
        this.tag = tag;
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   757
        this.tagNumber = tag.getNumber();
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   758
        this.type = type;
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   759
        this.count = 1;
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   760
        this.data = new long[] {offset};
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   761
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   762
        this.dir = dir;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   763
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   764
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   765
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   766
     * Retrieves the tag associated with this field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   767
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   768
     * @return The associated {@code TIFFTag}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   769
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   770
    public TIFFTag getTag() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   771
        return tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   772
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   773
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   774
    /**
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   775
     * Retrieves the tag number in the range {@code [0,65535]}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   776
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   777
     * @return The tag number.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   778
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   779
    public int getTagNumber() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   780
        return tagNumber;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   781
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   782
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   783
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   784
     * Returns the type of the data stored in the field.  For a TIFF 6.0
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   785
     * stream, the value will equal one of the {@code TIFFTag.TIFF_*}
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   786
     * constants. For future revisions of TIFF, higher values are possible.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   787
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   788
     * @return The data type of the field value.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   789
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   790
    public int getType() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   791
        return type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   792
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   793
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   794
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   795
     * Returns the name of the supplied data type constant.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   796
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   797
     * @param dataType One of the {@code TIFFTag.TIFF_*} constants
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   798
     * indicating the data type of the field as written to the TIFF stream.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   799
     * @return The type name corresponding to the supplied type constant.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   800
     * @throws IllegalArgumentException if {@code dataType} is not
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   801
     * one of the {@code TIFFTag.TIFF_*} data type constants.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   802
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   803
    public static String getTypeName(int dataType) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   804
        if (dataType < TIFFTag.MIN_DATATYPE ||
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   805
            dataType > TIFFTag.MAX_DATATYPE) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   806
            throw new IllegalArgumentException("Unknown data type "+dataType);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   807
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   808
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   809
        return typeNames[dataType];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   810
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   811
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   812
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   813
     * Returns the data type constant corresponding to the supplied data
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   814
     * type name. If the name is unknown {@code -1} will be returned.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   815
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   816
     * @param typeName The type name.
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   817
     * @return One of the {@code TIFFTag.TIFF_*} constants or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   818
     * {@code -1} if the name is not recognized.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   819
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   820
    public static int getTypeByName(String typeName) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   821
        for (int i = TIFFTag.MIN_DATATYPE; i <= TIFFTag.MAX_DATATYPE; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   822
            if (typeName.equals(typeNames[i])) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   823
                return i;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   824
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   825
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   826
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   827
        return -1;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   828
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   829
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   830
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   831
     * Creates an array appropriate for the indicated data type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   832
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   833
     * @param dataType One of the {@code TIFFTag.TIFF_*} data type
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   834
     * constants.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   835
     * @param count The number of values in the array.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   836
     * @return An array appropriate for the specified data type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   837
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   838
     * @throws IllegalArgumentException if {@code dataType} is not
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   839
     * one of the {@code TIFFTag.TIFF_*} data type constants.
40135
6f3c43ceb8b3 8149016: Misleading IllegalArgumentException message when a type that is neither LONG nor IFD pointer is supplied to TIFFField constructor
bpb
parents: 38999
diff changeset
   840
     * @throws IllegalArgumentException if {@code count < 0}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   841
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   842
    public static Object createArrayForType(int dataType, int count) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   843
        if(count < 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   844
            throw new IllegalArgumentException("count < 0!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   845
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   846
        switch (dataType) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   847
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   848
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   849
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   850
            return new byte[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   851
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   852
            return new String[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   853
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   854
            return new char[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   855
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   856
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   857
            return new long[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   858
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   859
            return new long[count][2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   860
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   861
            return new short[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   862
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   863
            return new int[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   864
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   865
            return new int[count][2];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   866
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   867
            return new float[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   868
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   869
            return new double[count];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   870
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   871
            throw new IllegalArgumentException("Unknown data type "+dataType);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   872
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   873
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   874
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   875
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   876
     * Returns the {@code TIFFField} as a node named either
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   877
     * <tt>"TIFFField"</tt> or <tt>"TIFFIFD"</tt> as described in the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   878
     * TIFF native image metadata specification. The node will be named
38999
035e9ed4af2c 8149815: Misleading TIFFField#getAsNativeNode spec about native node name "TIFFIFD"
bpb
parents: 38400
diff changeset
   879
     * <tt>"TIFFIFD"</tt> if and only if {@link #hasDirectory()} returns
035e9ed4af2c 8149815: Misleading TIFFField#getAsNativeNode spec about native node name "TIFFIFD"
bpb
parents: 38400
diff changeset
   880
     * {@code true} and the field's type is either {@link TIFFTag#TIFF_LONG}
035e9ed4af2c 8149815: Misleading TIFFField#getAsNativeNode spec about native node name "TIFFIFD"
bpb
parents: 38400
diff changeset
   881
     * or {@link TIFFTag#TIFF_IFD_POINTER}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   882
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   883
     * @return a {@code Node} named <tt>"TIFFField"</tt> or
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   884
     * <tt>"TIFFIFD"</tt>.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   885
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   886
    public Node getAsNativeNode() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   887
        return new TIFFFieldNode(this);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   888
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   889
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   890
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   891
     * Indicates whether the value associated with the field is of
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   892
     * integral data type.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   893
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   894
     * @return Whether the field type is integral.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   895
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   896
    public boolean isIntegral() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   897
        return isIntegral[type];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   898
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   899
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   900
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   901
     * Returns the number of data items present in the field.  For
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   902
     * {@code TIFFTag.TIFF_ASCII} fields, the value returned is the
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   903
     * number of {@code String}s, not the total length of the
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   904
     * data as in the file representation.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   905
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   906
     * @return The number of data items present in the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   907
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   908
    public int getCount() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   909
        return count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   910
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   911
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   912
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   913
     * Returns a reference to the data object associated with the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   914
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   915
     * @return The data object of the field.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   916
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   917
    public Object getData() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   918
        return data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   919
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   920
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   921
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   922
     * Returns the data as an uninterpreted array of
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   923
     * {@code byte}s.  The type of the field must be one of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   924
     * {@code TIFFTag.TIFF_BYTE}, {@code TIFF_SBYTE}, or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   925
     * {@code TIFF_UNDEFINED}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   926
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   927
     * <p> For data in {@code TIFFTag.TIFF_BYTE} format, the application
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   928
     * must take care when promoting the data to longer integral types
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   929
     * to avoid sign extension.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   930
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   931
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   932
     * {@code TIFF_BYTE}, {@code TIFF_SBYTE}, or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   933
     * {@code TIFF_UNDEFINED}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   934
     * @return The data as an uninterpreted array of bytes.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   935
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   936
    public byte[] getAsBytes() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   937
        return (byte[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   938
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   939
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   940
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   941
     * Returns {@code TIFFTag.TIFF_SHORT} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   942
     * {@code char}s (unsigned 16-bit integers).
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   943
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   944
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   945
     * {@code TIFF_SHORT}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   946
     * @return The data as an array of {@code char}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   947
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   948
    public char[] getAsChars() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   949
        return (char[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   950
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   951
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   952
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   953
     * Returns {@code TIFFTag.TIFF_SSHORT} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   954
     * {@code short}s (signed 16-bit integers).
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   955
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   956
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   957
     * {@code TIFF_SSHORT}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   958
     * @return The data as an array of {@code short}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   959
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   960
    public short[] getAsShorts() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   961
        return (short[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   962
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   963
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   964
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   965
     * Returns {@code TIFFTag.TIFF_SLONG} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   966
     * {@code int}s (signed 32-bit integers).
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   967
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   968
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   969
     * {@code TIFF_SHORT}, {@code TIFF_SSHORT}, or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   970
     * {@code TIFF_SLONG}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   971
     * @return The data as an array of {@code int}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   972
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   973
    public int[] getAsInts() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   974
        if (data instanceof int[]) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   975
            return (int[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   976
        } else if (data instanceof char[]){
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   977
            char[] cdata = (char[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   978
            int[] idata = new int[cdata.length];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   979
            for (int i = 0; i < cdata.length; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   980
                idata[i] = cdata[i] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   981
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   982
            return idata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   983
        } else if (data instanceof short[]){
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   984
            short[] sdata = (short[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   985
            int[] idata = new int[sdata.length];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   986
            for (int i = 0; i < sdata.length; i++) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   987
                idata[i] = (int)sdata[i];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   988
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   989
            return idata;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   990
        } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   991
            throw new ClassCastException("Data not char[], short[], or int[]!");
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   992
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   993
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   994
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   995
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   996
     * Returns {@code TIFFTag.TIFF_LONG} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   997
     * {@code TIFF_IFD_POINTER} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
   998
     * {@code long}s (signed 64-bit integers).
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
   999
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1000
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1001
     * {@code TIFF_LONG} or {@code TIFF_IFD_POINTER}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1002
     * @return The data as an array of {@code long}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1003
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1004
    public long[] getAsLongs() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1005
        return (long[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1006
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1007
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1008
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1009
     * Returns {@code TIFFTag.TIFF_FLOAT} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1010
     * {@code float}s (32-bit floating-point values).
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1011
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1012
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1013
     * {@code TIFF_FLOAT}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1014
     * @return The data as an array of {@code float}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1015
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1016
    public float[] getAsFloats() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1017
        return (float[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1018
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1019
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1020
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1021
     * Returns {@code TIFFTag.TIFF_DOUBLE} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1022
     * {@code double}s (64-bit floating-point values).
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1023
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1024
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1025
     * {@code TIFF_DOUBLE}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1026
     * @return The data as an array of {@code double}s.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1027
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1028
    public double[] getAsDoubles() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1029
        return (double[])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1030
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1031
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1032
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1033
     * Returns {@code TIFFTag.TIFF_SRATIONAL} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1034
     * 2-element arrays of {@code int}s.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1035
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1036
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1037
     * {@code TIFF_SRATIONAL}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1038
     * @return The data as an array of signed rationals.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1039
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1040
    public int[][] getAsSRationals() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1041
        return (int[][])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1042
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1043
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1044
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1045
     * Returns {@code TIFFTag.TIFF_RATIONAL} data as an array of
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1046
     * 2-element arrays of {@code long}s.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1047
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1048
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1049
     * {@code TIFF_RATIONAL}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1050
     * @return The data as an array of unsigned rationals.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1051
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1052
    public long[][] getAsRationals() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1053
        return (long[][])data;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1054
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1055
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1056
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1057
     * Returns data in any format as an {@code int}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1058
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1059
     * <p> {@code TIFFTag.TIFF_BYTE} values are treated as unsigned; that
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1060
     * is, no sign extension will take place and the returned value
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1061
     * will be in the range [0, 255].  {@code TIFF_SBYTE} data
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1062
     * will be returned in the range [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1063
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1064
     * <p> A {@code TIFF_UNDEFINED} value is treated as though
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1065
     * it were a {@code TIFF_BYTE}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1066
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1067
     * <p> Data in {@code TIFF_SLONG}, {@code TIFF_LONG},
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1068
     * {@code TIFF_FLOAT}, {@code TIFF_DOUBLE} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1069
     * {@code TIFF_IFD_POINTER} format are simply cast to
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1070
     * {@code int} and may suffer from truncation.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1071
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1072
     * <p> Data in {@code TIFF_SRATIONAL} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1073
     * {@code TIFF_RATIONAL} format are evaluated by dividing the
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1074
     * numerator into the denominator using double-precision
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1075
     * arithmetic and then casting to {@code int}.  Loss of
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1076
     * precision and truncation may occur.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1077
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1078
     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1079
     * the {@code Double.parseDouble} method, with the result
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1080
     * case to {@code int}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1081
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1082
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1083
     * @return The data at the given index as an {@code int}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1084
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1085
    public int getAsInt(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1086
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1087
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1088
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1089
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1090
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1091
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1092
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1093
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1094
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1095
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1096
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1097
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1098
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1099
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1100
            return (int)((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1101
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1102
            return (int)((float[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1103
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1104
            return (int)((double[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1105
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1106
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1107
            return (int)((double)ivalue[0]/ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1108
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1109
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1110
            return (int)((double)lvalue[0]/lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1111
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1112
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1113
             return (int)Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1114
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1115
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1116
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1117
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1118
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1119
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1120
     * Returns data in any format as a {@code long}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1121
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1122
     * <p> {@code TIFFTag.TIFF_BYTE} and {@code TIFF_UNDEFINED} data
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1123
     * are treated as unsigned; that is, no sign extension will take
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1124
     * place and the returned value will be in the range [0, 255].
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1125
     * {@code TIFF_SBYTE} data will be returned in the range
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1126
     * [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1127
     *
38393
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1128
     * <p> Data in {@code TIFF_FLOAT} and {@code TIFF_DOUBLE} are
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1129
     * simply cast to {@code long} and may suffer from truncation.
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1130
     *
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1131
     * <p> Data in {@code TIFF_SRATIONAL} or
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1132
     * {@code TIFF_RATIONAL} format are evaluated by dividing the
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1133
     * numerator into the denominator using double-precision
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1134
     * arithmetic and then casting to {@code long}.  Loss of
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1135
     * precision and truncation may occur.
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1136
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1137
     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1138
     * the {@code Double.parseDouble} method, with the result
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1139
     * cast to {@code long}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1140
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1141
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1142
     * @return The data at the given index as a {@code long}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1143
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1144
    public long getAsLong(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1145
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1146
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1147
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1148
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1149
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1150
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1151
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1152
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1153
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1154
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1155
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1156
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1157
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1158
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1159
            return ((long[])data)[index];
38393
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1160
        case TIFFTag.TIFF_FLOAT:
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1161
            return (long)((float[])data)[index];
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1162
        case TIFFTag.TIFF_DOUBLE:
2e49e69f3d64 8149810: TIFFField#getAsLong throws ClassCastException when data is type TIFFTag.TIFF_DOUBLE or TIFFTag.FLOAT
bpb
parents: 36448
diff changeset
  1163
            return (long)((double[])data)[index];
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1164
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1165
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1166
            return (long)((double)ivalue[0]/ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1167
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1168
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1169
            return (long)((double)lvalue[0]/lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1170
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1171
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1172
             return (long)Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1173
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1174
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1175
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1176
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1177
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1178
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1179
     * Returns data in any format as a {@code float}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1180
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1181
     * <p> {@code TIFFTag.TIFF_BYTE} and {@code TIFF_UNDEFINED} data
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1182
     * are treated as unsigned; that is, no sign extension will take
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1183
     * place and the returned value will be in the range [0, 255].
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1184
     * {@code TIFF_SBYTE} data will be returned in the range
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1185
     * [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1186
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1187
     * <p> Data in {@code TIFF_SLONG}, {@code TIFF_LONG},
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1188
     * {@code TIFF_DOUBLE}, or {@code TIFF_IFD_POINTER} format are
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1189
     * simply cast to {@code float} and may suffer from
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1190
     * truncation.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1191
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1192
     * <p> Data in {@code TIFF_SRATIONAL} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1193
     * {@code TIFF_RATIONAL} format are evaluated by dividing the
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1194
     * numerator into the denominator using double-precision
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1195
     * arithmetic and then casting to {@code float}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1196
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1197
     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1198
     * the {@code Double.parseDouble} method, with the result
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1199
     * cast to {@code float}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1200
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1201
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1202
     * @return The data at the given index as a {@code float}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1203
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1204
    public float getAsFloat(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1205
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1206
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1207
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1208
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1209
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1210
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1211
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1212
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1213
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1214
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1215
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1216
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1217
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1218
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1219
            return ((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1220
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1221
            return ((float[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1222
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1223
            return (float)((double[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1224
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1225
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1226
            return (float)((double)ivalue[0]/ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1227
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1228
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1229
            return (float)((double)lvalue[0]/lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1230
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1231
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1232
             return (float)Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1233
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1234
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1235
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1236
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1237
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1238
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1239
     * Returns data in any format as a {@code double}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1240
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1241
     * <p> {@code TIFFTag.TIFF_BYTE} and {@code TIFF_UNDEFINED} data
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1242
     * are treated as unsigned; that is, no sign extension will take
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1243
     * place and the returned value will be in the range [0, 255].
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1244
     * {@code TIFF_SBYTE} data will be returned in the range
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1245
     * [-128, 127].
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1246
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1247
     * <p> Data in {@code TIFF_SRATIONAL} or
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1248
     * {@code TIFF_RATIONAL} format are evaluated by dividing the
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1249
     * numerator into the denominator using double-precision
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1250
     * arithmetic.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1251
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1252
     * <p> Data in {@code TIFF_ASCII} format will be parsed as by
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1253
     * the {@code Double.parseDouble} method.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1254
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1255
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1256
     * @return The data at the given index as a {@code double}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1257
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1258
    public double getAsDouble(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1259
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1260
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1261
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1262
            return ((byte[])data)[index] & 0xff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1263
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1264
            return ((byte[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1265
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1266
            return ((char[])data)[index] & 0xffff;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1267
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1268
            return ((short[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1269
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1270
            return ((int[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1271
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1272
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1273
            return ((long[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1274
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1275
            return ((float[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1276
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1277
            return ((double[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1278
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1279
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1280
            return (double)ivalue[0]/ivalue[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1281
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1282
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1283
            return (double)lvalue[0]/lvalue[1];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1284
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1285
             String s = ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1286
             return Double.parseDouble(s);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1287
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1288
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1289
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1290
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1291
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1292
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1293
     * Returns a {@code TIFFTag.TIFF_ASCII} value as a
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1294
     * {@code String}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1295
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1296
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1297
     * {@code TIFF_ASCII}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1298
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1299
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1300
     * @return The data at the given index as a {@code String}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1301
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1302
    public String getAsString(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1303
        return ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1304
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1305
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1306
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1307
     * Returns a {@code TIFFTag.TIFF_SRATIONAL} data item as a
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1308
     * two-element array of {@code int}s.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1309
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1310
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1311
     * @return The data at the given index as a signed rational.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1312
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1313
     * {@code TIFF_SRATIONAL}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1314
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1315
    public int[] getAsSRational(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1316
        return ((int[][])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1317
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1318
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1319
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1320
     * Returns a TIFFTag.TIFF_RATIONAL data item as a two-element array
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1321
     * of ints.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1322
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1323
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1324
     * @return The data at the given index as an unsigned rational.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1325
     * @throws ClassCastException if the field is not of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1326
     * {@code TIFF_RATIONAL}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1327
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1328
    public long[] getAsRational(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1329
        return ((long[][])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1330
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1331
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1332
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1333
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1334
     * Returns a {@code String} containing a human-readable
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1335
     * version of the data item.  Data of type
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1336
     * {@code TIFFTag.TIFF_RATIONAL} or {@code TIFF_SRATIONAL} are
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1337
     * represented as a pair of integers separated by a
38400
5b8e864ce0b9 8149816: TIFFField#getValueAsString result is unexpected for RATIONAL and SRATIONAL types (when modulo is 0)
bpb
parents: 38397
diff changeset
  1338
     * {@code '/'} character.  If the numerator of a
5b8e864ce0b9 8149816: TIFFField#getValueAsString result is unexpected for RATIONAL and SRATIONAL types (when modulo is 0)
bpb
parents: 38397
diff changeset
  1339
     * {@code TIFFTag.TIFF_RATIONAL} or {@code TIFF_SRATIONAL} is an integral
5b8e864ce0b9 8149816: TIFFField#getValueAsString result is unexpected for RATIONAL and SRATIONAL types (when modulo is 0)
bpb
parents: 38397
diff changeset
  1340
     * multiple of the denominator, then the value is represented as
5b8e864ce0b9 8149816: TIFFField#getValueAsString result is unexpected for RATIONAL and SRATIONAL types (when modulo is 0)
bpb
parents: 38397
diff changeset
  1341
     * {@code "q/1"} where {@code q} is the quotient of the numerator and
5b8e864ce0b9 8149816: TIFFField#getValueAsString result is unexpected for RATIONAL and SRATIONAL types (when modulo is 0)
bpb
parents: 38397
diff changeset
  1342
     * denominator.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1343
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1344
     * @param index The index of the data.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1345
     * @return The data at the given index as a {@code String}.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1346
     * @throws ClassCastException if the field is not of one of the
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1347
     * legal field types.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1348
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1349
    public String getValueAsString(int index) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1350
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1351
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1352
            return ((String[])data)[index];
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1353
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1354
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1355
            return Integer.toString(((byte[])data)[index] & 0xff);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1356
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1357
            return Integer.toString(((byte[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1358
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1359
            return Integer.toString(((char[])data)[index] & 0xffff);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1360
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1361
            return Integer.toString(((short[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1362
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1363
            return Integer.toString(((int[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1364
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1365
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1366
            return Long.toString(((long[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1367
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1368
            return Float.toString(((float[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1369
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1370
            return Double.toString(((double[])data)[index]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1371
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1372
            int[] ivalue = getAsSRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1373
            String srationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1374
            if(ivalue[1] != 0 && ivalue[0] % ivalue[1] == 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1375
                // If the denominator is a non-zero integral divisor
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1376
                // of the numerator then convert the fraction to be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1377
                // with respect to a unity denominator.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1378
                srationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1379
                    Integer.toString(ivalue[0] / ivalue[1]) + "/1";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1380
            } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1381
                // Use the values directly.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1382
                srationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1383
                    Integer.toString(ivalue[0]) +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1384
                    "/" +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1385
                    Integer.toString(ivalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1386
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1387
            return srationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1388
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1389
            long[] lvalue = getAsRational(index);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1390
            String rationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1391
            if(lvalue[1] != 0L && lvalue[0] % lvalue[1] == 0) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1392
                // If the denominator is a non-zero integral divisor
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1393
                // of the numerator then convert the fraction to be
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1394
                // with respect to a unity denominator.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1395
                rationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1396
                    Long.toString(lvalue[0] / lvalue[1]) + "/1";
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1397
            } else {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1398
                // Use the values directly.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1399
                rationalString =
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1400
                    Long.toString(lvalue[0]) +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1401
                    "/" +
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1402
                    Long.toString(lvalue[1]);
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1403
            }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1404
            return rationalString;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1405
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1406
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1407
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1408
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1409
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1410
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1411
     * Returns whether the field has a {@code TIFFDirectory}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1412
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1413
     * @return true if and only if getDirectory() returns non-null.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1414
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1415
    public boolean hasDirectory() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1416
        return getDirectory() != null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1417
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1418
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1419
    /**
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1420
     * Returns the associated {@code TIFFDirectory}, if available. If no
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1421
     * directory is set, then {@code null} will be returned.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1422
     *
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1423
     * @return the TIFFDirectory instance or null.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1424
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1425
    public TIFFDirectory getDirectory() {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1426
        return dir;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1427
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1428
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1429
    /**
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1430
     * Clones the field and all the information contained therein.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1431
     *
36448
a07e108d5722 8149593: Change <code>foo</code> to {@code foo} in TIFF plugin classes
bpb
parents: 36445
diff changeset
  1432
     * @return A clone of this {@code TIFFField}.
34416
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1433
     * @throws CloneNotSupportedException if the instance cannot be cloned.
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1434
     */
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1435
    @Override
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1436
    public TIFFField clone() throws CloneNotSupportedException {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1437
        TIFFField field = (TIFFField)super.clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1438
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1439
        Object fieldData;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1440
        switch (type) {
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1441
        case TIFFTag.TIFF_BYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1442
        case TIFFTag.TIFF_UNDEFINED:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1443
        case TIFFTag.TIFF_SBYTE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1444
            fieldData = ((byte[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1445
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1446
        case TIFFTag.TIFF_SHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1447
            fieldData = ((char[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1448
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1449
        case TIFFTag.TIFF_SSHORT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1450
            fieldData = ((short[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1451
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1452
        case TIFFTag.TIFF_SLONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1453
            fieldData = ((int[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1454
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1455
        case TIFFTag.TIFF_LONG:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1456
        case TIFFTag.TIFF_IFD_POINTER:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1457
            fieldData = ((long[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1458
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1459
        case TIFFTag.TIFF_FLOAT:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1460
            fieldData = ((float[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1461
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1462
        case TIFFTag.TIFF_DOUBLE:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1463
            fieldData = ((double[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1464
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1465
        case TIFFTag.TIFF_SRATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1466
            fieldData = ((int[][])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1467
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1468
        case TIFFTag.TIFF_RATIONAL:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1469
            fieldData = ((long[][])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1470
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1471
        case TIFFTag.TIFF_ASCII:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1472
            fieldData = ((String[])data).clone();
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1473
            break;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1474
        default:
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1475
            throw new ClassCastException(); // should never happen
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1476
        }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1477
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1478
        field.tag = tag;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1479
        field.tagNumber = tagNumber;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1480
        field.type = type;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1481
        field.count = count;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1482
        field.data = fieldData;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1483
        field.dir = dir != null ? dir.clone() : null;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1484
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1485
        return field;
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1486
    }
68c0d866db5d 8143342: Integrate Java Image I/O support for TIFF per JEP 262
bpb
parents:
diff changeset
  1487
}