SciPublications: Basisstruktur für BibTeX-Importer

git-svn-id: https://svn.libreccm.org/ccm/trunk@2040 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-01-14 18:42:41 +00:00
parent 00bde55770
commit 3532cf9a9d
5 changed files with 111 additions and 2 deletions

Binary file not shown.

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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;
} }
} }