source: josm/trunk/src/com/drew/metadata/tiff/DirectoryTiffHandler.java@ 11218

Last change on this file since 11218 was 10862, checked in by Don-vip, 9 years ago

update to metadata-extractor 2.9.1

File size: 5.8 KB
Line 
1/*
2 * Copyright 2002-2016 Drew Noakes
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * More information about this project is available at:
17 *
18 * https://drewnoakes.com/code/exif/
19 * https://github.com/drewnoakes/metadata-extractor
20 */
21package com.drew.metadata.tiff;
22
23import com.drew.imaging.tiff.TiffHandler;
24import com.drew.lang.Rational;
25import com.drew.lang.annotations.NotNull;
26import com.drew.metadata.Directory;
27import com.drew.metadata.Metadata;
28
29import java.util.Stack;
30
31/**
32 * Adapter between the {@link TiffHandler} interface and the {@link Metadata}/{@link Directory} object model.
33 *
34 * @author Drew Noakes https://drewnoakes.com
35 */
36public abstract class DirectoryTiffHandler implements TiffHandler
37{
38 private final Stack<Directory> _directoryStack = new Stack<Directory>();
39
40 protected Directory _currentDirectory;
41 protected final Metadata _metadata;
42
43 protected DirectoryTiffHandler(Metadata metadata, Class<? extends Directory> initialDirectoryClass)
44 {
45 _metadata = metadata;
46 try {
47 _currentDirectory = initialDirectoryClass.newInstance();
48 } catch (InstantiationException e) {
49 throw new RuntimeException(e);
50 } catch (IllegalAccessException e) {
51 throw new RuntimeException(e);
52 }
53 _metadata.addDirectory(_currentDirectory);
54 }
55
56 public void endingIFD()
57 {
58 _currentDirectory = _directoryStack.empty() ? null : _directoryStack.pop();
59 }
60
61 protected void pushDirectory(@NotNull Class<? extends Directory> directoryClass)
62 {
63 _directoryStack.push(_currentDirectory);
64 try {
65 Directory newDirectory = directoryClass.newInstance();
66 newDirectory.setParent(_currentDirectory);
67 _currentDirectory = newDirectory;
68 } catch (InstantiationException e) {
69 throw new RuntimeException(e);
70 } catch (IllegalAccessException e) {
71 throw new RuntimeException(e);
72 }
73 _metadata.addDirectory(_currentDirectory);
74 }
75
76 public void warn(@NotNull String message)
77 {
78 _currentDirectory.addError(message);
79 }
80
81 public void error(@NotNull String message)
82 {
83 _currentDirectory.addError(message);
84 }
85
86 public void setByteArray(int tagId, @NotNull byte[] bytes)
87 {
88 _currentDirectory.setByteArray(tagId, bytes);
89 }
90
91 public void setString(int tagId, @NotNull String string)
92 {
93 _currentDirectory.setString(tagId, string);
94 }
95
96 public void setRational(int tagId, @NotNull Rational rational)
97 {
98 _currentDirectory.setRational(tagId, rational);
99 }
100
101 public void setRationalArray(int tagId, @NotNull Rational[] array)
102 {
103 _currentDirectory.setRationalArray(tagId, array);
104 }
105
106 public void setFloat(int tagId, float float32)
107 {
108 _currentDirectory.setFloat(tagId, float32);
109 }
110
111 public void setFloatArray(int tagId, @NotNull float[] array)
112 {
113 _currentDirectory.setFloatArray(tagId, array);
114 }
115
116 public void setDouble(int tagId, double double64)
117 {
118 _currentDirectory.setDouble(tagId, double64);
119 }
120
121 public void setDoubleArray(int tagId, @NotNull double[] array)
122 {
123 _currentDirectory.setDoubleArray(tagId, array);
124 }
125
126 public void setInt8s(int tagId, byte int8s)
127 {
128 // NOTE Directory stores all integral types as int32s, except for int32u and long
129 _currentDirectory.setInt(tagId, int8s);
130 }
131
132 public void setInt8sArray(int tagId, @NotNull byte[] array)
133 {
134 // NOTE Directory stores all integral types as int32s, except for int32u and long
135 _currentDirectory.setByteArray(tagId, array);
136 }
137
138 public void setInt8u(int tagId, short int8u)
139 {
140 // NOTE Directory stores all integral types as int32s, except for int32u and long
141 _currentDirectory.setInt(tagId, int8u);
142 }
143
144 public void setInt8uArray(int tagId, @NotNull short[] array)
145 {
146 // TODO create and use a proper setter for short[]
147 _currentDirectory.setObjectArray(tagId, array);
148 }
149
150 public void setInt16s(int tagId, int int16s)
151 {
152 // TODO create and use a proper setter for int16u?
153 _currentDirectory.setInt(tagId, int16s);
154 }
155
156 public void setInt16sArray(int tagId, @NotNull short[] array)
157 {
158 // TODO create and use a proper setter for short[]
159 _currentDirectory.setObjectArray(tagId, array);
160 }
161
162 public void setInt16u(int tagId, int int16u)
163 {
164 // TODO create and use a proper setter for
165 _currentDirectory.setInt(tagId, int16u);
166 }
167
168 public void setInt16uArray(int tagId, @NotNull int[] array)
169 {
170 // TODO create and use a proper setter for short[]
171 _currentDirectory.setObjectArray(tagId, array);
172 }
173
174 public void setInt32s(int tagId, int int32s)
175 {
176 _currentDirectory.setInt(tagId, int32s);
177 }
178
179 public void setInt32sArray(int tagId, @NotNull int[] array)
180 {
181 _currentDirectory.setIntArray(tagId, array);
182 }
183
184 public void setInt32u(int tagId, long int32u)
185 {
186 _currentDirectory.setLong(tagId, int32u);
187 }
188
189 public void setInt32uArray(int tagId, @NotNull long[] array)
190 {
191 // TODO create and use a proper setter for short[]
192 _currentDirectory.setObjectArray(tagId, array);
193 }
194}
Note: See TracBrowser for help on using the repository browser.