BibTeX Importer: Kleinere Änderungen an Basisstruktur
git-svn-id: https://svn.libreccm.org/ccm/trunk@2041 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
3532cf9a9d
commit
f293755302
|
|
@ -19,6 +19,11 @@ public interface BibTeXConverter<T extends Publication, B extends PublicationBun
|
||||||
|
|
||||||
B createBundle(T publication, boolean pretend);
|
B createBundle(T publication, boolean pretend);
|
||||||
|
|
||||||
|
void processTitle(final BibTeXEntry bibTeXEntry,
|
||||||
|
final T publication,
|
||||||
|
final PublicationImportReport importReport,
|
||||||
|
final boolean pretend);
|
||||||
|
|
||||||
void processFields(final BibTeXEntry bibTeXEntry,
|
void processFields(final BibTeXEntry bibTeXEntry,
|
||||||
final T publication,
|
final T publication,
|
||||||
final ImporterUtil importerUtil,
|
final ImporterUtil importerUtil,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,16 @@
|
||||||
package com.arsdigita.cms.scipublications.importer.bibtex;
|
package com.arsdigita.cms.scipublications.importer.bibtex;
|
||||||
|
|
||||||
|
import com.arsdigita.categorization.Category;
|
||||||
|
import com.arsdigita.cms.Folder;
|
||||||
|
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.report.PublicationImportReport;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.ris.RisImporter;
|
||||||
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
|
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
|
||||||
|
import com.arsdigita.kernel.Kernel;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.ServiceLoader;
|
import java.util.ServiceLoader;
|
||||||
|
|
@ -17,14 +26,14 @@ import org.jbibtex.BibTeXEntry;
|
||||||
public class BibTeXConverters {
|
public class BibTeXConverters {
|
||||||
|
|
||||||
private final static Logger LOGGER = Logger.getLogger(BibTeXConverters.class);
|
private final static Logger LOGGER = Logger.getLogger(BibTeXConverters.class);
|
||||||
private final Map<String, BibTeXConverter<?, ?>> converters = new HashMap<String, BibTeXConverter<?, ?>>();
|
private final Map<String, BibTeXConverter<Publication, PublicationBundle>> converters = new HashMap<String, BibTeXConverter<Publication, PublicationBundle>>();
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private BibTeXConverters() {
|
private BibTeXConverters() {
|
||||||
LOGGER.debug("Loading BibTeX converters...");
|
LOGGER.debug("Loading BibTeX converters...");
|
||||||
final ServiceLoader<BibTeXConverter> converterServices = ServiceLoader.load(BibTeXConverter.class);
|
final ServiceLoader<BibTeXConverter> converterServices = ServiceLoader.load(BibTeXConverter.class);
|
||||||
|
|
||||||
for(BibTeXConverter converter : converterServices) {
|
for (BibTeXConverter converter : converterServices) {
|
||||||
LOGGER.debug(String.format("Found converter for BibTeX type '%s'.", converter.getBibTeXType()));
|
LOGGER.debug(String.format("Found converter for BibTeX type '%s'.", converter.getBibTeXType()));
|
||||||
|
|
||||||
converters.put(converter.getBibTeXType(), converter);
|
converters.put(converter.getBibTeXType(), converter);
|
||||||
|
|
@ -35,7 +44,6 @@ public class BibTeXConverters {
|
||||||
private static class Instance {
|
private static class Instance {
|
||||||
|
|
||||||
private static BibTeXConverters INSTANCE = new BibTeXConverters();
|
private static BibTeXConverters INSTANCE = new BibTeXConverters();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BibTeXConverters getInstance() {
|
public static BibTeXConverters getInstance() {
|
||||||
|
|
@ -48,9 +56,95 @@ public class BibTeXConverters {
|
||||||
final boolean publishNewItems) {
|
final boolean publishNewItems) {
|
||||||
final PublicationImportReport report = new PublicationImportReport();
|
final PublicationImportReport report = new PublicationImportReport();
|
||||||
|
|
||||||
|
BibTeXConverter<Publication, PublicationBundle> converter = converters.get(bibTeXEntry.
|
||||||
|
getType().getValue());
|
||||||
|
|
||||||
|
if (converter == null) {
|
||||||
|
report.addMessage(String.format("No converter for BibTeX type '%s' available. Publication '%s' has not"
|
||||||
|
+ "been imported.",
|
||||||
|
bibTeXEntry.getType().getValue(),
|
||||||
|
bibTeXEntry.getKey().getValue()));
|
||||||
|
|
||||||
return report;
|
return report;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
converter = converter.getClass().newInstance();
|
||||||
|
} catch (InstantiationException ex) {
|
||||||
|
final StringWriter writer = new StringWriter();
|
||||||
|
writer.append(String.format("Failed to create instance of converter for BibTeX type '%s'. Publication"
|
||||||
|
+ " '%s' was not imported.",
|
||||||
|
bibTeXEntry.getType().getValue(),
|
||||||
|
bibTeXEntry.getKey().getValue()));
|
||||||
|
ex.printStackTrace(new PrintWriter(writer));
|
||||||
|
report.addMessage(writer.toString());
|
||||||
|
|
||||||
|
return report;
|
||||||
|
} catch (IllegalAccessException ex) {
|
||||||
|
final StringWriter writer = new StringWriter();
|
||||||
|
writer.append(String.format("Failed to create instance of converter for BibTeX type '%s'. Publication"
|
||||||
|
+ " '%s' was not imported.",
|
||||||
|
bibTeXEntry.getType().getValue(),
|
||||||
|
bibTeXEntry.getKey().getValue()));
|
||||||
|
ex.printStackTrace(new PrintWriter(writer));
|
||||||
|
report.addMessage(writer.toString());
|
||||||
|
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Publication publication = converter.createPublication(pretend);
|
||||||
|
converter.processTitle(bibTeXEntry, publication, report, pretend);
|
||||||
|
if (!pretend) {
|
||||||
|
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
|
||||||
|
}
|
||||||
|
final PublicationBundle bundle = converter.createBundle(publication, pretend);
|
||||||
|
report.setType(publication.BASE_DATA_OBJECT_TYPE);
|
||||||
|
|
||||||
|
converter.processFields(bibTeXEntry, publication, importerUtil, report, pretend);
|
||||||
|
|
||||||
|
if (!pretend) {
|
||||||
|
publication.save();
|
||||||
|
|
||||||
|
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
|
||||||
|
|
||||||
|
publication.save();
|
||||||
|
|
||||||
|
assignFolder(publication, bundle);
|
||||||
|
assignCategories(bundle);
|
||||||
|
|
||||||
|
bundle.save();
|
||||||
|
publication.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (publishNewItems) {
|
||||||
|
importerUtil.publishItem(publication);
|
||||||
|
}
|
||||||
|
|
||||||
|
report.setSuccessful(true);
|
||||||
|
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overwrite this method to put a publication of specific type into a special folder.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected Integer getFolderId() {
|
||||||
|
return Publication.getConfig().getDefaultPublicationsFolder();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assignFolder(final Publication publication, final PublicationBundle bundle) {
|
||||||
|
final Folder folder = new Folder(new BigDecimal(getFolderId()));
|
||||||
|
bundle.setParent(folder);
|
||||||
|
bundle.setContentSection(folder.getContentSection());
|
||||||
|
publication.setContentSection(folder.getContentSection());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assignCategories(final PublicationBundle bundle) {
|
||||||
|
final Category defaultCat = RisImporter.getConfig().getDefaultCategory();
|
||||||
|
if (defaultCat != null) {
|
||||||
|
defaultCat.addChild(bundle);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.bibtex;
|
||||||
|
|
||||||
|
import com.arsdigita.categorization.Category;
|
||||||
|
import com.arsdigita.runtime.AbstractConfig;
|
||||||
|
import com.arsdigita.util.parameter.IntegerParameter;
|
||||||
|
import com.arsdigita.util.parameter.Parameter;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class BibTeXImporterConfig extends AbstractConfig {
|
||||||
|
|
||||||
|
private Parameter defaultCategoryId;
|
||||||
|
|
||||||
|
public BibTeXImporterConfig() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
defaultCategoryId = new IntegerParameter("com.arsdigita.cms.scipublications.importer.bibtex.default_category_id",
|
||||||
|
Parameter.REQUIRED,
|
||||||
|
0);
|
||||||
|
|
||||||
|
register(defaultCategoryId);
|
||||||
|
|
||||||
|
loadInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDefaultCategoryId() {
|
||||||
|
return (Integer) get(defaultCategoryId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Category getDefaultCategory() {
|
||||||
|
final Integer categoryId = getDefaultCategoryId();
|
||||||
|
|
||||||
|
if (categoryId == 0) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return new Category(new BigDecimal(categoryId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
com.arsdigita.cms.scipublications.importer.bibtex.default_category_id.title = Default category for imported publications
|
||||||
|
com.arsdigita.cms.scipublications.importer.bibtex.default_category_id.purpose = All publications which are created by the BibTeX importer will be put into this category.
|
||||||
|
com.arsdigita.cms.scipublications.importer.bibtex.default_category_id.example = 12345
|
||||||
|
com.arsdigita.cms.scipublications.importer.bibtex.default_category_id.format = [Integer]
|
||||||
Loading…
Reference in New Issue