Nachtrag für Revision 2021

git-svn-id: https://svn.libreccm.org/ccm/trunk@2022 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-01-02 09:41:56 +00:00
parent efd744be3e
commit 69b86299a2
3 changed files with 293 additions and 0 deletions

View File

@ -0,0 +1,174 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
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.ris.RisConverter;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.AuthorData;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.List;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public abstract class AbstractRisConverter implements RisConverter {
protected void processAuthors(final RisDataset dataset,
final RisField risField,
final ImporterUtil importerUtil,
final Publication publication,
final PublicationImportReport report,
final boolean pretend) {
processAuthors(dataset, risField, importerUtil, publication, false, report, pretend);
}
protected void processEditors(final RisDataset dataset,
final RisField risField,
final ImporterUtil importerUtil,
final Publication publication,
final PublicationImportReport report,
final boolean pretend) {
processAuthors(dataset, risField, importerUtil, publication, true, report, pretend);
}
private void processAuthors(final RisDataset dataset,
final RisField risField,
final ImporterUtil importerUtil,
final Publication publication,
final boolean isEditors,
final PublicationImportReport report,
final boolean pretend) {
final List<String> authors = dataset.getValues().get(risField);
if ((authors != null) && !authors.isEmpty()) {
for (String authorStr : authors) {
processAuthorStr(authorStr, isEditors, importerUtil, publication, report, pretend);
}
}
}
private void processAuthorStr(final String authorStr,
final boolean editor,
final ImporterUtil importerUtil,
final Publication publication,
final PublicationImportReport importReport,
final boolean pretend) {
final AuthorData authorData = new AuthorData();
final String[] tokens = authorStr.split(",");
if (tokens.length == 0) {
importReport.addMessage(String.format("Failed to parse author string '%s'.", authorStr));
return;
}
if (tokens.length >= 1) {
authorData.setSurname(tokens[0]);
}
if (tokens.length >= 2) {
authorData.setGivenName(tokens[1]);
}
authorData.setEditor(editor);
final AuthorImportReport authorReport = importerUtil.processAuthor(publication, authorData, pretend);
importReport.addAuthor(authorReport);
}
protected void processPublisher(final RisDataset dataset,
final boolean pretend,
final PublicationWithPublisher publication,
final ImporterUtil importerUtil,
final PublicationImportReport report) {
final List<String> publisherList = dataset.getValues().get(RisField.PB);
final List<String> placeList = dataset.getValues().get(RisField.CY);
final String publisherName;
if ((publisherList == null) || publisherList.isEmpty()) {
publisherName = null;
} else {
publisherName = publisherList.get(0);
}
final String place;
if ((placeList == null) || placeList.isEmpty()) {
place = null;
} else {
place = placeList.get(0);
}
if (publisherName != null) {
report.setPublisher(importerUtil.processPublisher(publication, place, publisherName, pretend));
}
}
protected void processNumberOfPages(final RisDataset dataset,
final boolean pretend,
final PublicationWithPublisher publication,
final PublicationImportReport report) {
final List<String> numberOfPages = dataset.getValues().get(RisField.SP);
if ((numberOfPages != null) && !numberOfPages.isEmpty()) {
try {
final int value = Integer.parseInt(numberOfPages.get(0));
publication.setNumberOfPages(value);
report.addField(new FieldImportReport("number of pages", numberOfPages.get(0)));
} catch (NumberFormatException ex) {
report.addMessage("Failed to parse number of pages");
}
}
}
protected void processNumberOfVolumes(final RisDataset dataset,
final boolean pretend,
final PublicationWithPublisher publication,
final PublicationImportReport report) {
final List<String> numberOfVols = dataset.getValues().get(RisField.NV);
if ((numberOfVols != null) && !numberOfVols.isEmpty()) {
try {
final int value = Integer.parseInt(numberOfVols.get(0));
publication.setNumberOfVolumes(value);
report.addField(new FieldImportReport("number of volumes", numberOfVols.get(0)));
} catch (NumberFormatException ex) {
report.addMessage("Failed to parse number of volumes.");
}
}
}
protected void processVolume(final RisDataset dataset,
final boolean pretend,
final PublicationWithPublisher publication,
final PublicationImportReport report) {
final List<String> volume = dataset.getValues().get(RisField.VL);
if ((volume != null) && !volume.isEmpty()) {
try {
final int value = Integer.parseInt(volume.get(0));
publication.setVolume(value);
report.addField(new FieldImportReport("volume", volume.get(0)));
} catch (NumberFormatException ex) {
report.addMessage("Failed to parse value of field 'volume'.");
}
}
}
protected void processYear(final RisDataset dataset,
final boolean pretend,
final Publication publication,
final PublicationImportReport report) {
final String yearStr = dataset.getValues().get(RisField.PY).get(0);
try {
final int year = Integer.parseInt(yearStr);
publication.setYearOfPublication(year);
report.addField(new FieldImportReport("year", yearStr));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to convert year of publication value '%s' from RIS to"
+ "integer value. Setting year of publication to 0"));
publication.setYearOfPublication(0);
}
}
}

