RIS Importer Beta-Version

git-svn-id: https://svn.libreccm.org/ccm/trunk@2034 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-01-11 21:08:35 +00:00
parent 056c0dbbf6
commit 47f50ad2c9
30 changed files with 1385 additions and 919 deletions

View File

@ -12,6 +12,7 @@
<ccm:directories> <ccm:directories>
<ccm:directory name="pdl"/> <ccm:directory name="pdl"/>
<ccm:directory name="sql"/> <ccm:directory name="sql"/>
<ccm:directory name="lib"/>
<ccm:directory name="src"/> <ccm:directory name="src"/>
</ccm:directories> </ccm:directories>
<ccm:contacts> <ccm:contacts>

Binary file not shown.

View File

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<registry> <registry>
<config class="com.arsdigita.cms.contenttypes.PublicationsConfig" storage="ccm-sci-publications/publications.properties"/> <config class="com.arsdigita.cms.contenttypes.PublicationsConfig" storage="ccm-sci-publications/publications.properties"/>
<config class="com.arsdigita.cms.scipublications.importer.ris.RisImporterConfig" storage="ccm-sci-publications/ris_importer.properties"/>
</registry> </registry>

View File

@ -0,0 +1,39 @@
package com.arsdigita.cms.scipublications.importer.bibtex;
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 javax.activation.MimeType;
import javax.activation.MimeTypeParseException;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class BibTeXPublicationsImporter implements SciPublicationsImporter {
private static final Logger LOGGER = Logger.getLogger(BibTeXPublicationsImporter.class);
public PublicationFormat getSupportedFormat() {
try {
return new PublicationFormat("BibTeX", new MimeType("application/x-bibtex"), "bib");
} catch (MimeTypeParseException ex) {
LOGGER.warn("Failed to create MimeType for PublicationFormat."
+ "Using null mimetype instead. Cause: ", ex);
return new PublicationFormat("RIS", null, "RIS");
}
}
public ImportReport importPublications(final String publications,
final boolean pretend,
final boolean publishNewItems)
throws SciPublicationsImportException {
throw new UnsupportedOperationException();
}
}

View File

@ -3,7 +3,6 @@ package com.arsdigita.cms.scipublications.importer.ris;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType; import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.math.BigDecimal;
/** /**
* Interface for importing RisConverter. * Interface for importing RisConverter.

View File

@ -19,7 +19,16 @@ import org.apache.log4j.Logger;
public class RisImporter implements SciPublicationsImporter { public class RisImporter implements SciPublicationsImporter {
private static final Logger LOGGER = Logger.getLogger(RisImporter.class); private static final Logger LOGGER = Logger.getLogger(RisImporter.class);
private final RisConverters converters = RisConverters.getInstance(); private static final RisImporterConfig CONFIG = new RisImporterConfig();
private final RisConverters converters = RisConverters.getInstance();
static {
CONFIG.load();
}
public static RisImporterConfig getConfig() {
return CONFIG;
}
public PublicationFormat getSupportedFormat() { public PublicationFormat getSupportedFormat() {
try { try {
@ -27,15 +36,13 @@ public class RisImporter implements SciPublicationsImporter {
} catch (MimeTypeParseException ex) { } catch (MimeTypeParseException ex) {
LOGGER.warn("Failed to create MimeType for PublicationFormat." LOGGER.warn("Failed to create MimeType for PublicationFormat."
+ "Using null mimetype instead. Cause: ", ex); + "Using null mimetype instead. Cause: ", ex);
return new PublicationFormat("RIS", return new PublicationFormat("RIS", null, "RIS");
null,
"RIS");
} }
} }
public ImportReport importPublications(final String publications, public ImportReport importPublications(final String publications,
final boolean pretend, final boolean pretend,
final boolean publishNewItems) throws SciPublicationsImportException { final boolean publishNewItems) throws SciPublicationsImportException {
final String[] lines = publications.split("\r\n"); final String[] lines = publications.split("\r\n");
final RisParser parser = new RisParser(); final RisParser parser = new RisParser();
@ -46,13 +53,13 @@ public class RisImporter implements SciPublicationsImporter {
report.setPretend(pretend); report.setPretend(pretend);
final ImporterUtil importerUtil = new ImporterUtil(publishNewItems); final ImporterUtil importerUtil = new ImporterUtil(publishNewItems);
try { try {
for (RisDataset dataset : datasets) { for (RisDataset dataset : datasets) {
processPublication(dataset, report, importerUtil, pretend, publishNewItems); processPublication(dataset, report, importerUtil, pretend, publishNewItems);
} }
} catch(Exception ex) { } catch (Exception ex) {
ex.printStackTrace(System.out); ex.printStackTrace(System.out);
} }
return report; return report;
@ -67,7 +74,7 @@ public class RisImporter implements SciPublicationsImporter {
report.addPublication(converters.convert(dataset, importerUtil, pretend, publishNewItems)); report.addPublication(converters.convert(dataset, importerUtil, pretend, publishNewItems));
} catch (RisConverterException ex) { } catch (RisConverterException ex) {
final PublicationImportReport importReport = new PublicationImportReport(); final PublicationImportReport importReport = new PublicationImportReport();
importReport.addMessage(String.format("Failed to create converter for RIS type '%s'.", importReport.addMessage(String.format("Failed to create converter for RIS type '%s'.",
dataset.getType().toString())); dataset.getType().toString()));
} }
} }

View File

@ -0,0 +1,43 @@
package com.arsdigita.cms.scipublications.importer.ris;
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 <jens@jp-digital.de>
* @version $Id$
*/
public class RisImporterConfig extends AbstractConfig {
private Parameter defaultCategoryId;
public RisImporterConfig() {
super();
defaultCategoryId = new IntegerParameter("com.arsdigita.cms.scipublications.importer.ris.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));
}
}
}

View File

@ -0,0 +1,4 @@
com.arsdigita.cms.scipublications.importer.ris.default_category_id.title = Default category for imported publications
com.arsdigita.cms.scipublications.importer.ris.default_category_id.purpose = All publications which are created during the import will be assigned to this category. The category set using the id of the category.
com.arsdigita.cms.scipublications.importer.ris.default_category_id.example = 12345
com.arsdigita.cms.scipublications.importer.ris.default_category_id.format = [Integer]

View File

