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.SciPublicationsImporter;
|
||||
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 javax.activation.MimeType;
|
||||
import javax.activation.MimeTypeParseException;
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ImportReport importPublications(final String publications,
|
||||
final Map<String, String> importerParams,
|
||||
final boolean pretend,
|
||||
final boolean publishNewItems)
|
||||
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