View File

@ -0,0 +1,38 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.ArticleInJournal;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisConverter;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
/**
* Converter for the RIS {@code EJOUR} to the SciPublications type {@link ArticleInJournal}
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class EjourConverter implements RisConverter {
public PublicationImportReport convert(final RisDataset dataset,
final ImporterUtil importerUtil,
final boolean pretend,
final boolean publishNewItems) {
final PublicationImportReport report = new PublicationImportReport();
report.setType(ArticleInJournal.BASE_DATA_OBJECT_TYPE);
final ArticleInJournal article = new ArticleInJournal();
return report;
}
public RisType getRisType() {
return RisType.EJOUR;
}
}

View File

@ -0,0 +1,81 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.GreyLiterature;
import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.FieldImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisConverter;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.List;
/**
* Converter for the RIS type {@code GEN} to the SciPublications {@link GreyLiterature}
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class GenConverter extends AbstractRisConverter {
public PublicationImportReport convert(final RisDataset dataset,
final ImporterUtil importerUtil,
final boolean pretend,
final boolean publishNewItems) {
final PublicationImportReport report = new PublicationImportReport();
report.setType(GreyLiterature.BASE_DATA_OBJECT_TYPE);
final Monograph publication = new Monograph();
publication.setTitle(dataset.getValues().get(RisField.TI).get(0));
report.setTitle(dataset.getValues().get(RisField.TI).get(0));
final String yearStr = dataset.getValues().get(RisField.PY).get(0);
try {
final int year = Integer.parseInt(yearStr);
publication.setYearOfPublication(year);
report.addField(new FieldImportReport("year", yearStr));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to convert year of publication value '%s' from RIS to"
+ "integer value. Setting year of publication to 0"));
publication.setYearOfPublication(0);
}
processAuthors(dataset, RisField.AU, importerUtil, publication, report, pretend);
processAuthors(dataset, RisField.A2, importerUtil, publication, report, pretend);
processAuthors(dataset, RisField.A3, importerUtil, publication, report, pretend);
processAuthors(dataset, RisField.A4, importerUtil, publication, report, pretend);
processPublisher(dataset, pretend, publication, importerUtil, report);
final List<String> abstractList = dataset.getValues().get(RisField.AB);
if ((abstractList != null) && (!abstractList.isEmpty())) {
publication.setAbstract(abstractList.get(0));
report.addField(new FieldImportReport("abstract", abstractList.get(0)));
}
final List<String> edition = dataset.getValues().get(RisField.ET);
if ((edition != null) && !edition.isEmpty()) {
publication.setEdition(edition.get(0));
report.addField(new FieldImportReport("edition", edition.get(0)));
}
final List<String> isbn = dataset.getValues().get(RisField.SN);
if ((isbn != null) && !isbn.isEmpty()) {
publication.setISBN(isbn.get(0));
report.addField(new FieldImportReport("isbn", isbn.get(0)));
}
processNumberOfPages(dataset, pretend, publication, report);
processVolume(dataset, pretend, publication, report);
return report;
}
public RisType getRisType() {
return RisType.GEN;
}
}