@ -1,520 +1,92 @@
package com.arsdigita.cms.scipublications.importer.ris.converters; package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.categorization.Category;
import com.arsdigita.cms.Folder; import com.arsdigita.cms.Folder;
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
import com.arsdigita.cms.contenttypes.ArticleInJournal;
import com.arsdigita.cms.contenttypes.InProceedings;
import com.arsdigita.cms.contenttypes.InternetArticle;
import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationBundle; import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import com.arsdigita.cms.contenttypes.UnPublished;
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.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisConverter; 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.ris.RisImporter;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.ArrayList; import com.arsdigita.kernel.Kernel;
import java.util.Calendar; import java.math.BigDecimal;
import java.util.List;
/** /**
* *
* @param <T>
* @param <B>
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public abstract class AbstractRisConverter implements RisConverter { public abstract class AbstractRisConverter<T extends Publication, B extends PublicationBundle> implements RisConverter {
// protected void setFolder(final Publication publication, final PublicationBundle bundle) { protected abstract T createPublication(boolean pretend);
// final Folder folder = new Folder(getFolderId());
// bundle.setParent(folder);
// bundle.setContentSection(folder.getContentSection());
// publication.setContentSection(folder.getContentSection());
// }
protected void assignCategories(final PublicationBundle bundle) {
//ToDo
}
protected void processField(final RisDataset dataset,
final RisField field,
final Publication publication,
final String targetField,
final PublicationImportReport report,
final boolean pretend) {
final List<String> values = dataset.getValues().get(field);
if ((values != null) && !values.isEmpty()) {
publication.set(targetField, values.get(0));
report.addField(new FieldImportReport(targetField, values.get(0)));
}
}
protected void processIntField(final RisDataset dataset, protected abstract B createBundle(T publication, boolean pretend);
final RisField field,
final Publication publication,
final String targetField,
final PublicationImportReport report,
final boolean pretend) {
final List<String> values = dataset.getValues().get(field);
if ((values != null) && !values.isEmpty()) {
final String valueStr = values.get(0);
try {
final int value = Integer.parseInt(valueStr);
publication.set(targetField, value);
publication.set(targetField, valueStr);
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse value of field '%s' into an integer for dataset "
+ "starting on line %d.",
field,
dataset.getFirstLine()));
}
}
}
protected void processDateField(final RisDataset dataset, protected abstract void processFields(final RisDataset dataset,
final RisField field, final T publication,
final Publication publication,
final String targetField,
final PublicationImportReport report,
final boolean pretend) {
final List<String> values = dataset.getValues().get(field);
if ((values != null) && !values.isEmpty()) {
final String valueStr = values.get(0);
final String[] tokens = valueStr.split("/");
final Calendar calendar = Calendar.getInstance();
int year = 0;
int month = 1;
int day = 1;
try {
if (tokens.length >= 1) {
year = Integer.parseInt(tokens[0]);
}
if (tokens.length >= 2) {
month = Integer.parseInt(tokens[1]);
}
if (tokens.length >= 3) {
day = Integer.parseInt(tokens[2]);
}
calendar.clear();
calendar.set(year, month - 1, day); // month - 1 because month values of the Calendar are starting with 0
publication.set(targetField, calendar.getTime());
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse value of field '%s' into an date for dataset "
+ "starting on line %d.",
field,
dataset.getFirstLine()));
}
}
}
protected void processTitle(final RisDataset dataset,
final Publication publication,
final PublicationImportReport report,
final boolean pretend) {
final String title;
if ((dataset.getValues().get(RisField.TI) != null) && !dataset.getValues().get(RisField.TI).isEmpty()) {
title = dataset.getValues().get(RisField.TI).get(0);
} else if ((dataset.getValues().get(RisField.BT) != null) && !dataset.getValues().get(RisField.BT).isEmpty()) {
title = dataset.getValues().get(RisField.BT).get(0);
} else {
title = "Unknown";
}
publication.setTitle(title);
report.setTitle(title);
}
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,
dataset.getFirstLine(),
pretend);
}
}
}
private void processAuthorStr(final String authorStr,
final boolean editor,
final ImporterUtil importerUtil,
final Publication publication,
final PublicationImportReport importReport,
final int firstLine,
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' at dataset starting at line %d.",
authorStr, firstLine));
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) {
processPublisher(dataset, RisField.PB, RisField.CY, pretend, publication, importerUtil, report);
}
protected void processPublisher(final RisDataset dataset,
final RisField publisherField,
final RisField placeField,
final boolean pretend,
final PublicationWithPublisher publication,
final ImporterUtil importerUtil,
final PublicationImportReport report) {
final List<String> publisherList = dataset.getValues().get(publisherField);
final List<String> placeList = dataset.getValues().get(placeField);
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 processOrganization(final RisDataset dataset,
final RisField field,
final boolean pretend,
final UnPublished publication,
final ImporterUtil importerUtil,
final PublicationImportReport report) {
final List<String> orgaList = dataset.getValues().get(field);
final String orgaName;
if ((orgaList == null) || orgaList.isEmpty()) {
orgaName = null;
} else {
orgaName = orgaList.get(0);
}
if (orgaName != null) {
report.addOrgaUnit(importerUtil.processOrganization(publication, orgaName, pretend));
}
}
protected void processOrganization(final RisDataset dataset,
final RisField field,
final boolean pretend,
final InternetArticle publication,
final ImporterUtil importerUtil,
final PublicationImportReport report) {
final List<String> orgaList = dataset.getValues().get(field);
final String orgaName;
if ((orgaList == null) || orgaList.isEmpty()) {
orgaName = null;
} else {
orgaName = orgaList.get(0);
}
if (orgaName != null) {
report.addOrgaUnit(importerUtil.processOrganization(publication, orgaName, 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(String.format("Failed to parse number of pages at dataset starting at line %d",
dataset.getFirstLine()));
}
}
}
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(String.format("Failed to parse number of volumes at dataset starting at line %d.",
dataset.getFirstLine()));
}
}
}
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(String.format("Failed to parse value of field 'volume' on dataset starting "
+ "at line %d.", dataset.getFirstLine()));
}
}
}
protected void processYear(final RisDataset dataset,
final boolean pretend,
final Publication publication,
final PublicationImportReport report) {
processYear(dataset, RisField.PY, pretend, publication, report);
}
protected void processYear(final RisDataset dataset,
final RisField field,
final boolean pretend,
final Publication publication,
final PublicationImportReport report) {
final String yearStr = dataset.getValues().get(field).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 on dataset starting at line %d. Setting year of "
+ "publication to 0", dataset.getFirstLine()));
publication.setYearOfPublication(0);
}
}
protected void processSeries(final RisDataset dataset,
final RisField field,
final Publication publication,
final ImporterUtil importerUtil,
final boolean pretend,
final PublicationImportReport report) {
final List<String> series = dataset.getValues().get(field);
if ((series != null) && !series.isEmpty()) {
report.setSeries(importerUtil.processSeries(publication, series.get(0), pretend));
}
}
protected void processJournal(final RisDataset dataset,
final RisField field,
final ArticleInJournal article,
final ImporterUtil importerUtil,
final boolean pretend,
final PublicationImportReport report) {
final List<String> journal = dataset.getValues().get(field);
if ((journal != null) && !journal.isEmpty()) {
report.setJournal(importerUtil.processJournal(article, journal.get(0), pretend));
}
}
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 ImporterUtil importerUtil,
final boolean pretend, final PublicationImportReport importReport,
final PublicationImportReport report) { final boolean pretend);
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); public final PublicationImportReport convert(final RisDataset dataset,
final List<AuthorData> colVolEditorData = new ArrayList<AuthorData>(); final ImporterUtil importerUtil,
final boolean pretend,
final boolean publishNewItems) {
final PublicationImportReport importReport = new PublicationImportReport();
for (String colVolEditor : colVolEditors) { final T publication = createPublication(pretend);
final String[] tokens = colVolEditor.split(","); importReport.setTitle(publication.BASE_DATA_OBJECT_TYPE);
colVolEditorData.add(createAuthorData(tokens)); processFields(dataset, publication, importerUtil, importReport, pretend);
if (!pretend) {
publication.save();
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
publication.save();
final B bundle = createBundle(publication, pretend);
assignFolder(publication, bundle);
assignCategories(bundle);
bundle.save();
publication.save();
} }
if ((colVolTitle != null) && !colVolTitle.isEmpty()) { if (publishNewItems) {
report.setCollectedVolume(importerUtil.processCollectedVolume(article, importerUtil.publishItem(publication);
colVolTitle.get(0),
colVolYear.get(0),
colVolEditorData,
colVolPublisher.get(0),
colVolPlace.get(0),
colVolEdition.get(0),
pretend));
} }
importReport.setSuccessful(true);
return importReport;
} }
protected void processProceedings(final RisDataset dataset, /**
final RisField procTitleField, * Overwrite this method to put a publication of specific type into a special folder.
final RisField procYearField, *
final RisField procConfNameField, * @return
final RisField procEditorsField, */
final RisField procPublisherField, protected Integer getFolderId() {
final RisField procPlaceField, return Publication.getConfig().getDefaultPublicationsFolder();
final InProceedings inProceedings,
final ImporterUtil importerUtil,
final boolean pretend,
final PublicationImportReport report) {
final List<String> procTitle = dataset.getValues().get(procTitleField);
final List<String> procYear = dataset.getValues().get(procYearField);
final List<String> procConfName = dataset.getValues().get(procConfNameField);
final List<String> procPublisher = dataset.getValues().get(procPublisherField);
final List<String> procPlace = dataset.getValues().get(procPlaceField);
final List<String> procEditors = dataset.getValues().get(procEditorsField);
final List<AuthorData> procEditorData = new ArrayList<AuthorData>();
for (String procEditor : procEditors) {
final String[] tokens = procEditor.split(", ");
procEditorData.add(createAuthorData(tokens));
}
if ((procTitle != null) && !procTitle.isEmpty()) {
report.setProceedings(importerUtil.processProceedings(inProceedings,
procTitle.get(0),
procYear.get(0),
procConfName.get(0),
procEditorData,
procPublisher.get(0),
procPlace.get(0),
pretend));
}
} }
protected void processPages(final RisDataset dataset, protected void assignFolder(final Publication publication, final PublicationBundle bundle) {
final RisField field, final Folder folder = new Folder(new BigDecimal(getFolderId()));
final Publication publication, bundle.setParent(folder);
final boolean pretend, bundle.setContentSection(folder.getContentSection());
final PublicationImportReport report) { publication.setContentSection(folder.getContentSection());
final List<String> values = dataset.getValues().get(field); }
final String pages = values.get(0);
final String[] tokens = pages.split("-"); protected void assignCategories(final PublicationBundle bundle) {
if (tokens.length == 2) { final Category defaultCat = RisImporter.getConfig().getDefaultCategory();
try { if (defaultCat != null) {
final int pagesFrom = Integer.parseInt(tokens[0]); defaultCat.addChild(bundle);
final int pagesTo = Integer.parseInt(tokens[1]);
publication.set("pagesFrom", pagesFrom);
publication.set("pagesTo", pagesTo);
report.addField(new FieldImportReport("pagesFrom", Integer.toString(pagesFrom)));
report.addField(new FieldImportReport("pagesTo", Integer.toString(pagesTo)));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse pages value in dataset starting at line %d. "
+ "On of the values given is not an integer.",
dataset.getFirstLine()));
}
} else if (tokens.length == 1) {
try {
final int pagesFrom = Integer.parseInt(tokens[0]);
publication.set("pagesFrom", pagesFrom);
report.addField(new FieldImportReport("pagesFrom", Integer.toString(pagesFrom)));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse pages value in dataset starting at line %d. "
+ "Value is not an integer.",
dataset.getFirstLine()));
}
} else if (tokens.length > 2) {
report.addMessage(String.format("Failed to parse pages value in dataset starting at line %d. "
+ "Invalid format",
dataset.getFirstLine()));
} }
} }

