package org.jabref.logic.importer.fileformat; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Path; import java.util.Objects; import org.jabref.logic.importer.Importer; import org.jabref.logic.importer.ParserResult; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.FileExtensions; import org.jabref.logic.xmp.XMPPreferences; import org.jabref.logic.xmp.XMPUtil; /** * Wraps the XMPUtility function to be used as an Importer. */ public class PdfXmpImporter extends Importer { private final XMPPreferences xmpPreferences; public PdfXmpImporter(XMPPreferences xmpPreferences) { this.xmpPreferences = xmpPreferences; } @Override public String getName() { return Localization.lang("XMP-annotated PDF"); } @Override public FileExtensions getExtensions() { return FileExtensions.XMP; } @Override public ParserResult importDatabase(BufferedReader reader) throws IOException { Objects.requireNonNull(reader); throw new UnsupportedOperationException( "PdfXmpImporter does not support importDatabase(BufferedReader reader)." + "Instead use importDatabase(Path filePath, Charset defaultEncoding)."); } @Override public ParserResult importDatabase(Path filePath, Charset defaultEncoding) { Objects.requireNonNull(filePath); try { return new ParserResult(XMPUtil.readXMP(filePath, xmpPreferences)); } catch (IOException exception) { return ParserResult.fromError(exception); } } @Override public boolean isRecognizedFormat(BufferedReader reader) throws IOException { Objects.requireNonNull(reader); throw new UnsupportedOperationException( "PdfXmpImporter does not support isRecognizedFormat(BufferedReader reader)." + "Instead use isRecognizedFormat(Path filePath, Charset defaultEncoding)."); } /** * Returns whether the given stream contains data that is a.) a pdf and b.) * contains at least one BibEntry. */ @Override public boolean isRecognizedFormat(Path filePath, Charset defaultEncoding) throws IOException { Objects.requireNonNull(filePath); return XMPUtil.hasMetadata(filePath, xmpPreferences); } @Override public String getId() { return "xmp"; } @Override public String getDescription() { return "Wraps the XMPUtility function to be used as an Importer."; } }