SciPublications: Basisstruktur für BibTeX-Importer
git-svn-id: https://svn.libreccm.org/ccm/trunk@2040 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
00bde55770
commit
3532cf9a9d
Binary file not shown.
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.bibtex;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
import com.arsdigita.cms.contenttypes.PublicationBundle;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
|
||||||
|
import org.jbibtex.BibTeXEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* @param <B>
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public interface BibTeXConverter<T extends Publication, B extends PublicationBundle> {
|
||||||
|
|
||||||
|
T createPublication(boolean pretend);
|
||||||
|
|
||||||
|
B createBundle(T publication, boolean pretend);
|
||||||
|
|
||||||
|
void processFields(final BibTeXEntry bibTeXEntry,
|
||||||
|
final T publication,
|
||||||
|
final ImporterUtil importerUtil,
|
||||||
|
final PublicationImportReport importReport,
|
||||||
|
final boolean pretend);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the supported BibTeX type.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String getBibTeXType();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.bibtex;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.jbibtex.BibTeXEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Central access point for retrieving {@link BibTeXConverter}s for importing publication data in the BibTeX format.
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class BibTeXConverters {
|
||||||
|
|
||||||
|
private final static Logger LOGGER = Logger.getLogger(BibTeXConverters.class);
|
||||||
|
private final Map<String, BibTeXConverter<?, ?>> converters = new HashMap<String, BibTeXConverter<?, ?>>();
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
private BibTeXConverters() {
|
||||||
|
LOGGER.debug("Loading BibTeX converters...");
|
||||||
|
final ServiceLoader<BibTeXConverter> converterServices = ServiceLoader.load(BibTeXConverter.class);
|
||||||
|
|
||||||
|
for(BibTeXConverter converter : converterServices) {
|
||||||
|
LOGGER.debug(String.format("Found converter for BibTeX type '%s'.", converter.getBibTeXType()));
|
||||||
|
|
||||||
|
converters.put(converter.getBibTeXType(), converter);
|
||||||
|
}
|
||||||
|
LOGGER.debug(String.format("Found %d BibTeX converters.", converters.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Instance {
|
||||||
|
|
||||||
|
private static BibTeXConverters INSTANCE = new BibTeXConverters();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BibTeXConverters getInstance() {
|
||||||
|
return Instance.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PublicationImportReport convert(final BibTeXEntry bibTeXEntry,
|
||||||
|
final ImporterUtil importerUtil,
|
||||||
|
final boolean pretend,
|
||||||
|
final boolean publishNewItems) {
|
||||||
|
final PublicationImportReport report = new PublicationImportReport();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -4,10 +4,16 @@ import com.arsdigita.cms.scipublications.imexporter.PublicationFormat;
|
||||||
import com.arsdigita.cms.scipublications.importer.SciPublicationsImportException;
|
import com.arsdigita.cms.scipublications.importer.SciPublicationsImportException;
|
||||||
import com.arsdigita.cms.scipublications.importer.SciPublicationsImporter;
|
import com.arsdigita.cms.scipublications.importer.SciPublicationsImporter;
|
||||||
import com.arsdigita.cms.scipublications.importer.report.ImportReport;
|
import com.arsdigita.cms.scipublications.importer.report.ImportReport;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
|
||||||
|
import java.io.StringReader;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.activation.MimeType;
|
import javax.activation.MimeType;
|
||||||
import javax.activation.MimeTypeParseException;
|
import javax.activation.MimeTypeParseException;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.jbibtex.BibTeXDatabase;
|
||||||
|
import org.jbibtex.BibTeXEntry;
|
||||||
|
import org.jbibtex.BibTeXParser;
|
||||||
|
import org.jbibtex.Key;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -27,15 +33,27 @@ public class BibTeXPublicationsImporter implements SciPublicationsImporter {
|
||||||
return new PublicationFormat("BibTeX", null, "bib");
|
return new PublicationFormat("BibTeX", null, "bib");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImportReport importPublications(final String publications,
|
public ImportReport importPublications(final String publications,
|
||||||
final Map<String, String> importerParams,
|
final Map<String, String> importerParams,
|
||||||
final boolean pretend,
|
final boolean pretend,
|
||||||
final boolean publishNewItems)
|
final boolean publishNewItems)
|
||||||
throws SciPublicationsImportException {
|
throws SciPublicationsImportException {
|
||||||
|
|
||||||
|
final ImportReport report = new ImportReport();
|
||||||
|
final ImporterUtil importerUtil = new ImporterUtil(publishNewItems);
|
||||||
|
final BibTeXConverters converters = BibTeXConverters.getInstance();
|
||||||
|
|
||||||
throw new UnsupportedOperationException();
|
final StringReader reader = new StringReader(publications);
|
||||||
|
final BibTeXParser parser = new BibTeXParser(reader);
|
||||||
|
final BibTeXDatabase database = parser.getDatabase();
|
||||||
|
final Map<Key, BibTeXEntry> entries = database.getEntries();
|
||||||
|
|
||||||
|
for(BibTeXEntry entry : entries.values()) {
|
||||||
|
report.addPublication(converters.convert(entry, importerUtil, pretend, publishNewItems));
|
||||||
|
}
|
||||||
|
|
||||||
|
return report;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue