diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java index d59ae99f6..8a5accb55 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java @@ -12,7 +12,7 @@ import com.arsdigita.cms.contenttypes.PublicationGenericOrganizationalsUnitColle import com.arsdigita.cms.contenttypes.Series; import com.arsdigita.cms.contenttypes.SeriesCollection; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; -import com.arsdigita.cms.scipublications.exporter.PublicationFormat; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporters; import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.xml.Element; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporter.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporter.java index 8974852eb..8481ea44b 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporter.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporter.java @@ -1,6 +1,5 @@ /* - * Copyright (c) 2010 Jens Pelzetter, - * for the Center of Social Politics of the University of Bremen + * Copyright (c) 2010 Jens Pelzetter, ScientificCMS.org Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -20,11 +19,13 @@ package com.arsdigita.cms.scipublications.exporter; import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; /** * This interface describes the methods provided by all publication exporters. * * @author Jens Pelzetter + * @version $Id$ */ public interface SciPublicationsExporter { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporters.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporters.java index 87b8cddb5..1851f6479 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporters.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/SciPublicationsExporters.java @@ -1,6 +1,5 @@ /* - * Copyright (c) 2010 Jens Pelzetter, - * for the Center of Social Politics of the University of Bremen + * Copyright (c) 2010 Jens Pelzetter, ScientificCMS.org team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -19,6 +18,7 @@ */ package com.arsdigita.cms.scipublications.exporter; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -31,6 +31,7 @@ import org.apache.log4j.Logger; * {@link SciPublicationsExporter} interface. It is implemented as a Singleton. * * @author Jens Pelzetter + * @version $Id$ */ public final class SciPublicationsExporters { @@ -67,10 +68,8 @@ public final class SciPublicationsExporters { for (SciPublicationsExporter exporter : exporterServices) { logger.debug(String.format("Found exporter for format '%s'...", - exporter.getSupportedFormat().getName(). - toLowerCase())); - exporters.put(exporter.getSupportedFormat().getName().toLowerCase(), - exporter); + exporter.getSupportedFormat().getName().toLowerCase())); + exporters.put(exporter.getSupportedFormat().getName().toLowerCase(), exporter); } logger.debug(String.format("Found %d exporters.", exporters.size())); } @@ -102,11 +101,11 @@ public final class SciPublicationsExporters { supportedFormats = new ArrayList(); - for (Map.Entry entry : exporters. - entrySet()) { + for (Map.Entry entry : exporters.entrySet()) { supportedFormats.add(entry.getValue().getSupportedFormat()); } return supportedFormats; } + } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/bibtex/BibTeXExporter.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/bibtex/BibTeXExporter.java index 7b7381353..4113106e3 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/bibtex/BibTeXExporter.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/bibtex/BibTeXExporter.java @@ -20,7 +20,7 @@ package com.arsdigita.cms.scipublications.exporter.bibtex; import com.arsdigita.cms.contenttypes.Publication; -import com.arsdigita.cms.scipublications.exporter.PublicationFormat; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporter; import com.arsdigita.cms.scipublications.exporter.bibtex.converters.BibTeXConverter; import com.arsdigita.cms.scipublications.exporter.bibtex.converters.BibTeXConverters; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/ris/RisExporter.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/ris/RisExporter.java index 241f4e0d7..8b59c9fa7 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/ris/RisExporter.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/ris/RisExporter.java @@ -20,7 +20,7 @@ package com.arsdigita.cms.scipublications.exporter.ris; import com.arsdigita.cms.contenttypes.Publication; -import com.arsdigita.cms.scipublications.exporter.PublicationFormat; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporter; import javax.activation.MimeType; import javax.activation.MimeTypeParseException; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/PublicationFormat.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/imexporter/PublicationFormat.java similarity index 96% rename from ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/PublicationFormat.java rename to ccm-sci-publications/src/com/arsdigita/cms/scipublications/imexporter/PublicationFormat.java index dc7f1dce7..bbd05a86c 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/exporter/PublicationFormat.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/imexporter/PublicationFormat.java @@ -17,13 +17,13 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ -package com.arsdigita.cms.scipublications.exporter; +package com.arsdigita.cms.scipublications.imexporter; import javax.activation.MimeType; /** * Describes the format provided by an implementation of - * {@link SciPublicationsExporter}. + * {@link SciPublicationsExporter} or {@link SciPublicationsImporter}. * * @author Jens Pelzetter */ diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/SciPublicationsImporter.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/SciPublicationsImporter.java new file mode 100644 index 000000000..1fe148b50 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/SciPublicationsImporter.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2012 Jens Pelzetter, ScientificCMS.org team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.scipublications.importer; + +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; + +/** + * Interface for publication importers + * + * @author Jens Pelzetter + * @version $Id$ + */ +public interface SciPublicationsImporter { + + /** + * @return Description of the format supported by the importer implementation. + */ + PublicationFormat getSupportedFormat(); + + /** + * Parses the provided string and creates publications from the string. + * + * @param publications The string conaining the publications in the format supported by this importer + * @param pretend If set to {@link true} no publications will be created. This can be used for debugging purposes + * or to check an file containing publications + * @return A report describing what the importer has done + */ + String importPublications(String publications, boolean pretend); + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/SciPublicationsImporters.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/SciPublicationsImporters.java new file mode 100644 index 000000000..554fd5e25 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/SciPublicationsImporters.java @@ -0,0 +1,81 @@ +package com.arsdigita.cms.scipublications.importer; + +import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporter; +import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; +import org.apache.log4j.Logger; + +/** + * This class provides access to the available implementations of the {@link SciPublicationsImporter} interface. + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class SciPublicationsImporters { + + private static final Logger logger = Logger.getLogger(SciPublicationsImporters.class); + /** + * Asscociation of the format the responsible importer. + */ + private Map importers = new HashMap(); + + private static class Instance { + + private static final SciPublicationsImporters INSTANCE = new SciPublicationsImporters(); + } + + /** + * Create the instance. Uses the {@link ServiceLoader} to find all avaiable implementations of + * {@link SciPublicationsImporters} and puts them into the {@link #importers} map. + */ + private SciPublicationsImporters() { + logger.debug("Creating SciPublicationsImporter instance..."); + final ServiceLoader importerServices; + + logger.debug("Loading all available implementations of the SciPublicationsImporter interface..."); + importerServices = ServiceLoader.load(SciPublicationsImporter.class); + + for (SciPublicationsImporter importer : importerServices) { + logger.debug(String.format("Found importer for format '%s'...", + importer.getSupportedFormat().getName().toLowerCase())); + importers.put(importer.getSupportedFormat().getName().toLowerCase(), importer); + } + logger.debug(String.format("Found %d importers.", importers.size())); + } + + public static SciPublicationsImporters getInstance() { + return Instance.INSTANCE; + } + + /** + * Retrieves the importer for the specified format. + * + * @param format The format which should be supported by the importer. + * @return The importer for the specified format, or null if there is no export which supports the + * specified format. + */ + public SciPublicationsImporter getImporterForFormat(final String format) { + return importers.get(format); + } + + /** + * + * @return A list of all supported export formats. + */ + public List getSupportedFormats() { + List supportedFormats; + + supportedFormats = new ArrayList(); + + for (Map.Entry entry : importers.entrySet()) { + supportedFormats.add(entry.getValue().getSupportedFormat()); + } + + return supportedFormats; + } + +}