diff --git a/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.SciPublicationsImporter b/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.SciPublicationsImporter index dc6ffdd8c..f4a2dd0b7 100644 --- a/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.SciPublicationsImporter +++ b/ccm-sci-publications/src/META-INF/services/com.arsdigita.cms.scipublications.importer.SciPublicationsImporter @@ -1 +1,2 @@ -com.arsdigita.cms.scipublications.importer.ris.RisImporter \ No newline at end of file +com.arsdigita.cms.scipublications.importer.ris.RisImporter +com.arsdigita.cms.scipublications.importer.bibtex.BibTeXPublicationsImporter \ No newline at end of file diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXConverters.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXConverters.java index 93f8d9e02..7da4facd0 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXConverters.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXConverters.java @@ -57,7 +57,7 @@ public class BibTeXConverters { final PublicationImportReport report = new PublicationImportReport(); BibTeXConverter converter = converters.get(bibTeXEntry. - getType().getValue()); + getType().getValue().toLowerCase()); if (converter == null) { report.addMessage(String.format("No converter for BibTeX type '%s' available. Publication '%s' has not" @@ -97,8 +97,7 @@ public class BibTeXConverters { if (!pretend) { publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); } - final PublicationBundle bundle = converter.createBundle(publication, pretend); - report.setType(publication.BASE_DATA_OBJECT_TYPE); + final PublicationBundle bundle = converter.createBundle(publication, pretend); converter.processFields(bibTeXEntry, publication, importerUtil, report, pretend); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXPublicationsImporter.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXPublicationsImporter.java index a868c1a6d..0665ed5a1 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXPublicationsImporter.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/BibTeXPublicationsImporter.java @@ -5,8 +5,11 @@ 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.IOException; +import java.io.PrintWriter; import java.io.StringReader; import java.util.Map; +import java.util.logging.Level; import javax.activation.MimeType; import javax.activation.MimeTypeParseException; import org.apache.log4j.Logger; @@ -14,6 +17,7 @@ import org.jbibtex.BibTeXDatabase; import org.jbibtex.BibTeXEntry; import org.jbibtex.BibTeXParser; import org.jbibtex.Key; +import org.jbibtex.ParseException; /** * @@ -33,26 +37,44 @@ public class BibTeXPublicationsImporter implements SciPublicationsImporter { return new PublicationFormat("BibTeX", null, "bib"); } } - + public ImportReport importPublications(final String publications, final Map 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(); + + report.setImporter(BibTeXPublicationsImporter.class.getName()); + report.setPretend(pretend); - final StringReader reader = new StringReader(publications); - final BibTeXParser parser = new BibTeXParser(reader); - final BibTeXDatabase database = parser.getDatabase(); + final StringReader reader = new StringReader(publications); + final BibTeXParser parser = new BibTeXParser(); + final BibTeXDatabase database; + try { + database = parser.parse(reader); + } catch (IOException ex) { + final PrintWriter writer = new PrintWriter(System.err); + writer.print("Failed to parse BibTeX file."); + ex.printStackTrace(writer); + + return report; + } catch (ParseException ex) { + final PrintWriter writer = new PrintWriter(System.err); + writer.print("Failed to parse BibTeX file."); + ex.printStackTrace(writer); + + return report; + } final Map entries = database.getEntries(); - - for(BibTeXEntry entry : entries.values()) { + + for (BibTeXEntry entry : entries.values()) { report.addPublication(converters.convert(entry, importerUtil, pretend, publishNewItems)); } - + return report; } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/converters/ArticleConverter.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/converters/ArticleConverter.java index 74ff3005e..8c15d94c4 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/converters/ArticleConverter.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/converters/ArticleConverter.java @@ -48,6 +48,8 @@ public class ArticleConverter implements BibTeXConverter= 3) { author.setFirst(nameParts[0]); author.setPreLast(nameParts[1]); author.setLast(nameParts[2]); - - return; } - } authorList.add(author); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/util/BibTeXUtil.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/util/BibTeXUtil.java index f67e7dea1..98b08bbe6 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/util/BibTeXUtil.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/bibtex/util/BibTeXUtil.java @@ -7,6 +7,7 @@ import com.arsdigita.cms.contenttypes.InternetArticle; import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.PublicationWithPublisher; import com.arsdigita.cms.contenttypes.UnPublished; +import com.arsdigita.cms.scipublications.importer.report.AuthorImportReport; import com.arsdigita.cms.scipublications.importer.report.FieldImportReport; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.util.AuthorData; @@ -108,7 +109,10 @@ public class BibTeXUtil { final List authorList = authorListParser.parse(toPlainString(authors)); for (Author author : authorList) { - importerUtil.processAuthor(publication, createAuthorData(author, editors), pretend); + final AuthorImportReport authorReport = importerUtil.processAuthor(publication, + createAuthorData(author, editors), + pretend); + importReport.addAuthor(authorReport); } } catch (IOException ex) { @@ -144,9 +148,15 @@ public class BibTeXUtil { try { if (address == null) { - importerUtil.processPublisher(publication, "", toPlainString(publisher), pretend); + importReport.setPublisher(importerUtil.processPublisher(publication, + "", + toPlainString(publisher), + pretend)); } else { - importerUtil.processPublisher(publication, toPlainString(address), toPlainString(publisher), pretend); + importReport.setPublisher(importerUtil.processPublisher(publication, + toPlainString(address), + toPlainString(publisher), + pretend)); } } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse publisher for publication '%s'.", pubKey.getValue()), @@ -157,7 +167,7 @@ public class BibTeXUtil { ex, importReport); } - } + } public void processSeries(final Key pubKey, final Value series, @@ -169,7 +179,7 @@ public class BibTeXUtil { } try { - importerUtil.processSeries(publication, toPlainString(series), pretend); + importReport.setSeries(importerUtil.processSeries(publication, toPlainString(series), pretend)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse series for publication '%s'.", pubKey.getValue()), ex, @@ -190,7 +200,7 @@ public class BibTeXUtil { return; } try { - importerUtil.processJournal(article, toPlainString(journal), pretend); + importReport.setJournal(importerUtil.processJournal(article, toPlainString(journal), pretend)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse journal for article '%s'.", pubKey.getValue()), ex, @@ -226,14 +236,14 @@ public class BibTeXUtil { authorData.add(createAuthorData(author, false)); } - importerUtil.processCollectedVolume(article, - toPlainString(collectedVolume), - toPlainString(yearValue), - authorData, - toPlainString(publisherValue), - toPlainString(addressValue), - toPlainString(editonValue), - pretend); + importReport.setCollectedVolume(importerUtil.processCollectedVolume(article, + toPlainString(collectedVolume), + toPlainString(yearValue), + authorData, + toPlainString(publisherValue), + toPlainString(addressValue), + toPlainString(editonValue), + pretend)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse collected volume for article '%s'.", bibTeXEntry.getKey().getValue()), @@ -270,14 +280,14 @@ public class BibTeXUtil { authorData.add(createAuthorData(author, false)); } - importerUtil.processProceedings(inProceedings, - toPlainString(proceedings), - toPlainString(yearValue), - "", - authorData, - toPlainString(publisherValue), - toPlainString(addressValue), - pretend); + importReport.setProceedings(importerUtil.processProceedings(inProceedings, + toPlainString(proceedings), + toPlainString(yearValue), + "", + authorData, + toPlainString(publisherValue), + toPlainString(addressValue), + pretend)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse proceedings for in proceedings '%s'.", bibTeXEntry.getKey().getValue()), @@ -301,7 +311,9 @@ public class BibTeXUtil { return; } try { - importerUtil.processOrganization(publication, toPlainString(organization), pretend); + importReport.addOrgaUnit(importerUtil.processOrganization(publication, + toPlainString(organization), + pretend)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse organization for publication '%s'.", pubKey.getValue()), ex, @@ -323,7 +335,7 @@ public class BibTeXUtil { return; } try { - importerUtil.processOrganization(article, toPlainString(organization), pretend); + importReport.addOrgaUnit(importerUtil.processOrganization(article, toPlainString(organization), pretend)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse organization for publication '%s'.", pubKey.getValue()), ex, @@ -401,8 +413,11 @@ public class BibTeXUtil { try { final String str = toPlainString(value); final int intValue = Integer.parseInt(str); - publication.set(target, intValue); + if (!pretend) { + publication.set(target, intValue); + } + importReport.addField(new FieldImportReport(target, str)); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse field '%s' for publication '%s'.", pubKey.getValue(), @@ -437,7 +452,10 @@ public class BibTeXUtil { } try { - publication.set(target, toPlainString(value)); + if (!pretend) { + publication.set(target, toPlainString(value)); + } + importReport.addField(new FieldImportReport(target, toPlainString(value))); } catch (IOException ex) { addExceptionMsg(String.format("Failed to parse value of field '%s' for publication '%s'.", pubKey.getValue(),