View File

@ -6,52 +6,67 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* *
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class BlogConverter extends AbstractRisConverter { public class BlogConverter extends AbstractRisConverter<InternetArticle, InternetArticleBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected InternetArticle createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(InternetArticle.BASE_DATA_OBJECT_TYPE); return new InternetArticle();
}
final InternetArticle article = new InternetArticle();
article.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
final InternetArticleBundle bundle = new InternetArticleBundle(article);
processTitle(dataset, article, report, pretend);
processYear(dataset, pretend, article, report);
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend);
processEditors(dataset, RisField.A2, importerUtil, article, report, pretend);
processField(dataset, RisField.AB, article, "abstract", report, pretend);
processField(dataset, RisField.CY, article, "place", report, pretend);
processField(dataset, RisField.ET, article, "edition", report, pretend);
processOrganization(dataset, RisField.PB, pretend, article, importerUtil, report);
processOrganization(dataset, RisField.T3, pretend, article, importerUtil, report);
processField(dataset, RisField.UR, article, "url", report, pretend);
processDateField(dataset, RisField.Y2, article, "lastAccessed", report, pretend);
return report;
} }
@Override
protected InternetArticleBundle createBundle(final InternetArticle publication,
final boolean pretend) {
if (pretend) {
return null;
} else {
return new InternetArticleBundle(publication);
}
}
@Override
protected void processFields(final RisDataset dataset,
final InternetArticle publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A2, publication, importReport);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processField(dataset, RisField.CY, publication, "place", importReport);
fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
orgaUtil.processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, importReport);
orgaUtil.processOrganization(dataset, RisField.T3, pretend, publication, importerUtil, importReport);
fieldUtil.processField(dataset, RisField.UR, publication, "url", importReport);
fieldUtil.processDateField(dataset, RisField.Y2, publication, "lastAccessed", importReport);
}
public RisType getRisType() { public RisType getRisType() {
return RisType.BLOG; return RisType.BLOG;
} }
} }

View File

@ -1,13 +1,16 @@
package com.arsdigita.cms.scipublications.importer.ris.converters; package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.Monograph; import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.contenttypes.PublicationWithPublisherBundle; import com.arsdigita.cms.contenttypes.PublicationBundle;
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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* 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}.
@ -15,46 +18,56 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class BookConverter extends AbstractRisConverter { public class BookConverter extends AbstractRisConverter<Monograph, PublicationBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected Monograph createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(Monograph.BASE_DATA_OBJECT_TYPE); return new Monograph();
}
final Monograph monograph = new Monograph();
monograph.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
final PublicationWithPublisherBundle bundle = new PublicationWithPublisherBundle(monograph);
processTitle(dataset, monograph, report, pretend);
processYear(dataset, pretend, monograph, report);
processAuthors(dataset, RisField.AU, importerUtil, monograph, report, pretend);
processEditors(dataset, RisField.A3, importerUtil, monograph, report, pretend);
processPublisher(dataset, pretend, monograph, importerUtil, report);
processField(dataset, RisField.AB, monograph, "abstract", report, pretend);
processField(dataset, RisField.ET, monograph, "edition", report, pretend);
processNumberOfVolumes(dataset, pretend, monograph, report);
processField(dataset, RisField.SN, monograph, "isbn", report, pretend);
processNumberOfPages(dataset, pretend, monograph, report);
processVolume(dataset, pretend, monograph, report);
processSeries(dataset, RisField.T2, monograph, importerUtil, pretend, report);
return report;
} }
@Override
protected PublicationBundle createBundle(final Monograph publication, final boolean pretend) {
if (pretend) {
return null;
} else {
return new PublicationBundle(publication);
}
}
@Override
protected void processFields(final RisDataset dataset,
final Monograph publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A3, publication, importReport);
orgaUtil.processPublisher(dataset, RisField.PB, RisField.CY, publication, importReport);
seriesUtil.processSeries(dataset, RisField.T2, publication, importReport);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
fieldUtil.processIntField(dataset, RisField.NV, publication, "numberOfVolumes", importReport);
fieldUtil.processField(dataset, RisField.SN, publication, "isbn", importReport);
fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
fieldUtil.processIntField(dataset, RisField.VL, publication, "volume", importReport);
}
public RisType getRisType() { public RisType getRisType() {
return RisType.BOOK; return RisType.BOOK;
} }

View File

