package comeon.model.processors;
import com.drew.metadata.Directory;
import com.drew.metadata.iptc.IptcDirectory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.DateTimeException;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
public final class IptcPreProcessor implements PreProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(IptcPreProcessor.class);
public static final String DATE = "date";
public static final String KEYWORDS = "keywords";
private static final DateTimeFormatter IPTC_DATE_TIME_PARSER = DateTimeFormatter.ofPattern("[uuuuMMdd]:[HHmmss[Z]]", Locale.ENGLISH);
private static final DateTimeFormatter METADATA_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("[uuuu-MM-dd] [HH:mm:ss]", Locale.ENGLISH);
@Override
public void process(final Directory directory, final Map<String, Object> metadata) {
final String[] keywords = directory.getStringArray(IptcDirectory.TAG_KEYWORDS);
metadata.put(KEYWORDS, keywords);
final Optional<String> iptcDate = Optional.ofNullable(directory.getString(IptcDirectory.TAG_DIGITAL_DATE_CREATED));
final Optional<String> iptcTime = Optional.ofNullable(directory.getString(IptcDirectory.TAG_DIGITAL_TIME_CREATED));
final StringBuilder buf = new StringBuilder();
iptcDate.ifPresent(buf::append);
buf.append(':');
iptcTime.ifPresent(buf::append);
try {
final TemporalAccessor iptcDateTime = IPTC_DATE_TIME_PARSER.parse(buf);
metadata.put(DATE, METADATA_DATE_TIME_FORMATTER.format(iptcDateTime).trim());
} catch (final DateTimeException e) {
LOGGER.info("Can't handle date", e);
}
}
@Override
public Class<IptcDirectory> getSupportedClass() {
return IptcDirectory.class;
}
}