RIS Importer: Support for more types

git-svn-id: https://svn.libreccm.org/ccm/trunk@2032 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-01-08 19:00:24 +00:00
parent 6dcdc33392
commit ba2b3c0a7e
7 changed files with 191 additions and 3 deletions

View File

@ -353,6 +353,10 @@ public enum RisField {
* Number of volumes * Number of volumes
*/ */
NV, NV,
/**
* DOI
*/
DO,
/** /**
* Begin of a new reference. Value is the type of the reference. * Begin of a new reference. Value is the type of the reference.
*/ */

View File

@ -1,5 +1,6 @@
package com.arsdigita.cms.scipublications.importer.ris.converters; package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
import com.arsdigita.cms.contenttypes.ArticleInJournal; import com.arsdigita.cms.contenttypes.ArticleInJournal;
import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher; import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
@ -11,6 +12,7 @@ import com.arsdigita.cms.scipublications.importer.ris.RisConverter;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset; import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.AuthorData; import com.arsdigita.cms.scipublications.importer.util.AuthorData;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -251,6 +253,62 @@ public abstract class AbstractRisConverter implements RisConverter {
} }
} }
private AuthorData createAuthorData(final String[] tokens) {
final AuthorData authorData = new AuthorData();
if (tokens.length == 0) {
throw new IllegalArgumentException("No author data tokens!");
}
if(tokens.length >= 1) {
authorData.setSurname(tokens[0]);
}
if (tokens.length >= 2) {
authorData.setGivenName(tokens[1]);
}
return authorData;
}
protected void processCollectedVolume(final RisDataset dataset,
final RisField cvTitleField,
final RisField cvYearField,
final RisField cvEditorsField,
final RisField cvPlaceField,
final RisField cvPublisherField,
final RisField cvEditionField,
final ArticleInCollectedVolume article,
final ImporterUtil importerUtil,
final boolean pretend,
final PublicationImportReport report) {
final List<String> colVolTitle = dataset.getValues().get(cvTitleField);
final List<String> colVolYear = dataset.getValues().get(cvYearField);
final List<String> colVolPlace = dataset.getValues().get(cvPlaceField);
final List<String> colVolPublisher = dataset.getValues().get(cvPublisherField);
final List<String> colVolEdition = dataset.getValues().get(cvEditionField);
final List<String> colVolEditors = dataset.getValues().get(cvEditorsField);
final List<AuthorData> colVolEditorData = new ArrayList<AuthorData>();
for(String collVolEditor : colVolEditors) {
final String[] tokens = collVolEditor.split(",");
colVolEditorData.add(createAuthorData(tokens));
}
if ((colVolTitle != null) && !colVolTitle.isEmpty()) {
report.setCollectedVolume(importerUtil.processCollectedVolume(article,
colVolTitle.get(0),
colVolYear.get(0),
colVolEditorData,
colVolPublisher.get(0),
colVolPlace.get(0),
colVolEdition.get(0),
pretend));
}
}
protected void processPages(final RisDataset dataset, protected void processPages(final RisDataset dataset,
final RisField field, final RisField field,
final Publication publication, final Publication publication,
@ -293,5 +351,4 @@ public abstract class AbstractRisConverter implements RisConverter {
dataset.getFirstLine())); dataset.getFirstLine()));
} }
} }
} }

View File

@ -3,11 +3,9 @@ package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.Monograph; import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField; import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType; 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.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset; import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.List;
/** /**
* Converter for the RIS type {@code BOOK} to the SciPublications type {@link Monograph}. * Converter for the RIS type {@code BOOK} to the SciPublications type {@link Monograph}.

View File

@ -0,0 +1,54 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
/**
* Converter for the RIS type {@code CHAP} to the SciPublications type {@link ArticleInCollectedVolume}.
*
* @author Jens Pelzetter
* @version $Id$
*/
public class ChapConverter extends AbstractRisConverter {
public PublicationImportReport convert(final RisDataset dataset,
final ImporterUtil importerUtil,
final boolean pretend,
final boolean publishNewItems) {
final PublicationImportReport report = new PublicationImportReport();
report.setType(ArticleInCollectedVolume.BASE_DATA_OBJECT_TYPE);
final ArticleInCollectedVolume article = new ArticleInCollectedVolume();
processTitle(dataset, article, report, pretend);
processYear(dataset, pretend, article, report);
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend);
processCollectedVolume(dataset,
RisField.T2,
RisField.PY,
RisField.A2,
RisField.CY,
RisField.PB,
RisField.ET,
article,
importerUtil,
pretend,
report);
processField(dataset, RisField.AB, article, "abstract", report, pretend);
processPages(dataset, RisField.ID, article, pretend, report);
return report;
}
public RisType getRisType() {
return RisType.CHAP;
}
}

View File

@ -0,0 +1,17 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class EchapConverter extends ChapConverter {
@Override
public RisType getRisType() {
return RisType.ECHAP;
}
}

View File

@ -0,0 +1,53 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.InternetArticle;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class ElecConverter extends AbstractRisConverter {
public PublicationImportReport convert(final RisDataset dataset,
final ImporterUtil importerUtil,
final boolean pretend,
final boolean publishNewItems) {
final PublicationImportReport report = new PublicationImportReport();
report.setType(InternetArticle.BASE_DATA_OBJECT_TYPE);
final InternetArticle article = new InternetArticle();
processTitle(dataset, article, report, pretend);
processYear(dataset, pretend, article, report);
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend);
processField(dataset, RisField.AB, article, "abstract", report, pretend);
processSeries(dataset, RisField.T2, article, importerUtil, pretend, report);
processField(dataset, RisField.CY, article, "place", report, pretend);
processField(dataset, RisField.DO, article, "doi", report, pretend);
processField(dataset, RisField.ET, article, "edition", report, pretend);
processField(dataset, RisField.UR, article, "url", report, pretend);
return report;
}
public RisType getRisType() {
return RisType.ELEC;
}
}

View File

@ -207,6 +207,7 @@ public class ImporterUtil {
final List<AuthorData> authors, final List<AuthorData> authors,
final String publisherName, final String publisherName,
final String place, final String place,
final String edition,
final boolean pretend) { final boolean pretend) {
final CollectedVolumeImportReport report = new CollectedVolumeImportReport(); final CollectedVolumeImportReport report = new CollectedVolumeImportReport();
@ -258,6 +259,10 @@ public class ImporterUtil {
report.setPublisher(processPublisher(collectedVolume, place, publisherName, pretend)); report.setPublisher(processPublisher(collectedVolume, place, publisherName, pretend));
} }
if ((edition != null) && !edition.isEmpty()) {
collectedVolume.setEdition(edition);
}
collectedVolume.save(); collectedVolume.save();
article.setCollectedVolume(collectedVolume); article.setCollectedVolume(collectedVolume);