Grundstruktur für den RIS Importer für Publikationen

git-svn-id: https://svn.libreccm.org/ccm/trunk@1998 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-12-12 14:01:57 +00:00
parent 24d933ff6e
commit 257fe86954
24 changed files with 390 additions and 81 deletions

View File

@ -0,0 +1 @@
com.arsdigita.cms.scipublications.importer.ris.RisImporter

View File

@ -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;
} }
} }

View File

@ -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());
}*/ }*/
} }

View File

@ -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();

View File

@ -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);

View File

@ -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);

View File

@ -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();

View File

@ -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());*/
} }

View File

@ -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();

View File

@ -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);

View File

@ -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());
} }

View File

@ -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);

View File

@ -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);

View File

@ -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));
} }

View File

@ -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;

View File

@ -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);

View File

@ -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,
} }

View File

@ -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;
} }

View File

@ -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
*/ */

View File

@ -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();
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}

View File

@ -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) {
}
}

View File

@ -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));
}
}
}