Trunk sollte jetzt wieder kompilieren.

git-svn-id: https://svn.libreccm.org/ccm/trunk@732 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-02-04 10:06:12 +00:00
parent df79984150
commit 4156e06a6f
9 changed files with 395 additions and 20 deletions

View File

@ -46,25 +46,10 @@ public class BibTeXExporter implements SciPublicationsExporter {
}
public String exportPublication(final Publication publication) {
BibTeXBuilder builder;
builder = BibTeXBuilders.getInstance().
getBibTeXBuilderForCcmPublicationtType(publication.getClass().
getName());
if ((builder == null) && publication instanceof PublicationWithPublisher) {
builder = BibTeXBuilders.getInstance().
getBibTeXBuilderForCcmPublicationtType(
PublicationWithPublisher.class.getName());
} else {
builder = BibTeXBuilders.getInstance().
getBibTeXBuilderForCcmPublicationtType(Publication.class.
getName());
}
throw new UnsupportedOperationException("Not implemented yet.");
return builder.toBibTeX();
}
}

View File

@ -32,7 +32,7 @@ public class BibTeXBuilders {
return Instance.INSTANCE;
}
public BibTeXBuilder getBibTeXBuilderForCcmPublicationtType(final String type) {
public BibTeXBuilder getBibTeXBuilderForType(final String type) {
return builders.get(type);
}
}

View File

@ -0,0 +1,90 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
import com.arsdigita.cms.contenttypes.AuthorshipCollection;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.BibTeXBuilder;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.BibTeXBuilders;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.BibTeXField;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.UnsupportedFieldException;
/**
*
* @author jensp
*/
public abstract class AbstractBibTeXConverter implements BibTeXConverter {
private BibTeXBuilder bibTeXBuilder;
protected void convertAuthors(final Publication publication) {
AuthorshipCollection authors;
authors = publication.getAuthors();
if (authors != null) {
while (authors.next()) {
if (authors.isEditor()) {
getBibTeXBuilder().addEditor(authors.getAuthor());
} else {
getBibTeXBuilder().addAuthor(authors.getAuthor());
}
}
}
}
protected void convertTitle(final Publication publication)
throws UnsupportedFieldException {
getBibTeXBuilder().setField(BibTeXField.TITLE, publication.getTitle());
}
protected void convertYear(final Publication publication)
throws UnsupportedFieldException {
if (publication.getYearOfPublication() != null) {
getBibTeXBuilder().setField(BibTeXField.YEAR,
publication.getYearOfPublication().
toString());
}
}
protected void convertPublisher(final PublicationWithPublisher publication)
throws UnsupportedFieldException {
if (publication.getPublisher() != null) {
getBibTeXBuilder().setField(BibTeXField.PUBLISHER,
publication.getPublisher().getTitle());
}
}
protected void convertISBN(final PublicationWithPublisher publication)
throws UnsupportedFieldException {
if (publication.getISBN() != null) {
getBibTeXBuilder().setField(BibTeXField.ISBN,
publication.getISBN());
}
}
protected void convertVolume(final PublicationWithPublisher publication)
throws UnsupportedFieldException {
if (publication.getVolume() != null) {
getBibTeXBuilder().setField(BibTeXField.VOLUME,
publication.getVolume().toString());
}
}
protected void convertEdition(final PublicationWithPublisher publication)
throws UnsupportedFieldException {
if (publication.getEdition() != null) {
getBibTeXBuilder().setField(BibTeXField.EDITION,
publication.getEdition());
}
}
protected BibTeXBuilder getBibTeXBuilder() {
if (bibTeXBuilder == null) {
bibTeXBuilder = BibTeXBuilders.getInstance().getBibTeXBuilderForType(
getBibTeXType());
}
return bibTeXBuilder;
}
protected abstract String getBibTeXType();
}

View File

@ -0,0 +1,104 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
import com.arsdigita.cms.contenttypes.SeriesCollection;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.BibTeXBuilder;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.BibTeXField;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.UnsupportedFieldException;
import org.apache.log4j.Logger;
/**
*
* @author jensp
*/
public class ArticleInCollectedVolumeConverter extends AbstractBibTeXConverter {
private static final Logger logger = Logger.getLogger(
ArticleInCollectedVolumeConverter.class);
@Override
protected String getBibTeXType() {
return "incollection";
}
public String convert(final Publication publication) {
ArticleInCollectedVolume article;
BibTeXBuilder builder;
if (!(publication instanceof ArticleInCollectedVolume)) {
throw new UnsupportedCcmTypeException(
String.format("The ArticleInCollectedVolumeConverter only "
+ "supports publication types which are of the"
+ "type ArticleInCollectedVolume or which are "
+ "extending "
+ "ArticleInCollectedVolume. The "
+ "provided publication is of type '%s' which "
+ "is not of type "
+ "ArticleInCollectedVolume and does not "
+ "extends ArticleInCollectedVolume.",
publication.getClass().getName()));
}
article = (ArticleInCollectedVolume) publication;
convertAuthors(publication);
builder = getBibTeXBuilder();
try {
convertTitle(publication);
convertYear(publication);
builder.setField(BibTeXField.BOOKTITLE,
article.getCollectedVolume().getTitle());
if (article.getCollectedVolume().getPublisher() == null) {
builder.setField(BibTeXField.PUBLISHER, "");
} else {
builder.setField(BibTeXField.PUBLISHER,
article.getCollectedVolume().getPublisher().
getTitle());
}
if (article.getCollectedVolume().getVolume() != null) {
builder.setField(BibTeXField.VOLUME,
article.getCollectedVolume().getVolume().
toString());
}
SeriesCollection seriesColl =
article.getCollectedVolume().getSeries();
if ((seriesColl != null) && (seriesColl.size() > 0)) {
seriesColl.next();
builder.setField(BibTeXField.SERIES,
seriesColl.getSeries().getTitle());
seriesColl.close();
}
if (article.getChapter() != null) {
builder.setField(BibTeXField.CHAPTER, article.getChapter());
}
if (article.getPagesFrom() != null) {
builder.setField(BibTeXField.PAGES,
String.format("%s - %s",
article.getPagesFrom(),
article.getPagesTo()));
}
if (article.getCollectedVolume().getEdition() != null) {
builder.setField(BibTeXField.EDITION,
article.getCollectedVolume().getEdition());
}
} catch (UnsupportedFieldException ex) {
logger.warn("Tried to set unsupported BibTeX field while "
+ "converting a publication");
}
return builder.toBibTeX();
}
public String getCcmType() {
return ArticleInCollectedVolume.class.getName();
}
}

