SciPublications RisImporter Beta 2

git-svn-id: https://svn.libreccm.org/ccm/trunk@2038 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-01-13 18:56:06 +00:00
parent 4beb75e94a
commit e9d6663fa8
25 changed files with 68 additions and 76 deletions

View File

@ -35,13 +35,13 @@ public class SciPublicationsInitializer extends CompoundInitializer {
super.init(e);
DomainObjectFactory.registerInstantiator(
SciPublications.BASE_DATA_OBJECT_TYPE,
new ACSObjectInstantiator() {
SciPublications.BASE_DATA_OBJECT_TYPE, new ACSObjectInstantiator() {
@Override
public DomainObject doNewInstance(final DataObject dataObject) {
return new SciPublications(dataObject);
}
});
}
}

View File

@ -67,6 +67,7 @@ public class ImporterCli extends Program {
@Override
protected void doRun(final CommandLine cmdLine) {
try {
final PrintWriter writer = new PrintWriter(System.out);
final PrintWriter errWriter = new PrintWriter(System.err);
@ -100,6 +101,9 @@ public class ImporterCli extends Program {
errWriter.flush();
writer.flush();
} catch(Exception ex) {
ex.printStackTrace(System.err);
}
}
protected void importFile(final File file, final boolean pretend, final boolean publish) {
@ -143,11 +147,12 @@ public class ImporterCli extends Program {
try {
report = importer.importPublications(data, pretend, publish);
} catch (SciPublicationsImportException ex) {
errWriter.printf("Import failed:\n");
errWriter.printf("%s: %s\n", ex.getClass().getName(), ex.getMessage());
errWriter.printf("%s: %s\n", ex.getClass().getName(), ex.getMessage());
ex.printStackTrace(errWriter);
errWriter.flush();
writer.flush();
writer.flush();
return;
}

View File

@ -23,7 +23,7 @@ public class BibTeXPublicationsImporter implements SciPublicationsImporter {
} catch (MimeTypeParseException ex) {
LOGGER.warn("Failed to create MimeType for PublicationFormat."
+ "Using null mimetype instead. Cause: ", ex);
return new PublicationFormat("RIS", null, "RIS");
return new PublicationFormat("BibTeX", null, "bib");
}
}

View File

@ -11,7 +11,7 @@ import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
* @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

View File

@ -1,12 +1,9 @@
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 com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Map;
import java.util.ServiceLoader;
import org.apache.log4j.Logger;
@ -20,7 +17,7 @@ import org.apache.log4j.Logger;
public class RisConverters {
private static final Logger LOGGER = Logger.getLogger(RisConverters.class);
private Map<RisType, RisConverter> converters = new HashMap<RisType, RisConverter>();
private Map<RisType, RisConverter> converters = new EnumMap<RisType, RisConverter>(RisType.class);
/**
* The constructor loads all available implementations of the
@ -60,8 +57,8 @@ public class RisConverters {
* @param importerUtil
* @param pretend
* @param publishNewItems
* @return
* @throws SciPublicationsImportException
* @return
* @throws RisConverterException
*/
public PublicationImportReport convert(final RisDataset dataset,
final ImporterUtil importerUtil,
@ -77,13 +74,13 @@ public class RisConverters {
}
converter = converter.getClass().newInstance();
return converter.convert(dataset, importerUtil, pretend, publishNewItems);
} catch (InstantiationException ex) {
throw new RisConverterException("Converter instantiation failed.", ex);
} catch (IllegalAccessException ex) {
throw new RisConverterException("Converter instantiation failed.", ex);
}
}
}
}

View File

@ -82,7 +82,7 @@ public class RisParser {
}
return new RisFieldValue(fieldName, tokens[1]);
} else if ((tokens.length == 1) && RisField.ER.toString().equals(tokens[0])) {
} else if ((tokens.length == 1) && (tokens[0] != null) && tokens[0].startsWith(RisField.ER.toString())) {
return new RisFieldValue(RisField.ER, "");
} else {
return new RisFieldValue(null, line);

View File

@ -8,6 +8,7 @@ import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport
import com.arsdigita.cms.scipublications.importer.ris.RisConverter;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.ris.RisImporter;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
import java.math.BigDecimal;
@ -38,6 +39,12 @@ public abstract class AbstractRisConverter<T extends Publication, B extends Publ
final PublicationImportReport importReport = new PublicationImportReport();
final T publication = createPublication(pretend);
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
fieldUtil.processTitle(dataset, publication, importReport);
if (!pretend) {
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
}
final B bundle = createBundle(publication, pretend);
importReport.setTitle(publication.BASE_DATA_OBJECT_TYPE);
processFields(dataset, publication, importerUtil, importReport, pretend);
@ -48,9 +55,7 @@ public abstract class AbstractRisConverter<T extends Publication, B extends Publ
publication.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
publication.save();
final B bundle = createBundle(publication, pretend);
assignFolder(publication, bundle);
assignCategories(bundle);

View File

@ -47,9 +47,7 @@ public class BlogConverter extends AbstractRisConverter<InternetArticle, Interne
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A2, publication, importReport);

View File

@ -2,6 +2,7 @@ package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.PublicationWithPublisherBundle;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
@ -34,7 +35,7 @@ public class BookConverter extends AbstractRisConverter<Monograph, PublicationBu
if (pretend) {
return null;
} else {
return new PublicationBundle(publication);
return new PublicationWithPublisherBundle(publication);
}
}
@ -48,9 +49,8 @@ public class BookConverter extends AbstractRisConverter<Monograph, PublicationBu
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A3, publication, importReport);

View File

@ -47,10 +47,8 @@ public class ChapConverter extends AbstractRisConverter<ArticleInCollectedVolume
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisColVolUtil colVolUtil = new RisColVolUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -51,7 +51,7 @@ public class ConfConverter extends AbstractRisConverter<Proceedings, Proceedings
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.C2, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.C2, publication, "yearPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A2, publication, importReport);

View File

@ -47,9 +47,7 @@ public class CpaperConverter extends AbstractRisConverter<InProceedings, InProce
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisColVolUtil colVolUtil = new RisColVolUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -11,7 +11,6 @@ import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldU
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/**
* Converter for the RIS type {@code EBOOK} to the SciPublications type {@link Monograph}.
@ -20,7 +19,7 @@ import com.arsdigita.kernel.Kernel;
* @version $Id$
*/
public class EbookConverter extends AbstractRisConverter<Monograph, PublicationWithPublisherBundle> {
@Override
protected Monograph createPublication(final boolean pretend) {
if (pretend) {
@ -46,9 +45,7 @@ public class EbookConverter extends AbstractRisConverter<Monograph, PublicationW
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processEditors(dataset, RisField.A3, publication, importReport);

View File

@ -10,7 +10,6 @@ import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisAuthor
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/**
*
@ -48,11 +47,9 @@ public class EdbookConverter extends AbstractRisConverter<CollectedVolume, Colle
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
authorUtil.processEditors(dataset, RisField.AU, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
orgaUtil.processPublisher(dataset, RisField.PB, RisField.CY, publication, importReport);

View File

@ -5,13 +5,11 @@ import com.arsdigita.cms.contenttypes.ArticleInJournalBundle;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.ris.RisConverter;
import com.arsdigita.cms.scipublications.importer.ris.RisDataset;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisAuthorUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisJournalUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/**
* Converter for the RIS {@code EJOUR} to the SciPublications type {@link ArticleInJournal}
@ -50,9 +48,7 @@ public class EjourConverter extends AbstractRisConverter<ArticleInJournal, Artic
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisJournalUtil journalUtil = new RisJournalUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -1,6 +1,5 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.InProceedingsBundle;
import com.arsdigita.cms.contenttypes.InternetArticle;
import com.arsdigita.cms.contenttypes.InternetArticleBundle;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
@ -11,7 +10,6 @@ import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisAuthor
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/**
*
@ -48,9 +46,7 @@ public class ElecConverter extends AbstractRisConverter<InternetArticle, Interne
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -46,10 +46,8 @@ public class EncycConverter extends AbstractRisConverter<ArticleInCollectedVolum
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisColVolUtil colVolUtil = new RisColVolUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -46,11 +46,9 @@ public class GenConverter extends AbstractRisConverter<Monograph, PublicationWit
final boolean pretend) {
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);
authorUtil.processAuthors(dataset, RisField.A2, publication, importReport);

View File

@ -48,7 +48,7 @@ public class JourConverter extends AbstractRisConverter<ArticleInJournal, Articl
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -49,9 +49,7 @@ public class RprtConverter extends AbstractRisConverter<GreyLiterature, UnPublis
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -47,9 +47,7 @@ public class ThesConverter extends AbstractRisConverter<GreyLiterature, UnPublis
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -1,8 +1,6 @@
package com.arsdigita.cms.scipublications.importer.ris.converters;
import com.arsdigita.cms.contenttypes.GreyLiterature;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.UnPublishedBundle;
import com.arsdigita.cms.scipublications.imexporter.ris.RisField;
import com.arsdigita.cms.scipublications.imexporter.ris.RisType;
@ -13,7 +11,6 @@ import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisFieldU
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisOrgaUtil;
import com.arsdigita.cms.scipublications.importer.ris.converters.utils.RisSeriesUtil;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
import com.arsdigita.kernel.Kernel;
/**
*
@ -49,11 +46,9 @@ public class UnpbConverter extends AbstractRisConverter<GreyLiterature, UnPublis
final RisFieldUtil fieldUtil = new RisFieldUtil(pretend);
final RisAuthorUtil authorUtil = new RisAuthorUtil(importerUtil, pretend);
final RisOrgaUtil orgaUtil = new RisOrgaUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
final RisSeriesUtil seriesUtil = new RisSeriesUtil(importerUtil, pretend);
fieldUtil.processTitle(dataset, publication, importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "year", importReport);
fieldUtil.processIntField(dataset, RisField.PY, publication, "yearOfPublication", importReport);
authorUtil.processAuthors(dataset, RisField.AU, publication, importReport);

View File

@ -39,10 +39,28 @@ public class RisFieldUtil {
if (!pretend) {
publication.setTitle(title);
String name = normalizeString(title);
if (name.length() > 200) {
name = name.substring(0, 200);
}
publication.setName(name);
}
report.setTitle(title);
}
private String normalizeString(final String str) {
if (str == null) {
return "null";
}
return str.replace("ä", "ae").replace("ö", "oe").replace("ü", "ue").
replace(
"Ä", "Ae").replace("Ü", "Ue").replace("Ö", "Oe").replace("ß",
"ss").
replace(" ", "-").
replaceAll("[^a-zA-Z0-9\\-]", "").toLowerCase().trim();
}
public void processField(final RisDataset dataset,
final RisField field,