1 /* 2 * Copyright (c) 2001, 2018, 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.gif; 27 28 import java.util.Arrays; 29 import javax.imageio.ImageTypeSpecifier; 30 import javax.imageio.metadata.IIOMetadataFormat; 31 import javax.imageio.metadata.IIOMetadataFormatImpl; 32 33 public class GIFImageMetadataFormat extends IIOMetadataFormatImpl { 34 35 private static IIOMetadataFormat instance = null; 36 GIFImageMetadataFormat()37 private GIFImageMetadataFormat() { 38 super(GIFImageMetadata.nativeMetadataFormatName, 39 CHILD_POLICY_SOME); 40 41 // root -> ImageDescriptor 42 addElement("ImageDescriptor", 43 GIFImageMetadata.nativeMetadataFormatName, 44 CHILD_POLICY_EMPTY); 45 addAttribute("ImageDescriptor", "imageLeftPosition", 46 DATATYPE_INTEGER, true, null, 47 "0", "65535", true, true); 48 addAttribute("ImageDescriptor", "imageTopPosition", 49 DATATYPE_INTEGER, true, null, 50 "0", "65535", true, true); 51 addAttribute("ImageDescriptor", "imageWidth", 52 DATATYPE_INTEGER, true, null, 53 "1", "65535", true, true); 54 addAttribute("ImageDescriptor", "imageHeight", 55 DATATYPE_INTEGER, true, null, 56 "1", "65535", true, true); 57 addBooleanAttribute("ImageDescriptor", "interlaceFlag", 58 false, false); 59 60 // root -> LocalColorTable 61 addElement("LocalColorTable", 62 GIFImageMetadata.nativeMetadataFormatName, 63 2, 256); 64 addAttribute("LocalColorTable", "sizeOfLocalColorTable", 65 DATATYPE_INTEGER, true, null, 66 Arrays.asList(GIFStreamMetadata.colorTableSizes)); 67 addBooleanAttribute("LocalColorTable", "sortFlag", 68 false, false); 69 70 // root -> LocalColorTable -> ColorTableEntry 71 addElement("ColorTableEntry", "LocalColorTable", 72 CHILD_POLICY_EMPTY); 73 addAttribute("ColorTableEntry", "index", 74 DATATYPE_INTEGER, true, null, 75 "0", "255", true, true); 76 addAttribute("ColorTableEntry", "red", 77 DATATYPE_INTEGER, true, null, 78 "0", "255", true, true); 79 addAttribute("ColorTableEntry", "green", 80 DATATYPE_INTEGER, true, null, 81 "0", "255", true, true); 82 addAttribute("ColorTableEntry", "blue", 83 DATATYPE_INTEGER, true, null, 84 "0", "255", true, true); 85 86 // root -> GraphicControlExtension 87 addElement("GraphicControlExtension", 88 GIFImageMetadata.nativeMetadataFormatName, 89 CHILD_POLICY_EMPTY); 90 addAttribute("GraphicControlExtension", "disposalMethod", 91 DATATYPE_STRING, true, null, 92 Arrays.asList(GIFImageMetadata.disposalMethodNames)); 93 addBooleanAttribute("GraphicControlExtension", "userInputFlag", 94 false, false); 95 addBooleanAttribute("GraphicControlExtension", "transparentColorFlag", 96 false, false); 97 addAttribute("GraphicControlExtension", "delayTime", 98 DATATYPE_INTEGER, true, null, 99 "0", "65535", true, true); 100 addAttribute("GraphicControlExtension", "transparentColorIndex", 101 DATATYPE_INTEGER, true, null, 102 "0", "255", true, true); 103 104 // root -> PlainTextExtension 105 addElement("PlainTextExtension", 106 GIFImageMetadata.nativeMetadataFormatName, 107 CHILD_POLICY_EMPTY); 108 addAttribute("PlainTextExtension", "textGridLeft", 109 DATATYPE_INTEGER, true, null, 110 "0", "65535", true, true); 111 addAttribute("PlainTextExtension", "textGridTop", 112 DATATYPE_INTEGER, true, null, 113 "0", "65535", true, true); 114 addAttribute("PlainTextExtension", "textGridWidth", 115 DATATYPE_INTEGER, true, null, 116 "1", "65535", true, true); 117 addAttribute("PlainTextExtension", "textGridHeight", 118 DATATYPE_INTEGER, true, null, 119 "1", "65535", true, true); 120 addAttribute("PlainTextExtension", "characterCellWidth", 121 DATATYPE_INTEGER, true, null, 122 "1", "255", true, true); 123 addAttribute("PlainTextExtension", "characterCellHeight", 124 DATATYPE_INTEGER, true, null, 125 "1", "255", true, true); 126 addAttribute("PlainTextExtension", "textForegroundColor", 127 DATATYPE_INTEGER, true, null, 128 "0", "255", true, true); 129 addAttribute("PlainTextExtension", "textBackgroundColor", 130 DATATYPE_INTEGER, true, null, 131 "0", "255", true, true); 132 133 // root -> ApplicationExtensions 134 addElement("ApplicationExtensions", 135 GIFImageMetadata.nativeMetadataFormatName, 136 1, Integer.MAX_VALUE); 137 138 // root -> ApplicationExtensions -> ApplicationExtension 139 addElement("ApplicationExtension", "ApplicationExtensions", 140 CHILD_POLICY_EMPTY); 141 addAttribute("ApplicationExtension", "applicationID", 142 DATATYPE_STRING, true, null); 143 addAttribute("ApplicationExtension", "authenticationCode", 144 DATATYPE_STRING, true, null); 145 addObjectValue("ApplicationExtension", byte.class, 146 0, Integer.MAX_VALUE); 147 148 // root -> CommentExtensions 149 addElement("CommentExtensions", 150 GIFImageMetadata.nativeMetadataFormatName, 151 1, Integer.MAX_VALUE); 152 153 // root -> CommentExtensions -> CommentExtension 154 addElement("CommentExtension", "CommentExtensions", 155 CHILD_POLICY_EMPTY); 156 addAttribute("CommentExtension", "value", 157 DATATYPE_STRING, true, null); 158 } 159 canNodeAppear(String elementName, ImageTypeSpecifier imageType)160 public boolean canNodeAppear(String elementName, 161 ImageTypeSpecifier imageType) { 162 return true; 163 } 164 getInstance()165 public static synchronized IIOMetadataFormat getInstance() { 166 if (instance == null) { 167 instance = new GIFImageMetadataFormat(); 168 } 169 return instance; 170 } 171 } 172