blob: 1091cab9bb2a272662f4d8aefb9aef93f9c8d448 [file] [log] [blame]
/*
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.imageio.plugins.tiff;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.imageio.metadata.IIOMetadataFormat;
public abstract class TIFFMetadataFormat implements IIOMetadataFormat {
protected Map<String,TIFFElementInfo> elementInfoMap = new HashMap<String,TIFFElementInfo>();
protected Map<String,TIFFAttrInfo> attrInfoMap = new HashMap<String,TIFFAttrInfo>();
protected String resourceBaseName;
protected String rootName;
public String getRootName() {
return rootName;
}
private String getResource(String key, Locale locale) {
if (locale == null) {
locale = Locale.getDefault();
}
try {
ResourceBundle bundle =
ResourceBundle.getBundle(resourceBaseName, locale,
this.getClass().getModule());
return bundle.getString(key);
} catch (MissingResourceException e) {
return null;
}
}
private TIFFElementInfo getElementInfo(String elementName) {
if (elementName == null) {
throw new NullPointerException("elementName == null!");
}
TIFFElementInfo info =
elementInfoMap.get(elementName);
if (info == null) {
throw new IllegalArgumentException("No such element: " +
elementName);
}
return info;
}
private TIFFAttrInfo getAttrInfo(String elementName, String attrName) {
if (elementName == null) {
throw new NullPointerException("elementName == null!");
}
if (attrName == null) {
throw new NullPointerException("attrName == null!");
}
String key = elementName + "/" + attrName;
TIFFAttrInfo info = attrInfoMap.get(key);
if (info == null) {
throw new IllegalArgumentException("No such attribute: " + key);
}
return info;
}
public int getElementMinChildren(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
return info.minChildren;
}
public int getElementMaxChildren(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
return info.maxChildren;
}
public String getElementDescription(String elementName, Locale locale) {
if (!elementInfoMap.containsKey(elementName)) {
throw new IllegalArgumentException("No such element: " +
elementName);
}
return getResource(elementName, locale);
}
public int getChildPolicy(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
return info.childPolicy;
}
public String[] getChildNames(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
return info.childNames;
}
public String[] getAttributeNames(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
return info.attributeNames;
}
public int getAttributeValueType(String elementName, String attrName) {
TIFFAttrInfo info = getAttrInfo(elementName, attrName);
return info.valueType;
}
public int getAttributeDataType(String elementName, String attrName) {
TIFFAttrInfo info = getAttrInfo(elementName, attrName);
return info.dataType;
}
public boolean isAttributeRequired(String elementName, String attrName) {
TIFFAttrInfo info = getAttrInfo(elementName, attrName);
return info.isRequired;
}
public String getAttributeDefaultValue(String elementName,
String attrName) {
return null;
}
public String[] getAttributeEnumerations(String elementName,
String attrName) {
throw new IllegalArgumentException("The attribute is not an enumeration.");
}
public String getAttributeMinValue(String elementName, String attrName) {
throw new IllegalArgumentException("The attribute is not a range.");
}
public String getAttributeMaxValue(String elementName, String attrName) {
throw new IllegalArgumentException("The attribute is not a range.");
}
public int getAttributeListMinLength(String elementName, String attrName) {
TIFFAttrInfo info = getAttrInfo(elementName, attrName);
return info.listMinLength;
}
public int getAttributeListMaxLength(String elementName, String attrName) {
TIFFAttrInfo info = getAttrInfo(elementName, attrName);
return info.listMaxLength;
}
public String getAttributeDescription(String elementName, String attrName,
Locale locale) {
String key = elementName + "/" + attrName;
if (!attrInfoMap.containsKey(key)) {
throw new IllegalArgumentException("No such attribute: " + key);
}
return getResource(key, locale);
}
public int getObjectValueType(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
return info.objectValueType;
}
public Class<?> getObjectClass(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectClass;
}
public Object getObjectDefaultValue(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectDefaultValue;
}
public Object[] getObjectEnumerations(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectEnumerations;
}
public Comparable<Object> getObjectMinValue(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectMinValue;
}
public Comparable<Object> getObjectMaxValue(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectMaxValue;
}
public int getObjectArrayMinLength(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectArrayMinLength;
}
public int getObjectArrayMaxLength(String elementName) {
TIFFElementInfo info = getElementInfo(elementName);
if (info.objectValueType == VALUE_NONE) {
throw new IllegalArgumentException(
"Element cannot contain an object value: " + elementName);
}
return info.objectArrayMaxLength;
}
public TIFFMetadataFormat() {}
}