History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java+157−0
@@ -0,0 +1,157 @@
1+/*
2+ * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package com.sun.imageio.plugins.jpeg;
27+
28+import javax.imageio.metadata.IIOMetadataFormat;
29+import javax.imageio.metadata.IIOMetadataFormatImpl;
30+import javax.imageio.ImageTypeSpecifier;
31+import javax.imageio.plugins.jpeg.JPEGQTable;
32+import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
33+
34+import java.util.List;
35+import java.util.ArrayList;
36+
37+abstract class JPEGMetadataFormat extends IIOMetadataFormatImpl {
38+ // 2-byte length reduces max to 65533
39+ private static final int MAX_JPEG_DATA_SIZE = 65533;
40+
41+ String resourceBaseName = this.getClass().getName() + "Resources";
42+
43+ JPEGMetadataFormat(String formatName, int childPolicy) {
44+ super(formatName, childPolicy);
45+ setResourceBaseName(resourceBaseName);
46+ }
47+
48+ // Format shared between image and stream formats
49+ void addStreamElements(String parentName) {
50+ addElement("dqt", parentName, 1, 4);
51+
52+ addElement("dqtable", "dqt", CHILD_POLICY_EMPTY);
53+
54+ addAttribute("dqtable",
55+ "elementPrecision",
56+ DATATYPE_INTEGER,
57+ false,
58+ "0");
59+ List tabids = new ArrayList();
60+ tabids.add("0");
61+ tabids.add("1");
62+ tabids.add("2");
63+ tabids.add("3");
64+ addAttribute("dqtable",
65+ "qtableId",
66+ DATATYPE_INTEGER,
67+ true,
68+ null,
69+ tabids);
70+ addObjectValue("dqtable",
71+ JPEGQTable.class,
72+ true,
73+ null);
74+
75+ addElement("dht", parentName, 1, 4);
76+ addElement("dhtable", "dht", CHILD_POLICY_EMPTY);
77+ List classes = new ArrayList();
78+ classes.add("0");
79+ classes.add("1");
80+ addAttribute("dhtable",
81+ "class",
82+ DATATYPE_INTEGER,
83+ true,
84+ null,
85+ classes);
86+ addAttribute("dhtable",
87+ "htableId",
88+ DATATYPE_INTEGER,
89+ true,
90+ null,
91+ tabids);
92+ addObjectValue("dhtable",
93+ JPEGHuffmanTable.class,
94+ true,
95+ null);
96+
97+
98+ addElement("dri", parentName, CHILD_POLICY_EMPTY);
99+ addAttribute("dri",
100+ "interval",
101+ DATATYPE_INTEGER,
102+ true,
103+ null,
104+ "0", "65535",
105+ true, true);
106+
107+ addElement("com", parentName, CHILD_POLICY_EMPTY);
108+ addAttribute("com",
109+ "comment",
110+ DATATYPE_STRING,
111+ false,
112+ null);
113+ addObjectValue("com", byte[].class, 1, MAX_JPEG_DATA_SIZE);
114+
115+ addElement("unknown", parentName, CHILD_POLICY_EMPTY);
116+ addAttribute("unknown",
117+ "MarkerTag",
118+ DATATYPE_INTEGER,
119+ true,
120+ null,
121+ "0", "255",
122+ true, true);
123+ addObjectValue("unknown", byte[].class, 1, MAX_JPEG_DATA_SIZE);
124+ }
125+
126+ public boolean canNodeAppear(String elementName,
127+ ImageTypeSpecifier imageType) {
128+ // Just check if it appears in the format
129+ if (isInSubtree(elementName, getRootName())){
130+ return true;
131+ }
132+ return false;
133+ }
134+
135+ /**
136+ * Returns <code>true</code> if the named element occurs in the
137+ * subtree of the format starting with the node named by
138+ * <code>subtreeName</code>, including the node
139+ * itself. <code>subtreeName</code> may be any node in
140+ * the format. If it is not, an
141+ * <code>IllegalArgumentException</code> is thrown.
142+ */
143+ protected boolean isInSubtree(String elementName,
144+ String subtreeName) {
145+ if (elementName.equals(subtreeName)) {
146+ return true;
147+ }
148+ String [] children = getChildNames(elementName);
149+ for (int i=0; i < children.length; i++) {
150+ if (isInSubtree(elementName, children[i])) {
151+ return true;
152+ }
153+ }
154+ return false;
155+ }
156+
157+}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t