blob: 25be769275dae3967402b67012865ce7949f678a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.drill.exec.store.image;
import java.util.HashMap;
import com.drew.metadata.Directory;
import com.drew.metadata.exif.ExifInteropDirectory;
import com.drew.metadata.exif.ExifSubIFDDirectory;
import com.drew.metadata.exif.PanasonicRawIFD0Directory;
import com.drew.metadata.exif.makernotes.FujifilmMakernoteDirectory;
import com.drew.metadata.exif.makernotes.NikonType2MakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusCameraSettingsMakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusEquipmentMakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusFocusInfoMakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusImageProcessingMakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusMakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusRawDevelopment2MakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusRawDevelopmentMakernoteDirectory;
import com.drew.metadata.exif.makernotes.OlympusRawInfoMakernoteDirectory;
import com.drew.metadata.exif.makernotes.PanasonicMakernoteDirectory;
import com.drew.metadata.exif.makernotes.SamsungType2MakernoteDirectory;
import com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory;
import com.drew.metadata.icc.IccDirectory;
import com.drew.metadata.photoshop.PhotoshopDirectory;
import com.drew.metadata.png.PngDirectory;
public class ImageMetadataUtils {
public static boolean isVarchar(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
// Format,Color Mode,Video Codec,Audio Codec
return name.equals(tags.get(GenericMetadataDirectory.TAG_FORMAT))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_COLOR_MODE))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_VIDEO_CODEC))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_AUDIO_CODEC));
}
public static boolean isInt(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
// Pixel Width,Pixel Height,Orientation,Bits Per Pixel,Audio Sample Size
return name.equals(tags.get(GenericMetadataDirectory.TAG_PIXEL_WIDTH))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_PIXEL_HEIGHT))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_ORIENTATION))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_BITS_PER_PIXEL))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_AUDIO_SAMPLE_SIZE));
}
public static boolean isLong(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
// File Size,Duration
return name.equals(tags.get(GenericMetadataDirectory.TAG_FILE_SIZE))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_DURATION));
}
public static boolean isDouble(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
// DPI Width,DPI Height,Frame Rate,Audio Sample Rate
return name.equals(tags.get(GenericMetadataDirectory.TAG_DPI_WIDTH))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_DPI_HEIGHT))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_FRAME_RATE))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_AUDIO_SAMPLE_RATE));
}
public static boolean isBoolean(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
// Has Alpha
return name.equals(tags.get(GenericMetadataDirectory.TAG_HAS_ALPHA));
}
public static boolean isDate(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
// File Date Time
return name.equals(tags.get(GenericMetadataDirectory.TAG_FILE_DATE_TIME));
}
/**
* Format the tag name (remove the spaces and special characters)
* @param tagName
* @return
*/
public static String formatName(final String tagName) {
StringBuilder builder = new StringBuilder();
boolean upperCase = true;
for (char c : tagName.toCharArray()) {
if (c == ' ' || c == '-' || c == '/') {
upperCase = true;
} else {
builder.append(upperCase ? Character.toUpperCase(c) : c);
upperCase = false;
}
}
return builder.toString();
}
/**
* Skip the tag if parameter (fileSystemMetadata) is false
* @param name
* @return
*/
public static boolean isSkipTag(String name) {
HashMap<Integer, String> tags = GenericMetadataDirectory._tagNameMap;
return name.equals(tags.get(GenericMetadataDirectory.TAG_FILE_SIZE))
|| name.equals(tags.get(GenericMetadataDirectory.TAG_FILE_DATE_TIME));
}
public static boolean isDescriptionTag(final Directory directory, final int tagType) {
return directory instanceof IccDirectory
&& tagType > 0x20202020
&& tagType < 0x7a7a7a7a
|| directory instanceof PhotoshopDirectory;
}
public static boolean isVersionTag(final Directory directory, final int tagType) {
return directory instanceof ExifSubIFDDirectory &&
(tagType == ExifSubIFDDirectory.TAG_EXIF_VERSION || tagType == ExifSubIFDDirectory.TAG_FLASHPIX_VERSION) ||
directory instanceof ExifInteropDirectory &&
tagType == ExifInteropDirectory.TAG_INTEROP_VERSION ||
directory instanceof FujifilmMakernoteDirectory &&
tagType == FujifilmMakernoteDirectory.TAG_MAKERNOTE_VERSION ||
directory instanceof NikonType2MakernoteDirectory &&
tagType == NikonType2MakernoteDirectory.TAG_FIRMWARE_VERSION ||
directory instanceof OlympusCameraSettingsMakernoteDirectory &&
tagType == OlympusCameraSettingsMakernoteDirectory.TagCameraSettingsVersion ||
directory instanceof OlympusEquipmentMakernoteDirectory &&
tagType == OlympusEquipmentMakernoteDirectory.TAG_EQUIPMENT_VERSION ||
directory instanceof OlympusFocusInfoMakernoteDirectory &&
tagType == OlympusFocusInfoMakernoteDirectory.TagFocusInfoVersion ||
directory instanceof OlympusImageProcessingMakernoteDirectory &&
tagType == OlympusImageProcessingMakernoteDirectory.TagImageProcessingVersion ||
directory instanceof OlympusMakernoteDirectory &&
tagType == OlympusMakernoteDirectory.TAG_MAKERNOTE_VERSION ||
directory instanceof OlympusRawDevelopment2MakernoteDirectory &&
tagType == OlympusRawDevelopment2MakernoteDirectory.TagRawDevVersion ||
directory instanceof OlympusRawDevelopmentMakernoteDirectory &&
tagType == OlympusRawDevelopmentMakernoteDirectory.TagRawDevVersion ||
directory instanceof OlympusRawInfoMakernoteDirectory &&
tagType == OlympusRawInfoMakernoteDirectory.TagRawInfoVersion ||
directory instanceof PanasonicMakernoteDirectory &&
(tagType == PanasonicMakernoteDirectory.TAG_FIRMWARE_VERSION
|| tagType == PanasonicMakernoteDirectory.TAG_MAKERNOTE_VERSION
|| tagType == PanasonicMakernoteDirectory.TAG_EXIF_VERSION) ||
directory instanceof SamsungType2MakernoteDirectory &&
tagType == SamsungType2MakernoteDirectory.TagMakerNoteVersion ||
directory instanceof SonyType6MakernoteDirectory &&
tagType == SonyType6MakernoteDirectory.TAG_MAKERNOTE_THUMB_VERSION ||
directory instanceof PanasonicRawIFD0Directory &&
tagType == PanasonicRawIFD0Directory.TagPanasonicRawVersion;
}
public static boolean isDateTag(final Directory directory, final int tagType) {
return directory instanceof IccDirectory && tagType == IccDirectory.TAG_PROFILE_DATETIME
|| directory instanceof PngDirectory && tagType == PngDirectory.TAG_LAST_MODIFICATION_TIME;
}
}