Grundstruktur für den RIS Importer für Publikationen
git-svn-id: https://svn.libreccm.org/ccm/trunk@1998 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
24d933ff6e
commit
257fe86954
|
|
@ -0,0 +1 @@
|
||||||
|
com.arsdigita.cms.scipublications.importer.ris.RisImporter
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.AuthorshipCollection;
|
import com.arsdigita.cms.contenttypes.AuthorshipCollection;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
||||||
|
|
@ -31,77 +32,63 @@ import com.arsdigita.cms.contenttypes.SeriesCollection;
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractRisConverter implements RisConverter {
|
public abstract class AbstractRisConverter implements RisConverter {
|
||||||
|
|
||||||
private RisBuilder risBuilder = new RisBuilder();
|
private final RisBuilder risBuilder = new RisBuilder();
|
||||||
|
|
||||||
protected void convertAuthors(final Publication publication) {
|
protected void convertAuthors(final Publication publication) {
|
||||||
AuthorshipCollection authors;
|
final AuthorshipCollection authors = publication.getAuthors();
|
||||||
|
|
||||||
authors = publication.getAuthors();
|
|
||||||
if (authors != null) {
|
if (authors != null) {
|
||||||
while (authors.next()) {
|
while (authors.next()) {
|
||||||
if (authors.isEditor()) {
|
if (authors.isEditor()) {
|
||||||
getRisBuilder().addField(RisFields.ED,
|
getRisBuilder().addField(RisField.ED, String.format("%s,%s",
|
||||||
String.format("%s,%s",
|
authors.getAuthor().getSurname(),
|
||||||
authors.getAuthor().
|
authors.getAuthor().getGivenName()));
|
||||||
getSurname(),
|
|
||||||
authors.getAuthor().
|
|
||||||
getGivenName()));
|
|
||||||
} else {
|
} else {
|
||||||
getRisBuilder().addField(RisFields.AU,
|
getRisBuilder().addField(RisField.AU, String.format("%s,%s",
|
||||||
String.format("%s,%s",
|
authors.getAuthor().getSurname(),
|
||||||
authors.getAuthor().
|
authors.getAuthor().getGivenName()));
|
||||||
getSurname(),
|
|
||||||
authors.getAuthor().
|
|
||||||
getGivenName()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertTitle(final Publication publication) {
|
protected void convertTitle(final Publication publication) {
|
||||||
getRisBuilder().addField(RisFields.TI,
|
getRisBuilder().addField(RisField.TI, publication.getTitle());
|
||||||
publication.getTitle());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertYear(final Publication publication) {
|
protected void convertYear(final Publication publication) {
|
||||||
getRisBuilder().addField(RisFields.PY,
|
getRisBuilder().addField(RisField.PY, String.format("%d///", publication.getYearOfPublication()));
|
||||||
String.format("%d///", publication.getYearOfPublication()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertPublisher(final PublicationWithPublisher publication) {
|
protected void convertPublisher(final PublicationWithPublisher publication) {
|
||||||
convertPublisher(publication, RisFields.CY);
|
convertPublisher(publication, RisField.CY);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertPublisher(final PublicationWithPublisher publication, final RisFields placeField) {
|
protected void convertPublisher(final PublicationWithPublisher publication, final RisField placeField) {
|
||||||
if (publication.getPublisher() != null) {
|
if (publication.getPublisher() != null) {
|
||||||
if ((publication.getPublisher().getPlace() != null)
|
if ((publication.getPublisher().getPlace() != null) && !(publication.getPublisher().getPlace().isEmpty())) {
|
||||||
&& !(publication.getPublisher().getPlace().isEmpty())) {
|
|
||||||
getRisBuilder().addField(placeField, publication.getPublisher().getPlace());
|
getRisBuilder().addField(placeField, publication.getPublisher().getPlace());
|
||||||
}
|
}
|
||||||
|
|
||||||
getRisBuilder().addField(RisFields.PB,
|
getRisBuilder().addField(RisField.PB, publication.getPublisher().getTitle());
|
||||||
publication.getPublisher().getTitle());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertISBN(final PublicationWithPublisher publication) {
|
protected void convertISBN(final PublicationWithPublisher publication) {
|
||||||
if (publication.getISBN() != null) {
|
if (publication.getISBN() != null) {
|
||||||
getRisBuilder().addField(RisFields.SN,
|
getRisBuilder().addField(RisField.SN, publication.getISBN());
|
||||||
publication.getISBN());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertVolume(final PublicationWithPublisher publication) {
|
protected void convertVolume(final PublicationWithPublisher publication) {
|
||||||
if (publication.getVolume() != null) {
|
if (publication.getVolume() != null) {
|
||||||
getRisBuilder().addField(RisFields.VL,
|
getRisBuilder().addField(RisField.VL, publication.getVolume().toString());
|
||||||
publication.getVolume().toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void convertEdition(final PublicationWithPublisher publication) {
|
protected void convertEdition(final PublicationWithPublisher publication) {
|
||||||
if (publication.getEdition() != null) {
|
if (publication.getEdition() != null) {
|
||||||
getRisBuilder().addField(RisFields.ET,
|
getRisBuilder().addField(RisField.ET, publication.getEdition());
|
||||||
publication.getEdition());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,8 +98,7 @@ public abstract class AbstractRisConverter implements RisConverter {
|
||||||
|
|
||||||
seriesColl.next();
|
seriesColl.next();
|
||||||
|
|
||||||
getRisBuilder().addField(RisFields.T3,
|
getRisBuilder().addField(RisField.T3, seriesColl.getSeries().getTitle());
|
||||||
seriesColl.getSeries().getTitle());
|
|
||||||
|
|
||||||
seriesColl.close();
|
seriesColl.close();
|
||||||
}
|
}
|
||||||
|
|
@ -121,4 +107,5 @@ public abstract class AbstractRisConverter implements RisConverter {
|
||||||
protected RisBuilder getRisBuilder() {
|
protected RisBuilder getRisBuilder() {
|
||||||
return risBuilder;
|
return risBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
|
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -50,22 +52,22 @@ public class ArticleInCollectedVolumeConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
article = (ArticleInCollectedVolume) publication;
|
article = (ArticleInCollectedVolume) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.CHAP);
|
getRisBuilder().setType(RisType.CHAP);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
||||||
if (article.getCollectedVolume() != null) {
|
if (article.getCollectedVolume() != null) {
|
||||||
getRisBuilder().addField(RisFields.T2,
|
getRisBuilder().addField(RisField.T2,
|
||||||
article.getCollectedVolume().getTitle());
|
article.getCollectedVolume().getTitle());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (article.getPagesFrom() != null) {
|
if (article.getPagesFrom() != null) {
|
||||||
getRisBuilder().addField(RisFields.SP,
|
getRisBuilder().addField(RisField.SP,
|
||||||
String.format("%d - %d", article.getPagesFrom(), article.getPagesTo()));
|
String.format("%d - %d", article.getPagesFrom(), article.getPagesTo()));
|
||||||
/*if (article.getPagesTo() != null) {
|
/*if (article.getPagesTo() != null) {
|
||||||
getRisBuilder().addField(RisFields.EP,
|
getRisBuilder().addField(RisField.EP,
|
||||||
article.getPagesTo().toString());
|
article.getPagesTo().toString());
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.ArticleInJournal;
|
import com.arsdigita.cms.contenttypes.ArticleInJournal;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -50,36 +52,36 @@ public class ArticleInJournalConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
article = (ArticleInJournal) publication;
|
article = (ArticleInJournal) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.JOUR);
|
getRisBuilder().setType(RisType.JOUR);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
||||||
if (article.getJournal() != null) {
|
if (article.getJournal() != null) {
|
||||||
getRisBuilder().addField(RisFields.T2,
|
getRisBuilder().addField(RisField.T2,
|
||||||
article.getJournal().getTitle());
|
article.getJournal().getTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (article.getIssue() != null) {
|
if (article.getIssue() != null) {
|
||||||
getRisBuilder().addField(RisFields.M1, article.getIssue());
|
getRisBuilder().addField(RisField.M1, article.getIssue());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (article.getVolume() != null) {
|
if (article.getVolume() != null) {
|
||||||
getRisBuilder().addField(RisFields.VL,
|
getRisBuilder().addField(RisField.VL,
|
||||||
article.getVolume().toString());
|
article.getVolume().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (article.getPagesFrom() != null) {
|
if (article.getPagesFrom() != null) {
|
||||||
getRisBuilder().addField(RisFields.SP,
|
getRisBuilder().addField(RisField.SP,
|
||||||
String.format("%d - %d", article.getPagesFrom(), article.getPagesTo()));
|
String.format("%d - %d", article.getPagesFrom(), article.getPagesTo()));
|
||||||
/*
|
/*
|
||||||
* getRisBuilder().addField(RisFields.EP,
|
* getRisBuilder().addField(RisField.EP,
|
||||||
article.getPagesTo().toString());
|
article.getPagesTo().toString());
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (article.getReviewed()) {
|
if (article.getReviewed()) {
|
||||||
getRisBuilder().addField(RisFields.RI, "");
|
getRisBuilder().addField(RisField.RI, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
return getRisBuilder().toRis();
|
return getRisBuilder().toRis();
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
import com.arsdigita.cms.contenttypes.CollectedVolume;
|
import com.arsdigita.cms.contenttypes.CollectedVolume;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -47,7 +48,7 @@ public class CollectedVolumeConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
collectedVolume = (CollectedVolume) publication;
|
collectedVolume = (CollectedVolume) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.EDBOOK);
|
getRisBuilder().setType(RisType.EDBOOK);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
|
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
import com.arsdigita.cms.contenttypes.Expertise;
|
import com.arsdigita.cms.contenttypes.Expertise;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -50,7 +51,7 @@ public class ExpertiseConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
expertise = (Expertise) publication;
|
expertise = (Expertise) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.GEN);
|
getRisBuilder().setType(RisType.GEN);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.GreyLiterature;
|
import com.arsdigita.cms.contenttypes.GreyLiterature;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -29,21 +31,21 @@ public class GreyLiteratureConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
greyLiterature = (GreyLiterature) publication;
|
greyLiterature = (GreyLiterature) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.UNPB);
|
getRisBuilder().setType(RisType.UNPD);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
||||||
if (greyLiterature.getPlace() != null) {
|
if (greyLiterature.getPlace() != null) {
|
||||||
getRisBuilder().addField(RisFields.CY, greyLiterature.getPlace());
|
getRisBuilder().addField(RisField.CY, greyLiterature.getPlace());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (greyLiterature.getNumber() != null) {
|
if (greyLiterature.getNumber() != null) {
|
||||||
getRisBuilder().addField(RisFields.M1, greyLiterature.getNumber());
|
getRisBuilder().addField(RisField.M1, greyLiterature.getNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (greyLiterature.getOrganization() != null) {
|
if (greyLiterature.getOrganization() != null) {
|
||||||
getRisBuilder().addField(RisFields.PB, greyLiterature.getOrganization().getTitle());
|
getRisBuilder().addField(RisField.PB, greyLiterature.getOrganization().getTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
return getRisBuilder().toRis();
|
return getRisBuilder().toRis();
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.InProceedings;
|
import com.arsdigita.cms.contenttypes.InProceedings;
|
||||||
import com.arsdigita.cms.contenttypes.Proceedings;
|
import com.arsdigita.cms.contenttypes.Proceedings;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
@ -51,7 +53,7 @@ public class InProceedingsConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
inProceedings = (InProceedings) publication;
|
inProceedings = (InProceedings) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.CPAPER);
|
getRisBuilder().setType(RisType.CPAPER);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
@ -59,7 +61,7 @@ public class InProceedingsConverter extends AbstractRisConverter {
|
||||||
if (inProceedings.getProceedings() != null) {
|
if (inProceedings.getProceedings() != null) {
|
||||||
final Proceedings proceedings = inProceedings.getProceedings();
|
final Proceedings proceedings = inProceedings.getProceedings();
|
||||||
if (proceedings.getPlaceOfConference() != null) {
|
if (proceedings.getPlaceOfConference() != null) {
|
||||||
getRisBuilder().addField(RisFields.CY, proceedings.getPlaceOfConference());
|
getRisBuilder().addField(RisField.CY, proceedings.getPlaceOfConference());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -67,11 +69,11 @@ public class InProceedingsConverter extends AbstractRisConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inProceedings.getPagesFrom() != null) {
|
if (inProceedings.getPagesFrom() != null) {
|
||||||
getRisBuilder().addField(RisFields.SP,
|
getRisBuilder().addField(RisField.SP,
|
||||||
String.format("%d - %d",
|
String.format("%d - %d",
|
||||||
inProceedings.getPagesFrom(),
|
inProceedings.getPagesFrom(),
|
||||||
inProceedings.getPagesTo()));
|
inProceedings.getPagesTo()));
|
||||||
/*getRisBuilder().addField(RisFields.EP,
|
/*getRisBuilder().addField(RisField.EP,
|
||||||
inProceedings.getPagesTo().toString());*/
|
inProceedings.getPagesTo().toString());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.InternetArticle;
|
import com.arsdigita.cms.contenttypes.InternetArticle;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -50,17 +52,17 @@ public class InternetArticleConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
article = (InternetArticle) publication;
|
article = (InternetArticle) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.EJOUR);
|
getRisBuilder().setType(RisType.EJOUR);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
||||||
if (article.getReviewed()) {
|
if (article.getReviewed()) {
|
||||||
getRisBuilder().addField(RisFields.RI, "");
|
getRisBuilder().addField(RisField.RI, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (article.getUrl() != null) {
|
if (article.getUrl() != null) {
|
||||||
getRisBuilder().addField(RisFields.UR, article.getUrl());
|
getRisBuilder().addField(RisField.UR, article.getUrl());
|
||||||
}
|
}
|
||||||
|
|
||||||
return getRisBuilder().toRis();
|
return getRisBuilder().toRis();
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
import com.arsdigita.cms.contenttypes.Monograph;
|
import com.arsdigita.cms.contenttypes.Monograph;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -48,7 +49,7 @@ public class MonographConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
monograph = (Monograph) publication;
|
monograph = (Monograph) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.BOOK);
|
getRisBuilder().setType(RisType.BOOK);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import com.arsdigita.cms.contenttypes.Proceedings;
|
import com.arsdigita.cms.contenttypes.Proceedings;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
|
||||||
|
|
@ -50,21 +52,21 @@ public class ProceedingsConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
proceedings = (Proceedings) publication;
|
proceedings = (Proceedings) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.CONF);
|
getRisBuilder().setType(RisType.CONF);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
||||||
convertVolume(proceedings);
|
convertVolume(proceedings);
|
||||||
convertSeries(publication);
|
convertSeries(publication);
|
||||||
convertPublisher(proceedings, RisFields.C1);
|
convertPublisher(proceedings, RisField.C1);
|
||||||
|
|
||||||
if (proceedings.getPlaceOfConference() != null) {
|
if (proceedings.getPlaceOfConference() != null) {
|
||||||
getRisBuilder().addField(RisFields.CY, proceedings.getPlaceOfConference());
|
getRisBuilder().addField(RisField.CY, proceedings.getPlaceOfConference());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (proceedings.getNameOfConference() != null) {
|
if (proceedings.getNameOfConference() != null) {
|
||||||
getRisBuilder().addField(RisFields.T2, proceedings.getNameOfConference());
|
getRisBuilder().addField(RisField.T2, proceedings.getNameOfConference());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
||||||
|
|
||||||
|
|
@ -33,7 +34,7 @@ import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
||||||
public class PublicationConverter extends AbstractRisConverter {
|
public class PublicationConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
public String convert(final Publication publication) {
|
public String convert(final Publication publication) {
|
||||||
getRisBuilder().setType(RisTypes.GEN);
|
getRisBuilder().setType(RisType.GEN);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
|
||||||
|
|
||||||
|
|
@ -47,7 +48,7 @@ public class PublicationWithPublisherConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
_publication = (PublicationWithPublisher) publication;
|
_publication = (PublicationWithPublisher) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.GEN);
|
getRisBuilder().setType(RisType.GEN);
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
convertYear(publication);
|
convertYear(publication);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,9 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisFieldValue;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -33,13 +36,13 @@ public class RisBuilder {
|
||||||
/**
|
/**
|
||||||
* Type of the reference
|
* Type of the reference
|
||||||
*/
|
*/
|
||||||
private RisTypes type;
|
private RisType type;
|
||||||
/**
|
/**
|
||||||
* Fields of the reference.
|
* Fields of the reference.
|
||||||
*/
|
*/
|
||||||
private List<RisFieldValue> fields =new ArrayList<RisFieldValue>();
|
private List<RisFieldValue> fields =new ArrayList<RisFieldValue>();
|
||||||
//private Map<RisFields, String> fields = new EnumMap<RisFields, String>(
|
//private Map<RisFields, String> fields = new EnumMap<RisFields, String>(
|
||||||
// RisFields.class);
|
// RisField.class);
|
||||||
|
|
||||||
public RisBuilder() {
|
public RisBuilder() {
|
||||||
}
|
}
|
||||||
|
|
@ -49,7 +52,7 @@ public class RisBuilder {
|
||||||
*
|
*
|
||||||
* @param type Valid RIS type
|
* @param type Valid RIS type
|
||||||
*/
|
*/
|
||||||
public void setType(final RisTypes type) {
|
public void setType(final RisType type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -59,7 +62,7 @@ public class RisBuilder {
|
||||||
* @param field The name of the field.
|
* @param field The name of the field.
|
||||||
* @param value The value of the field.
|
* @param value The value of the field.
|
||||||
*/
|
*/
|
||||||
public void addField(final RisFields field, final String value) {
|
public void addField(final RisField field, final String value) {
|
||||||
//fields.put(field, value);
|
//fields.put(field, value);
|
||||||
fields.add(new RisFieldValue(field, value));
|
fields.add(new RisFieldValue(field, value));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
import com.arsdigita.cms.scipublications.imexporter.PublicationFormat;
|
|
||||||
import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporter;
|
import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporter;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.PublicationFormat;
|
||||||
import javax.activation.MimeType;
|
import javax.activation.MimeType;
|
||||||
import javax.activation.MimeTypeParseException;
|
import javax.activation.MimeTypeParseException;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
import com.arsdigita.cms.contenttypes.Publication;
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
import com.arsdigita.cms.contenttypes.WorkingPaper;
|
import com.arsdigita.cms.contenttypes.WorkingPaper;
|
||||||
|
|
||||||
|
|
@ -50,7 +51,7 @@ public class WorkingPaperConverter extends AbstractRisConverter {
|
||||||
|
|
||||||
workingPaper = (WorkingPaper) publication;
|
workingPaper = (WorkingPaper) publication;
|
||||||
|
|
||||||
getRisBuilder().setType(RisTypes.UNPB);
|
getRisBuilder().setType(RisType.UNPD);
|
||||||
|
|
||||||
convertAuthors(publication);
|
convertAuthors(publication);
|
||||||
convertTitle(publication);
|
convertTitle(publication);
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.imexporter.ris;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|
@ -32,7 +32,7 @@ package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
*
|
*
|
||||||
* @author Jens Pelzetter
|
* @author Jens Pelzetter
|
||||||
*/
|
*/
|
||||||
public enum RisFields {
|
public enum RisField {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reference ID. According to the specification not used by reference
|
* Reference ID. According to the specification not used by reference
|
||||||
|
|
@ -342,5 +342,13 @@ public enum RisFields {
|
||||||
DA,
|
DA,
|
||||||
C1,
|
C1,
|
||||||
C2,
|
C2,
|
||||||
C3
|
C3,
|
||||||
|
/**
|
||||||
|
* Begin of a new reference. Value is the type of the reference.
|
||||||
|
*/
|
||||||
|
TY,
|
||||||
|
/**
|
||||||
|
* End of reference. Last tag of a dataset. Has no value.
|
||||||
|
*/
|
||||||
|
ER,
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.imexporter.ris;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -7,22 +7,22 @@ package com.arsdigita.cms.scipublications.exporter.ris;
|
||||||
*/
|
*/
|
||||||
public class RisFieldValue {
|
public class RisFieldValue {
|
||||||
|
|
||||||
private RisFields name;
|
private RisField name;
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
public RisFieldValue() {
|
public RisFieldValue() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RisFieldValue(final RisFields name, final String value) {
|
public RisFieldValue(final RisField name, final String value) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RisFields getName() {
|
public RisField getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setName(final RisFields name) {
|
public void setName(final RisField name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -17,14 +17,14 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.cms.scipublications.exporter.ris;
|
package com.arsdigita.cms.scipublications.imexporter.ris;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reference types supported by the RIS format.
|
* Reference types supported by the RIS format.
|
||||||
*
|
*
|
||||||
* @author Jens Pelzetter
|
* @author Jens Pelzetter
|
||||||
*/
|
*/
|
||||||
public enum RisTypes {
|
public enum RisType {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract
|
* Abstract
|
||||||
|
|
@ -173,7 +173,7 @@ public enum RisTypes {
|
||||||
/**
|
/**
|
||||||
* Unpublished work
|
* Unpublished work
|
||||||
*/
|
*/
|
||||||
UNPB,
|
UNPD,
|
||||||
/**
|
/**
|
||||||
* Video recording
|
* Video recording
|
||||||
*/
|
*/
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.report.ImportReport;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for importing RisConverter.
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public interface RisConverter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a RIS dataset for a publiction of the type supported by the converter to an instance of SciPublication.
|
||||||
|
* An implementation of this method is also responsible for publishing the publication item created (if
|
||||||
|
* {@code publishNewItems} is set to {@code true}.
|
||||||
|
*
|
||||||
|
* @param dataset
|
||||||
|
* @param report
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
convert(RisDataset dataset, ImportReport report, boolean pretend, boolean publishNewItems);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return The RIS type supported by the converter implementation.
|
||||||
|
*/
|
||||||
|
RisType getRisType();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.contenttypes.Publication;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.SciPublicationsImportException;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.report.ImportReport;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Central access point to retrieve {@link RisConverter}s for importing publication data in the RIS format.
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class RisConverters {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(RisConverters.class);
|
||||||
|
private Map<RisType, RisConverter> converters = new HashMap<RisType, RisConverter>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constructor loads all available implementations of the
|
||||||
|
* {@link RisConverter} interface using the {@link ServiceLoader}.
|
||||||
|
*/
|
||||||
|
private RisConverts() {
|
||||||
|
LOGGER.debug("Loading RIS import converters...");
|
||||||
|
final ServiceLoader<RisConverter> converterServices = ServiceLoader.load(RisConverter.class);
|
||||||
|
|
||||||
|
for (RisConverter converter : converterServices) {
|
||||||
|
LOGGER.debug(String.format("Found converter for RIS type '%s'.", converter.getRisType().toString()));
|
||||||
|
|
||||||
|
converters.put(converter.getRisType(), converter);
|
||||||
|
}
|
||||||
|
LOGGER.debug(String.format("Found %d import converters.", converters.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Keeps the instance of this class.
|
||||||
|
*/
|
||||||
|
private static class Instance {
|
||||||
|
|
||||||
|
private static RisConverters INSTANCE = new RisConverters();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return The instance of this class.
|
||||||
|
*/
|
||||||
|
public static RisConverters getInstance() {
|
||||||
|
return Instance.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dataset
|
||||||
|
* @param report
|
||||||
|
* @param pretend
|
||||||
|
* @param publishNewItems
|
||||||
|
* @throws SciPublicationsImportException
|
||||||
|
*/
|
||||||
|
public void convert(final RisDataset dataset,
|
||||||
|
final ImportReport report,
|
||||||
|
final boolean pretend,
|
||||||
|
final boolean publishNewItems)
|
||||||
|
throws SciPublicationsImportException {
|
||||||
|
try {
|
||||||
|
LOGGER.debug(String.format("Trying to find converter for RIS type '%s'...", dataset.getType().toString()));
|
||||||
|
RisConverter converter = converters.get(dataset.getType());
|
||||||
|
|
||||||
|
if (converter == null) {
|
||||||
|
throw new SciPublicationsImportException(String.format("Failed to find a converter for RIS type '%s'.",
|
||||||
|
dataset.getType().toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
converter = converter.getClass().newInstance();
|
||||||
|
|
||||||
|
converter.convert(dataset, report, pretend, publishNewItems);
|
||||||
|
} catch (InstantiationException ex) {
|
||||||
|
logger.warn("Failed to instaniate RIS converter.", ex);
|
||||||
|
return null;
|
||||||
|
} catch (IllegalAccessException ex) {
|
||||||
|
logger.warn("Failed to instaniate RIS converter.", ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class RisDataset {
|
||||||
|
|
||||||
|
private final RisType type;
|
||||||
|
private final Map<RisField, String> values = new EnumMap<RisField, String>(RisField.class);
|
||||||
|
|
||||||
|
public RisDataset(final RisType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RisType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<RisField, String> getValues() {
|
||||||
|
return Collections.unmodifiableMap(values);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.ris;
|
||||||
|
|
||||||
|
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 java.util.List;
|
||||||
|
import javax.activation.MimeType;
|
||||||
|
import javax.activation.MimeTypeParseException;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class RisImporter implements SciPublicationsImporter {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(RisImporter.class);
|
||||||
|
private final RisConverters converters = RisConverters.getInstance();
|
||||||
|
|
||||||
|
public PublicationFormat getSupportedFormat() {
|
||||||
|
try {
|
||||||
|
return new PublicationFormat("RIS", new MimeType("application/x-research-info-systems"), "ris");
|
||||||
|
} 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 {
|
||||||
|
final String[] lines = publications.split("\r\n");
|
||||||
|
|
||||||
|
final RisParser parser = new RisParser();
|
||||||
|
final List<RisDataset> datasets = parser.parse(lines);
|
||||||
|
|
||||||
|
final ImportReport report = new ImportReport();
|
||||||
|
report.setImporter("RIS Importer");
|
||||||
|
report.setPretend(pretend);
|
||||||
|
|
||||||
|
|
||||||
|
for (RisDataset dataset : datasets) {
|
||||||
|
converters.convert(dataset, importReport, pretend, publishNewItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ImportReport;
|
||||||
|
}
|
||||||
|
|
||||||
|
private processPublication(final RisDataset dataset,
|
||||||
|
final ImportReport importReport,
|
||||||
|
final boolean pretend,
|
||||||
|
final boolean publishNewItems) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.arsdigita.cms.scipublications.importer.ris;
|
||||||
|
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisFieldValue;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
|
||||||
|
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
|
||||||
|
import com.arsdigita.cms.scipublications.importer.SciPublicationsImportException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class RisParser {
|
||||||
|
|
||||||
|
public RisParser() {
|
||||||
|
//Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<RisDataset> parse(final String[] lines) throws SciPublicationsImportException {
|
||||||
|
final List<RisDataset> entries = new ArrayList<RisDataset>();
|
||||||
|
boolean openDataset = false;
|
||||||
|
|
||||||
|
RisFieldValue field;
|
||||||
|
for (int i = 0; i < lines.length; i++) {
|
||||||
|
field = parseRisLine(lines[i], i);
|
||||||
|
|
||||||
|
if (RisField.TY.equals(field.getName())) {
|
||||||
|
if (openDataset) {
|
||||||
|
throw new SciPublicationsImportException(
|
||||||
|
String.format("Start of new reference before preceding reference was closed at line %d. "
|
||||||
|
+ "Aborting import.", i + 1));
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
entries.add(startDataset(field.getValue()));
|
||||||
|
openDataset = true;
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
throw new SciPublicationsImportException(String.format("Invalid type at line %d.", i + 1), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (RisField.ER.equals(field.getName())) {
|
||||||
|
openDataset = false;
|
||||||
|
} else {
|
||||||
|
entries.get(entries.size() - 1).getValues().put(field.getName(), field.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Collections.unmodifiableList(entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RisDataset startDataset(final String type) {
|
||||||
|
final RisType risType = RisType.valueOf(type);
|
||||||
|
return new RisDataset(risType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RisFieldValue parseRisLine(final String line, final int index) throws SciPublicationsImportException {
|
||||||
|
final String[] tokens = line.split(" - ");
|
||||||
|
|
||||||
|
if (tokens.length == 2) {
|
||||||
|
final RisField fieldName;
|
||||||
|
try {
|
||||||
|
fieldName = RisField.valueOf(tokens[0]);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
throw new SciPublicationsImportException(String.format("Unkwown tag '%s' in line %d. Aborting import.",
|
||||||
|
tokens[0], index + 1), ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new RisFieldValue(fieldName, line);
|
||||||
|
} else if ((tokens.length == 1) && RisField.ER.toString().equals(tokens[0])) {
|
||||||
|
return new RisFieldValue(RisField.ER, "");
|
||||||
|
} else {
|
||||||
|
throw new SciPublicationsImportException(String.format("Invalid RIS data in line %d. Aborting import.",
|
||||||
|
index + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue