1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.imaging.formats.tiff.taginfos;
19
20 import java.nio.ByteOrder;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.apache.commons.imaging.ImagingException;
27 import org.apache.commons.imaging.formats.tiff.TiffField;
28 import org.apache.commons.imaging.formats.tiff.constants.TiffDirectoryType;
29 import org.apache.commons.imaging.formats.tiff.fieldtypes.AbstractFieldType;
30
31 public class TagInfo {
32 public static final int LENGTH_UNKNOWN = -1;
33 public final String name;
34 public final int tag;
35 public final List<AbstractFieldType> dataTypes;
36 public final int length;
37 public final TiffDirectoryType directoryType;
38 private final boolean isOffset;
39
40 public TagInfo(final String name, final int tag, final AbstractFieldType dataType) {
41 this(name, tag, dataType, LENGTH_UNKNOWN, TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
42 }
43
44 public TagInfo(final String name, final int tag, final AbstractFieldType dataType, final int length) {
45 this(name, tag, Arrays.asList(dataType), length, TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
46 }
47
48 public TagInfo(final String name, final int tag, final AbstractFieldType dataType, final int length, final TiffDirectoryType exifDirectory) {
49 this(name, tag, Arrays.asList(dataType), length, exifDirectory);
50 }
51
52 public TagInfo(final String name, final int tag, final AbstractFieldType dataType, final int length, final TiffDirectoryType exifDirectory,
53 final boolean isOffset) {
54 this(name, tag, Arrays.asList(dataType), length, exifDirectory, isOffset);
55 }
56
57 public TagInfo(final String name, final int tag, final List<AbstractFieldType> dataTypes, final int length, final TiffDirectoryType exifDirectory) {
58 this(name, tag, dataTypes, length, exifDirectory, false);
59 }
60
61 public TagInfo(final String name, final int tag, final List<AbstractFieldType> dataTypes, final int length, final TiffDirectoryType exifDirectory,
62 final boolean isOffset) {
63 this.name = name;
64 this.tag = tag;
65 this.dataTypes = Collections.unmodifiableList(new ArrayList<>(dataTypes));
66 this.length = length;
67 this.directoryType = exifDirectory;
68 this.isOffset = isOffset;
69 }
70
71 public byte[] encodeValue(final AbstractFieldType abstractFieldType, final Object value, final ByteOrder byteOrder) throws ImagingException {
72 return abstractFieldType.writeData(value, byteOrder);
73 }
74
75 public String getDescription() {
76 return tag + " (0x" + Integer.toHexString(tag) + ": " + name + "): ";
77 }
78
79
80
81
82
83
84
85 public Object getValue(final TiffField entry) throws ImagingException {
86 return entry.getFieldType().getValue(entry);
87 }
88
89 public boolean isOffset() {
90 return isOffset;
91 }
92
93 public boolean isText() {
94 return false;
95 }
96
97 @Override
98 public String toString() {
99 return "[TagInfo. tag: " + tag + " (0x" + Integer.toHexString(tag) + ", name: " + name + "]";
100 }
101 }