View File

@ -1,6 +1,7 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import java.util.HashMap;
import java.util.Map;
@ -11,13 +12,13 @@ import java.util.Map;
public class BibTeXConverters {
private Map<String, BibTeXConverter> converters =
new HashMap<String, BibTeXConverter>();
new HashMap<String, BibTeXConverter>();
private BibTeXConverters() {
}
private static class Instance {
private static BibTeXConverters INSTANCE = new BibTeXConverters();
}
@ -30,7 +31,16 @@ public class BibTeXConverters {
converter = converters.get(publication.getClass().getName());
if (converter == null) {
if (publication instanceof PublicationWithPublisher) {
converter = converters.get(PublicationWithPublisher.class.
getName());
} else {
converter = converters.get(Publication.class.getName());
}
}
return converter.convert(publication);
}
}

View File

@ -0,0 +1,58 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.UnsupportedFieldException;
import org.apache.log4j.Logger;
/**
*
* @author jensp
*/
public class MonographConverter extends AbstractBibTeXConverter {
private static final Logger logger = Logger.getLogger(
MonographConverter.class);
@Override
protected String getBibTeXType() {
return "book";
}
public String convert(final Publication publication) {
Monograph monograph;
if (!(publication instanceof Monograph)) {
throw new UnsupportedCcmTypeException(
String.format("The MonographConverter only "
+ "supports publication types which are of the"
+ "type Monograph or which are extending "
+ "Monograh. The "
+ "provided publication is of type '%s' which "
+ "is not of type Monograph and does not "
+ "extends Monograph.",
publication.getClass().getName()));
}
monograph = (Monograph) publication;
convertAuthors(publication);
try {
convertTitle(publication);
convertYear(publication);
convertPublisher(monograph);
convertISBN(monograph);
convertEdition(monograph);
} catch (UnsupportedFieldException ex) {
logger.warn("Tried to set unsupported BibTeX field while "
+ "converting a publication");
}
return getBibTeXBuilder().toBibTeX();
}
public String getCcmType() {
return Monograph.class.getName();
}
}

View File

@ -0,0 +1,39 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.UnsupportedFieldException;
import org.apache.log4j.Logger;
/**
*
* @author jensp
*/
public class PublicationConverter extends AbstractBibTeXConverter {
private static final Logger logger = Logger.getLogger(
PublicationConverter.class);
@Override
public String convert(final Publication publication) {
convertAuthors(publication);
try {
convertTitle(publication);
convertYear(publication);
} catch (UnsupportedFieldException ex) {
logger.warn("Tried to set unsupported BibTeX field while "
+ "converting a publication");
}
return getBibTeXBuilder().toBibTeX();
}
@Override
public String getBibTeXType() {
return "misc";
}
@Override
public String getCcmType() {
return Publication.class.getName();
}
}

View File

@ -0,0 +1,57 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import com.arsdigita.cms.scipublications.exporter.bibtex.builders.UnsupportedFieldException;
import org.apache.log4j.Logger;
/**
*
* @author jensp
*/
public class PublicationWithPublisherConverter extends AbstractBibTeXConverter {
private static final Logger logger = Logger.getLogger(
PublicationWithPublisherConverter.class);
@Override
protected String getBibTeXType() {
return "misc";
}
public String convert(final Publication publication) {
PublicationWithPublisher _publication;
if (!(publication instanceof PublicationWithPublisher)) {
throw new UnsupportedCcmTypeException(
String.format("The PublicationWithPublicationConverter only "
+ "supports publication types which are "
+ "extending PublicationWithPublisher. The "
+ "provided publication is of type '%s' which "
+ "does not extends "
+ "PublicationWithPublisher.",
publication.getClass().getName()));
}
_publication = (PublicationWithPublisher) publication;
convertAuthors(publication);
try {
convertTitle(publication);
convertYear(publication);
convertPublisher(_publication);
convertISBN(_publication);
convertEdition(_publication);
} catch (UnsupportedFieldException ex) {
logger.warn("Tried to set unsupported BibTeX field while "
+ "converting a publication");
}
return getBibTeXBuilder().toBibTeX();
}
public String getCcmType() {
return PublicationWithPublisher.class.getName();
}
}

View File

@ -0,0 +1,32 @@
package com.arsdigita.cms.scipublications.exporter.bibtex.converters;
/**
*
* @author jensp
*/
public class UnsupportedCcmTypeException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* Creates a new instance of <code>UnsupportedCcmType</code> without detail message.
*/
public UnsupportedCcmTypeException() {
}
/**
* Constructs an instance of <code>UnsupportedCcmType</code> with the specified detail message.
* @param msg the detail message.
*/
public UnsupportedCcmTypeException(final String msg) {
super(msg);
}
public UnsupportedCcmTypeException(final Throwable cause) {
super(cause);
}
public UnsupportedCcmTypeException(final String msg, Throwable cause) {
super(msg, cause);
}
}