@ -6,8 +6,10 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisColVolUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* Converter for the RIS type {@code CHAP} to the SciPublications type {@link ArticleInCollectedVolume}. * Converter for the RIS type {@code CHAP} to the SciPublications type {@link ArticleInCollectedVolume}.
@ -15,45 +17,60 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter * @author Jens Pelzetter
* @version $Id$ * @version $Id$
*/ */
public class ChapConverter extends AbstractRisConverter { public class ChapConverter extends AbstractRisConverter<ArticleInCollectedVolume, ArticleInCollectedVolumeBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected ArticleInCollectedVolume createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(ArticleInCollectedVolume.BASE_DATA_OBJECT_TYPE); return new ArticleInCollectedVolume();
}
}
final ArticleInCollectedVolume article = new ArticleInCollectedVolume(); @Override
article.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected ArticleInCollectedVolumeBundle createBundle(final ArticleInCollectedVolume publication,
final ArticleInCollectedVolumeBundle bundle = new ArticleInCollectedVolumeBundle(article); final boolean pretend) {
if (pretend) {
return null;
} else {
return new ArticleInCollectedVolumeBundle(publication);
}
}
processTitle(dataset, article, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final ArticleInCollectedVolume publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisColVolUtil colVolUtil = new RisColVolUtil(importerUtil, pretend);
processYear(dataset, pretend, article, report); fieldUtil.processTitle(dataset, publication, importReport);
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processCollectedVolume(dataset, authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
RisField.T2,
RisField.PY,
RisField.A2,
RisField.CY,
RisField.PB,
RisField.ET,
article,
importerUtil,
pretend,
report);
processField(dataset, RisField.SE, article, "chapter", report, pretend); colVolUtil.processCollectedVolume(dataset,
processField(dataset, RisField.AB, article, "abstract", report, pretend); RisField.T2,
processPages(dataset, RisField.SP, article, pretend, report); RisField.PY,
RisField.A2,
RisField.CY,
RisField.PB,
RisField.ET,
publication,
importReport);
return report; fieldUtil.processField(dataset, RisField.SE, publication, "chapter", importReport);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processPages(dataset, RisField.SP, publication, importReport);
} }
public RisType getRisType() { public RisType getRisType() {
return RisType.CHAP; return RisType.CHAP;
} }
} }

View File

@ -6,6 +6,10 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -14,42 +18,57 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class ConfConverter extends AbstractRisConverter { public class ConfConverter extends AbstractRisConverter<Proceedings, ProceedingsBundle> {
@Override
protected Proceedings createPublication(final boolean pretend) {
if (pretend) {
return null;
} else {
return new Proceedings();
}
}
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected ProceedingsBundle createBundle(final Proceedings publication, final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(Proceedings.BASE_DATA_OBJECT_TYPE); return new ProceedingsBundle(publication);
}
}
final Proceedings proceedings = new Proceedings(); @Override
proceedings.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected void processFields(final RisDataset dataset,
final ProceedingsBundle bundle = new ProceedingsBundle(proceedings); final Proceedings publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
processTitle(dataset, proceedings, report, pretend); fieldUtil.processTitle(dataset, publication, importReport);
processYear(dataset, RisField.C2, pretend, proceedings, report); fieldUtil.processIntField(dataset, RisField.C2, publication, "year", importReport);
processAuthors(dataset, RisField.AU, importerUtil, proceedings, report, pretend); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A2, publication, importReport);
processEditors(dataset, RisField.A2, importerUtil, proceedings, report, pretend); seriesUtil.processSeries(dataset, RisField.T3, publication, importReport);
processSeries(dataset, RisField.T3, proceedings, importerUtil, pretend, report); orgaUtil.processPublisher(dataset, RisField.PB, RisField.C1, publication, importReport);
processPublisher(dataset, RisField.PB, RisField.C1, pretend, proceedings, importerUtil, report); fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processField(dataset, RisField.CY, publication, "placeOfConference", importReport);
processField(dataset, RisField.AB, proceedings, "abstract", report, pretend); fieldUtil.processDateField(dataset, RisField.DA, publication, "dateFromOfConference", importReport);
processField(dataset, RisField.CY, proceedings, "placeOfConference", report, pretend); fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
processDateField(dataset, RisField.DA, proceedings, "dateFromOfConference", report, pretend); fieldUtil.processIntField(dataset, RisField.NV, publication, "numberOfVolumes", importReport);
processField(dataset, RisField.ET, proceedings, "edition", report, pretend); fieldUtil.processField(dataset, RisField.SN, publication, "isbn", importReport);
processNumberOfVolumes(dataset, pretend, proceedings, report); fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
processField(dataset, RisField.SN, proceedings, "isbn", report, pretend); fieldUtil.processField(dataset, RisField.T2, publication, "nameOfConference", importReport);
processNumberOfPages(dataset, pretend, proceedings, report); fieldUtil.processIntField(dataset, RisField.VL, publication, "volume", importReport);
processField(dataset, RisField.T2, proceedings, "nameOfConference", report, pretend);
processVolume(dataset, pretend, proceedings, report);
return report;
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -6,41 +6,60 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisColVolUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* *
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class CpaperConverter extends AbstractRisConverter { public class CpaperConverter extends AbstractRisConverter<InProceedings, InProceedingsBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected InProceedings createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(InProceedings.BASE_DATA_OBJECT_TYPE); return new InProceedings();
}
}
final InProceedings inProceedings = new InProceedings(); @Override
inProceedings.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected InProceedingsBundle createBundle(final InProceedings publication,
final InProceedingsBundle bundle = new InProceedingsBundle(inProceedings); final boolean pretend) {
if (pretend) {
return null;
} else {
return new InProceedingsBundle(publication);
}
}
processTitle(dataset, inProceedings, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final InProceedings publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisColVolUtil colVolUtil = new RisColVolUtil(importerUtil, pretend);
processYear(dataset, pretend, inProceedings, report); fieldUtil.processTitle(dataset, publication, importReport);
processAuthors(dataset, RisField.AU, importerUtil, inProceedings, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processProceedings(dataset, RisField.T2, RisField.PY, RisField.T2, RisField.A2, RisField.PB, RisField.C1, authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
inProceedings, importerUtil, pretend, report);
processField(dataset, RisField.AB, inProceedings, "abstract", report, pretend);
processPages(dataset, RisField.SP, inProceedings, pretend, report);
return report; colVolUtil.processProceedings(dataset, RisField.T2, RisField.PY, RisField.T2, RisField.A2, RisField.PB,
RisField.C1,
publication, importReport);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processPages(dataset, RisField.SP, publication, importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -6,6 +6,10 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -15,42 +19,53 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class EbookConverter extends AbstractRisConverter { public class EbookConverter extends AbstractRisConverter<Monograph, PublicationWithPublisherBundle> {
@Override
protected Monograph createPublication(final boolean pretend) {
if (pretend) {
return null;
} else {
return new Monograph();
}
}
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected PublicationWithPublisherBundle createBundle(final Monograph publication,
final boolean pretend, final boolean pretend) {
final boolean publishNewItems) { return new PublicationWithPublisherBundle(publication);
final PublicationImportReport report = new PublicationImportReport(); }
report.setType(Monograph.BASE_DATA_OBJECT_TYPE);
final Monograph monograph = new Monograph(); @Override
monograph.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected void processFields(final RisDataset dataset,
final PublicationWithPublisherBundle bundle = new PublicationWithPublisherBundle(monograph); final Monograph publication, final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
processTitle(dataset, monograph, report, pretend); fieldUtil.processTitle(dataset, publication, importReport);
processYear(dataset, pretend, monograph, report);
processAuthors(dataset, RisField.AU, importerUtil, monograph, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processEditors(dataset, RisField.A3, importerUtil, monograph, report, pretend); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A3, publication, importReport);
processPublisher(dataset, pretend, monograph, importerUtil, report); orgaUtil.processPublisher(dataset, RisField.PB, RisField.CY, publication, importReport);
processField(dataset, RisField.AB, monograph, "abstract", report, pretend); fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
processField(dataset, RisField.ET, monograph, "edition", report, pretend);
processField(dataset, RisField.SN, monograph, "isbn", report, pretend); fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
processNumberOfPages(dataset, pretend, monograph, report); fieldUtil.processField(dataset, RisField.SN, publication, "isbn", importReport);
processVolume(dataset, pretend, monograph, report); fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
processSeries(dataset, RisField.T2, monograph, importerUtil, pretend, report); fieldUtil.processIntField(dataset, RisField.VL, publication, "volume", importReport);
return report; seriesUtil.processSeries(dataset, RisField.T2, publication, importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -6,6 +6,9 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -14,36 +17,51 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class EdbookConverter extends AbstractRisConverter { public class EdbookConverter extends AbstractRisConverter<CollectedVolume, CollectedVolumeBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected CollectedVolume createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(CollectedVolume.BASE_DATA_OBJECT_TYPE); return new CollectedVolume();
}
}
final CollectedVolume collectedVolume = new CollectedVolume(); @Override
collectedVolume.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected CollectedVolumeBundle createBundle(final CollectedVolume publication,
final CollectedVolumeBundle bundle = new CollectedVolumeBundle(collectedVolume); final boolean pretend) {
if (pretend) {
return null;
} else {
return new CollectedVolumeBundle(publication);
}
}
processTitle(dataset, collectedVolume, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final CollectedVolume publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
processEditors(dataset, RisField.AU, importerUtil, collectedVolume, report, pretend); fieldUtil.processTitle(dataset, publication, importReport);
processYear(dataset, pretend, collectedVolume, report); authorUtil.processEditors(dataset, RisField.AU, publication, importReport);
processPublisher(dataset, pretend, collectedVolume, importerUtil, report); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processField(dataset, RisField.AB, collectedVolume, "abstract", report, pretend); orgaUtil.processPublisher(dataset, RisField.PB, RisField.CY, publication, importReport);
processField(dataset, RisField.ET, collectedVolume, "edition", report, pretend);
processNumberOfVolumes(dataset, pretend, collectedVolume, report);
processField(dataset, RisField.SN, collectedVolume, "isbn", report, pretend);
processNumberOfPages(dataset, pretend, collectedVolume, report);
processVolume(dataset, pretend, collectedVolume, report);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
return report; fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
fieldUtil.processIntField(dataset, RisField.NV, publication, "numberOfVolumes", importReport);
fieldUtil.processField(dataset, RisField.SN, publication, "isbn", importReport);
fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
fieldUtil.processIntField(dataset, RisField.VL, publication, "volume", importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -7,6 +7,9 @@ import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisConverter; 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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisJournalUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -16,42 +19,56 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class EjourConverter extends AbstractRisConverter implements RisConverter { public class EjourConverter extends AbstractRisConverter<ArticleInJournal, ArticleInJournalBundle> {
@Override
protected ArticleInJournal createPublication(final boolean pretend) {
if (pretend) {
return null;
} else {
return new ArticleInJournal();
}
}
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected ArticleInJournalBundle createBundle(final ArticleInJournal publication,
final boolean pretend, final boolean pretend) {
final boolean publishNewItems) { if (pretend) {
final PublicationImportReport report = new PublicationImportReport(); return null;
report.setType(ArticleInJournal.BASE_DATA_OBJECT_TYPE); } else {
return new ArticleInJournalBundle(publication);
final ArticleInJournal article = new ArticleInJournal(); }
article.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); }
final ArticleInJournalBundle bundle = new ArticleInJournalBundle(article);
@Override
processTitle(dataset, article, report, pretend); protected void processFields(final RisDataset dataset,
final ArticleInJournal publication,
processYear(dataset, pretend, article, report); final ImporterUtil importerUtil,
final PublicationImportReport importReport,
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend); final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
processField(dataset, RisField.AB, article, "abstract", report, pretend); final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisJournalUtil journalUtil = new RisJournalUtil(importerUtil, pretend);
processJournal(dataset, RisField.T2, article, importerUtil, pretend, report);
fieldUtil.processTitle(dataset, publication, importReport);
processField(dataset, RisField.M1, article, "issue", report, pretend);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processPages(dataset, RisField.SP, article, pretend, report);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
processField(dataset, RisField.VL, article, "volume", report, pretend);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
return report;
journalUtil.processJournal(dataset, RisField.T2, publication, importReport);
fieldUtil.processField(dataset, RisField.M1, publication, "issue", importReport);
fieldUtil.processPages(dataset, RisField.SP, publication, importReport);
fieldUtil.processField(dataset, RisField.VL, publication, "volume", importReport);
} }
public RisType getRisType() { public RisType getRisType() {
return RisType.EJOUR; return RisType.EJOUR;
} }
} }

View File

@ -1,11 +1,15 @@
package com.arsdigita.cms.scipublications.importer.ris.converters; package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.InProceedingsBundle;
import com.arsdigita.cms.contenttypes.InternetArticle; import com.arsdigita.cms.contenttypes.InternetArticle;
import com.arsdigita.cms.contenttypes.InternetArticleBundle; import com.arsdigita.cms.contenttypes.InternetArticleBundle;
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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -14,44 +18,57 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter * @author Jens Pelzetter
* @version $Id$ * @version $Id$
*/ */
public class ElecConverter extends AbstractRisConverter { public class ElecConverter extends AbstractRisConverter<InternetArticle, InternetArticleBundle> {
@Override
protected InternetArticle createPublication(final boolean pretend) {
if (pretend) {
return null;
} else {
return new InternetArticle();
}
}
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected InternetArticleBundle createBundle(final InternetArticle publication, final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(InternetArticle.BASE_DATA_OBJECT_TYPE); return new InternetArticleBundle(publication);
}
final InternetArticle article = new InternetArticle(); }
article.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
final InternetArticleBundle bundle = new InternetArticleBundle(article); @Override
protected void processFields(final RisDataset dataset,
processTitle(dataset, article, report, pretend); final InternetArticle publication,
final ImporterUtil importerUtil,
processYear(dataset, pretend, article, report); final PublicationImportReport importReport,
final boolean pretend) {
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend); final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
processField(dataset, RisField.AB, article, "abstract", report, pretend); final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
processSeries(dataset, RisField.T2, article, importerUtil, pretend, report); fieldUtil.processTitle(dataset, publication, importReport);
processField(dataset, RisField.CY, article, "place", report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processField(dataset, RisField.DO, article, "doi", report, pretend); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
processField(dataset, RisField.ET, article, "edition", report, pretend); fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
processField(dataset, RisField.UR, article, "url", report, pretend); seriesUtil.processSeries(dataset, RisField.T2, publication, importReport);
return report; fieldUtil.processField(dataset, RisField.CY, publication, "place", importReport);
fieldUtil.processField(dataset, RisField.DO, publication, "doi", importReport);
fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
fieldUtil.processField(dataset, RisField.UR, publication, "url", importReport);
} }
public RisType getRisType() { public RisType getRisType() {
return RisType.ELEC; return RisType.ELEC;
} }
} }

View File

@ -6,43 +6,60 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisColVolUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* *
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class EncycConverter extends AbstractRisConverter { public class EncycConverter extends AbstractRisConverter<ArticleInCollectedVolume, ArticleInCollectedVolumeBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected ArticleInCollectedVolume createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(ArticleInCollectedVolume.BASE_DATA_OBJECT_TYPE); return new ArticleInCollectedVolume();
}
}
final ArticleInCollectedVolume article = new ArticleInCollectedVolume(); @Override
article.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected ArticleInCollectedVolumeBundle createBundle(final ArticleInCollectedVolume publication,
ArticleInCollectedVolumeBundle bundle = new ArticleInCollectedVolumeBundle(article); final boolean pretend) {
if (pretend) {
return null;
} else {
return new ArticleInCollectedVolumeBundle(publication);
}
}
processTitle(dataset, article, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final ArticleInCollectedVolume publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisColVolUtil colVolUtil = new RisColVolUtil(importerUtil, pretend);
processYear(dataset, pretend, article, report); fieldUtil.processTitle(dataset, publication, importReport);
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processCollectedVolume(dataset, RisField.T2, RisField.PY, RisField.A2, RisField.CY, RisField.PB, RisField.ET, authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
article, importerUtil, pretend, report);
processField(dataset, RisField.C1, article, "chapter", report, pretend); colVolUtil.processCollectedVolume(dataset, RisField.T2, RisField.PY, RisField.A2, RisField.CY, RisField.PB,
processField(dataset, RisField.AB, article, "abstract", report, pretend); RisField.ET,
processPages(dataset, RisField.SP, article, pretend, report); publication, importReport);
fieldUtil.processField(dataset, RisField.C1, publication, "chapter", importReport);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
return report; fieldUtil.processPages(dataset, RisField.SP, publication, importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -7,8 +7,10 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* Converter for the RIS type {@code GEN} to the SciPublications {@link GreyLiterature} * Converter for the RIS type {@code GEN} to the SciPublications {@link GreyLiterature}
@ -16,43 +18,58 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class GenConverter extends AbstractRisConverter { public class GenConverter extends AbstractRisConverter<Monograph, PublicationWithPublisherBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected Monograph createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(GreyLiterature.BASE_DATA_OBJECT_TYPE); return new Monograph();
}
}
final Monograph publication = new Monograph(); @Override
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected PublicationWithPublisherBundle createBundle(final Monograph publication, final boolean pretend) {
final PublicationWithPublisherBundle bundle = new PublicationWithPublisherBundle(publication); if (pretend) {
return null;
} else {
return new PublicationWithPublisherBundle(publication);
}
}
processTitle(dataset, publication, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final Monograph publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
processYear(dataset, pretend, publication, report); fieldUtil.processTitle(dataset, publication, importReport);
processAuthors(dataset, RisField.AU, importerUtil, publication, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
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); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processAuthors(dataset, RisField.A2, publication, importReport);
authorUtil.processAuthors(dataset, RisField.A3, publication, importReport);
authorUtil.processAuthors(dataset, RisField.A4, publication, importReport);
processField(dataset, RisField.AB, publication, "abstract", report, pretend); orgaUtil.processPublisher(dataset, RisField.PY, RisField.CY, publication, importReport);
processField(dataset, RisField.ET, publication, "edition", report, pretend); fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
processField(dataset, RisField.SN, publication, "isbn", report, pretend); fieldUtil.processField(dataset, RisField.ET, publication, "edition", importReport);
processNumberOfPages(dataset, pretend, publication, report); fieldUtil.processField(dataset, RisField.SN, publication, "isbn", importReport);
processNumberOfVolumes(dataset, pretend, publication, report); fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
processVolume(dataset, pretend, publication, report);
return report; fieldUtil.processIntField(dataset, RisField.NV, publication, "numberOfVolumes", importReport);
fieldUtil.processIntField(dataset, RisField.VL, publication, "volume", importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -6,6 +6,9 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisJournalUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -14,39 +17,52 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class JourConverter extends AbstractRisConverter { public class JourConverter extends AbstractRisConverter<ArticleInJournal, ArticleInJournalBundle> {
@Override @Override
public PublicationImportReport convert(final RisDataset dataset, protected ArticleInJournal createPublication(final boolean pretend) {
final ImporterUtil importerUtil, if (pretend) {
final boolean pretend, return null;
final boolean publishNewItems) { } else {
final PublicationImportReport report = new PublicationImportReport(); return new ArticleInJournal();
report.setType(ArticleInJournal.BASE_DATA_OBJECT_TYPE); }
}
final ArticleInJournal article = new ArticleInJournal(); @Override
article.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected ArticleInJournalBundle createBundle(final ArticleInJournal publication, final boolean pretend) {
final ArticleInJournalBundle bundle = new ArticleInJournalBundle(article); if (pretend) {
return null;
} else {
return new ArticleInJournalBundle(publication);
}
}
processTitle(dataset, article, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final ArticleInJournal publication, final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisJournalUtil journalUtil = new RisJournalUtil(importerUtil, pretend);
processYear(dataset, pretend, article, report); fieldUtil.processTitle(dataset, publication, importReport);
processAuthors(dataset, RisField.AU, importerUtil, article, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processField(dataset, RisField.AB, article, "abstract", report, pretend); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
processJournal(dataset, RisField.T2, article, importerUtil, pretend, report); fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
processField(dataset, RisField.M1, article, "issue", report, pretend); journalUtil.processJournal(dataset, RisField.T2, publication, importReport);
processPages(dataset, RisField.SP, article, pretend, report); fieldUtil.processField(dataset, RisField.M1, publication, "issue", importReport);
processField(dataset, RisField.VL, article, "volume", report, pretend); fieldUtil.processPages(dataset, RisField.SP, publication, importReport);
processIntField(dataset, RisField.M2, article, "pagesFrom", report, pretend); fieldUtil.processField(dataset, RisField.VL, publication, "volume", importReport);
return report; fieldUtil.processIntField(dataset, RisField.M2, publication, "pagesFrom", importReport);
} }
@Override @Override

View File

@ -6,49 +6,67 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/** /**
* *
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class RprtConverter extends AbstractRisConverter { public class RprtConverter extends AbstractRisConverter<GreyLiterature, UnPublishedBundle> {
@Override @Override
public PublicationImportReport convert(final RisDataset dataset, protected GreyLiterature createPublication(final boolean pretend) {
final ImporterUtil importerUtil, if (pretend) {
final boolean pretend, return null;
final boolean publishNewItems) { } else {
final PublicationImportReport report = new PublicationImportReport(); return new GreyLiterature();
report.setType(GreyLiterature.BASE_DATA_OBJECT_TYPE); }
final GreyLiterature publication = new GreyLiterature();
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
final UnPublishedBundle bundle = new UnPublishedBundle(publication);
processTitle(dataset, publication, report, pretend);
processYear(dataset, pretend, publication, report);
processAuthors(dataset, RisField.AU, importerUtil, publication, report, pretend);
processSeries(dataset, RisField.T2, publication, importerUtil, pretend, report);
processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, report);
processField(dataset, RisField.AB, publication, "abstract", report, pretend);
processField(dataset, RisField.CY, publication, "place", report, pretend);
processField(dataset, RisField.SN, publication, "number", report, pretend);
processIntField(dataset, RisField.SP, publication, "numberOfPages", report, pretend);
return report;
} }
@Override
protected UnPublishedBundle createBundle(final GreyLiterature publication,
final boolean pretend) {
if (pretend) {
return null;
} else {
return new UnPublishedBundle(publication);
}
}
@Override
protected void processFields(final RisDataset dataset,
final GreyLiterature publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
seriesUtil.processSeries(dataset, RisField.T2, publication, importReport);
orgaUtil.processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, importReport);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processField(dataset, RisField.CY, publication, "place", importReport);
fieldUtil.processField(dataset, RisField.SN, publication, "number", importReport);
fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
}
public RisType getRisType() { public RisType getRisType() {
return RisType.RPRT; return RisType.RPRT;
} }
} }

View File

@ -6,6 +6,9 @@ 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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -14,34 +17,46 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class ThesConverter extends AbstractRisConverter { public class ThesConverter extends AbstractRisConverter<GreyLiterature, UnPublishedBundle> {
public PublicationImportReport convert(final RisDataset dataset, @Override
final ImporterUtil importerUtil, protected GreyLiterature createPublication(final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(GreyLiterature.BASE_DATA_OBJECT_TYPE); return new GreyLiterature();
}
}
final GreyLiterature publication = new GreyLiterature(); @Override
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode()); protected UnPublishedBundle createBundle(final GreyLiterature publication, final boolean pretend) {
final UnPublishedBundle bundle = new UnPublishedBundle(publication); if (pretend) {
return null;
} else {
return new UnPublishedBundle(publication);
}
}
processTitle(dataset, publication, report, pretend); @Override
protected void processFields(final RisDataset dataset,
final GreyLiterature publication,
final ImporterUtil importerUtil,
final PublicationImportReport importReport,
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
processYear(dataset, pretend, publication, report); fieldUtil.processTitle(dataset, publication, importReport);
processAuthors(dataset, RisField.AU, importerUtil, publication, report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processField(dataset, RisField.AB, publication, "abstract", report, pretend); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
processField(dataset, RisField.CY, publication, "place", report, pretend);
processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, report);
processIntField(dataset, RisField.SP, publication, "numberOfPages", report, pretend);
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processField(dataset, RisField.CY, publication, "place", importReport);
orgaUtil.processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, importReport);
return report; fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -1,11 +1,17 @@
package com.arsdigita.cms.scipublications.importer.ris.converters; package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.GreyLiterature; import com.arsdigita.cms.contenttypes.GreyLiterature;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.UnPublishedBundle; import com.arsdigita.cms.contenttypes.UnPublishedBundle;
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.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.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -14,38 +20,51 @@ import com.arsdigita.kernel.Kernel;
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class UnpbConverter extends AbstractRisConverter { public class UnpbConverter extends AbstractRisConverter<GreyLiterature, UnPublishedBundle> {
@Override
protected GreyLiterature createPublication(final boolean pretend) {
if (pretend) {
return null;
} else {
return new GreyLiterature();
}
}
@Override @Override
public PublicationImportReport convert(final RisDataset dataset, protected UnPublishedBundle createBundle(final GreyLiterature publication,
final ImporterUtil importerUtil, final boolean pretend) {
final boolean pretend, if (pretend) {
final boolean publishNewItems) { return null;
final PublicationImportReport report = new PublicationImportReport(); } else {
report.setType(GreyLiterature.BASE_DATA_OBJECT_TYPE); return new UnPublishedBundle(publication);
}
final GreyLiterature publication = new GreyLiterature(); }
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
final UnPublishedBundle bundle = new UnPublishedBundle(publication); @Override
protected void processFields(final RisDataset dataset,
processTitle(dataset, publication, report, pretend); final GreyLiterature publication,
final ImporterUtil importerUtil,
processYear(dataset, pretend, publication, report); final PublicationImportReport importReport, final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
processAuthors(dataset, RisField.AU, importerUtil, publication, report, pretend); final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, report); final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
processSeries(dataset, RisField.T2, publication, importerUtil, pretend, report); fieldUtil.processTitle(dataset, publication, importReport);
processField(dataset, RisField.AB, publication, "abstract", report, pretend); fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
processField(dataset, RisField.CY, publication, "place", report, pretend);
processField(dataset, RisField.M1, publication, "number", report, pretend); authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
processIntField(dataset, RisField.SP, publication, "numberOfPages", report, pretend);
orgaUtil.processOrganization(dataset, RisField.PB, pretend, publication, importerUtil, importReport);
seriesUtil.processSeries(dataset, RisField.T2, publication, importReport);
return report;
fieldUtil.processField(dataset, RisField.AB, publication, "abstract", importReport);
fieldUtil.processField(dataset, RisField.CY, publication, "place", importReport);
fieldUtil.processField(dataset, RisField.M1, publication, "number", importReport);
fieldUtil.processIntField(dataset, RisField.SP, publication, "numberOfPages", importReport);
} }
public RisType getRisType() { public RisType getRisType() {

View File

@ -0,0 +1,86 @@
package com.arsdigita.cms.scipublications.importer.ris.converters.utils;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.importer.report.AuthorImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
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 class RisAuthorUtil {
private final ImporterUtil importerUtil;
private final boolean pretend;
public RisAuthorUtil(final ImporterUtil importerUtil, final boolean pretend) {
this.importerUtil = importerUtil;
this.pretend = pretend;
}
public void processAuthors(final RisDataset dataset,
final RisField risField,
final Publication publication,
final PublicationImportReport report) {
processAuthors(dataset, risField, publication, false, report);
}
public void processEditors(final RisDataset dataset,
final RisField risField,
final Publication publication,
final PublicationImportReport report) {
processAuthors(dataset, risField, publication, true, report);
}
private void processAuthors(final RisDataset dataset,
final RisField risField,
final Publication publication,
final boolean isEditors,
final PublicationImportReport report) {
final List<String> authors = dataset.getValues().get(risField);
if ((authors != null) && !authors.isEmpty()) {
for (String authorStr : authors) {
processAuthorStr(authorStr,
isEditors,
publication,
report,
dataset.getFirstLine());
}
}
}
private void processAuthorStr(final String authorStr,
final boolean editor,
final Publication publication,
final PublicationImportReport importReport,
final int firstLine) {
final AuthorData authorData = new AuthorData();
final String[] tokens = authorStr.split(",");
if (tokens.length == 0) {
importReport.addMessage(String.format("Failed to parse author string '%s' at dataset starting at line %d.",
authorStr, firstLine));
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);
}
}

View File

@ -0,0 +1,123 @@
package com.arsdigita.cms.scipublications.importer.ris.converters.utils;
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
import com.arsdigita.cms.contenttypes.InProceedings;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.importer.report.CollectedVolumeImportReport;
import com.arsdigita.cms.scipublications.importer.report.ProceedingsImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
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.ArrayList;
import java.util.List;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RisColVolUtil {
private final ImporterUtil importerUtil;
private final boolean pretend;
public RisColVolUtil(final ImporterUtil importerUtil, final boolean pretend) {
this.importerUtil = importerUtil;
this.pretend = pretend;
}
public 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 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 colVolEditor : colVolEditors) {
final String[] tokens = colVolEditor.split(",");
colVolEditorData.add(createAuthorData(tokens));
}
if ((colVolTitle != null) && !colVolTitle.isEmpty()) {
final CollectedVolumeImportReport colVolReport = importerUtil.processCollectedVolume(article,
colVolTitle.get(0),
colVolYear.get(0),
colVolEditorData,
colVolPublisher.get(0),
colVolPlace.get(0),
colVolEdition.get(0),
pretend);
report.setCollectedVolume(colVolReport);
}
}
@SuppressWarnings("PMD.LongVariable")
public void processProceedings(final RisDataset dataset,
final RisField procTitleField,
final RisField procYearField,
final RisField procConfNameField,
final RisField procEditorsField,
final RisField procPublisherField,
final RisField procPlaceField,
final InProceedings inProceedings,
final PublicationImportReport report) {
final List<String> procTitle = dataset.getValues().get(procTitleField);
final List<String> procYear = dataset.getValues().get(procYearField);
final List<String> procConfName = dataset.getValues().get(procConfNameField);
final List<String> procPublisher = dataset.getValues().get(procPublisherField);
final List<String> procPlace = dataset.getValues().get(procPlaceField);
final List<String> procEditors = dataset.getValues().get(procEditorsField);
final List<AuthorData> procEditorData = new ArrayList<AuthorData>();
for (String procEditor : procEditors) {
final String[] tokens = procEditor.split(", ");
procEditorData.add(createAuthorData(tokens));
}
if ((procTitle != null) && !procTitle.isEmpty()) {
final ProceedingsImportReport procReport = importerUtil.processProceedings(inProceedings,
procTitle.get(0),
procYear.get(0),
procConfName.get(0),
procEditorData,
procPublisher.get(0),
procPlace.get(0),
pretend);
report.setProceedings(procReport);
}
}
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;
}
}

View File

@ -0,0 +1,170 @@
package com.arsdigita.cms.scipublications.importer.ris.converters.utils;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.importer.report.FieldImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import java.util.Calendar;
import java.util.List;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RisFieldUtil {
private static final String PAGES_FROM = "pagesFrom";
private static final String PAGES_TO = "pagesTo";
private final boolean pretend;
public RisFieldUtil(final boolean pretend) {
this.pretend = pretend;
}
@SuppressWarnings("PMD.ConfusingTernary")
public void processTitle(final RisDataset dataset,
final Publication publication,
final PublicationImportReport report) {
final String title;
if ((dataset.getValues().get(RisField.TI) != null) && !dataset.getValues().get(RisField.TI).isEmpty()) {
title = dataset.getValues().get(RisField.TI).get(0);
} else if ((dataset.getValues().get(RisField.BT) != null) && !dataset.getValues().get(RisField.BT).isEmpty()) {
title = dataset.getValues().get(RisField.BT).get(0);
} else {
title = "Unknown";
}
if (!pretend) {
publication.setTitle(title);
}
report.setTitle(title);
}
public void processField(final RisDataset dataset,
final RisField field,
final Publication publication,
final String targetField,
final PublicationImportReport report) {
final List<String> values = dataset.getValues().get(field);
if ((values != null) && !values.isEmpty()) {
if (!pretend) {
publication.set(targetField, values.get(0));
}
report.addField(new FieldImportReport(targetField, values.get(0)));
}
}
public void processIntField(final RisDataset dataset,
final RisField field,
final Publication publication,
final String targetField,
final PublicationImportReport report) {
final List<String> values = dataset.getValues().get(field);
if ((values != null) && !values.isEmpty()) {
final String valueStr = values.get(0);
try {
final int value = Integer.parseInt(valueStr);
if (!pretend) {
publication.set(targetField, value);
}
report.addField(new FieldImportReport(targetField, valueStr));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse value of field '%s' into an integer for dataset "
+ "starting on line %d.",
field,
dataset.getFirstLine()));
}
}
}
public void processDateField(final RisDataset dataset,
final RisField field,
final Publication publication,
final String targetField,
final PublicationImportReport report) {
final List<String> values = dataset.getValues().get(field);
if ((values != null) && !values.isEmpty()) {
final String valueStr = values.get(0);
final String[] tokens = valueStr.split("/");
final Calendar calendar = Calendar.getInstance();
int year = 0;
int month = 1;
int day = 1;
try {
if (tokens.length >= 1) {
year = Integer.parseInt(tokens[0]);
}
if (tokens.length >= 2) {
month = Integer.parseInt(tokens[1]);
}
if (tokens.length >= 3) {
day = Integer.parseInt(tokens[2]);
}
calendar.clear();
calendar.set(year, month - 1, day); // month - 1 because month values of the Calendar are starting with 0
if (!pretend) {
publication.set(targetField, calendar.getTime());
}
report.addField(new FieldImportReport(targetField, String.format("%d-%d-%d",
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH))));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse value of field '%s' into an date for dataset "
+ "starting on line %d.",
field,
dataset.getFirstLine()));
}
}
}
public void processPages(final RisDataset dataset,
final RisField field,
final Publication publication,
final PublicationImportReport report) {
final List<String> values = dataset.getValues().get(field);
final String pages = values.get(0);
final String[] tokens = pages.split("-");
if (tokens.length == 2) {
try {
final int pagesFrom = Integer.parseInt(tokens[0]);
final int pagesTo = Integer.parseInt(tokens[1]);
if (!pretend) {
publication.set(PAGES_FROM, pagesFrom);
publication.set(PAGES_TO, pagesTo);
}
report.addField(new FieldImportReport(PAGES_FROM, Integer.toString(pagesFrom)));
report.addField(new FieldImportReport(PAGES_TO, Integer.toString(pagesTo)));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse pages value in dataset starting at line %d. "
+ "On of the values given is not an integer.", dataset.getFirstLine()));
}
} else if (tokens.length == 1) {
try {
final int pagesFrom = Integer.parseInt(tokens[0]);
if (!pretend) {
publication.set(PAGES_FROM, pagesFrom);
}
report.addField(new FieldImportReport(PAGES_FROM, Integer.toString(pagesFrom)));
} catch (NumberFormatException ex) {
report.addMessage(String.format("Failed to parse pages value in dataset starting at line %d. "
+ "Value is not an integer.", dataset.getFirstLine()));
}
} else if (tokens.length > 2) {
report.addMessage(String.format("Failed to parse pages value in dataset starting at line %d. "
+ "Invalid format", dataset.getFirstLine()));
}
}
}

View File

@ -0,0 +1,37 @@
package com.arsdigita.cms.scipublications.importer.ris.converters.utils;
import com.arsdigita.cms.contenttypes.ArticleInJournal;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.importer.report.JournalImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.List;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RisJournalUtil {
private final ImporterUtil importerUtil;
private final boolean pretend;
public RisJournalUtil(final ImporterUtil importerUtil, final boolean pretend) {
this.importerUtil = importerUtil;
this.pretend = pretend;
}
public void processJournal(final RisDataset dataset,
final RisField field,
final ArticleInJournal article,
final PublicationImportReport report) {
final List<String> journal = dataset.getValues().get(field);
if ((journal != null) && !journal.isEmpty()) {
final JournalImportReport journalReport = importerUtil.processJournal(article, journal.get(0), pretend);
report.setJournal(journalReport);
}
}
}

View File

@ -0,0 +1,93 @@
package com.arsdigita.cms.scipublications.importer.ris.converters.utils;
import com.arsdigita.cms.contenttypes.InternetArticle;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import com.arsdigita.cms.contenttypes.UnPublished;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.List;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RisOrgaUtil {
private final ImporterUtil importerUtil;
private final boolean pretend;
public RisOrgaUtil(final ImporterUtil importerUtil, final boolean pretend) {
this.importerUtil = importerUtil;
this.pretend = pretend;
}
public void processPublisher(final RisDataset dataset,
final RisField publisherField,
final RisField placeField,
final PublicationWithPublisher publication,
final PublicationImportReport report) {
final List<String> publisherList = dataset.getValues().get(publisherField);
final List<String> placeList = dataset.getValues().get(placeField);
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));
}
}
public void processOrganization(final RisDataset dataset,
final RisField field,
final boolean pretend,
final UnPublished publication,
final ImporterUtil importerUtil,
final PublicationImportReport report) {
final List<String> orgaList = dataset.getValues().get(field);
final String orgaName;
if ((orgaList == null) || orgaList.isEmpty()) {
orgaName = null;
} else {
orgaName = orgaList.get(0);
}
if (orgaName != null) {
report.addOrgaUnit(importerUtil.processOrganization(publication, orgaName, pretend));
}
}
public void processOrganization(final RisDataset dataset,
final RisField field,
final boolean pretend,
final InternetArticle publication,
final ImporterUtil importerUtil,
final PublicationImportReport report) {
final List<String> orgaList = dataset.getValues().get(field);
final String orgaName;
if ((orgaList == null) || orgaList.isEmpty()) {
orgaName = null;
} else {
orgaName = orgaList.get(0);
}
if (orgaName != null) {
report.addOrgaUnit(importerUtil.processOrganization(publication, orgaName, pretend));
}
}
}

View File

@ -0,0 +1,39 @@
package com.arsdigita.cms.scipublications.importer.ris.converters.utils;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.report.SeriesImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.List;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RisSeriesUtil {
private final ImporterUtil importerUtil;
private final boolean pretend;
public RisSeriesUtil(final ImporterUtil importerUtil, final boolean pretend) {
this.importerUtil = importerUtil;
this.pretend = pretend;
}
public void processSeries(final RisDataset dataset,
final RisField field,
final Publication publication,
final PublicationImportReport report) {
final List<String> series = dataset.getValues().get(field);
if ((series != null) && !series.isEmpty()) {
final SeriesImportReport seriesReport = importerUtil.processSeries(publication, series.get(0), pretend);
report.setSeries(seriesReport);
}
}
}