Unterstützung für Research Report in CSV-Importer integriert

git-svn-id: https://svn.libreccm.org/ccm/trunk@1921 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-11-11 12:45:18 +00:00
parent e0ffd9fd30
commit a8d020704c
11 changed files with 180 additions and 5 deletions

View File

@ -0,0 +1,4 @@
begin;
\i ddl/postgres/create.sql
\i ddl/postgres/deferred.sql
end;

View File

@ -26,6 +26,8 @@ public class PublicationsConfig extends AbstractConfig {
private final Parameter defaultInProceedingsFolder; private final Parameter defaultInProceedingsFolder;
private final Parameter defaultArticlesInJournalFolder; private final Parameter defaultArticlesInJournalFolder;
private final Parameter defaultPublicationsFolder; private final Parameter defaultPublicationsFolder;
private final Parameter orgaType;
private final Parameter orgaBundleType;
public PublicationsConfig() { public PublicationsConfig() {
attachOrgaUnitsStep = attachOrgaUnitsStep =
@ -95,6 +97,15 @@ public class PublicationsConfig extends AbstractConfig {
Parameter.OPTIONAL, Parameter.OPTIONAL,
null); null);
orgaType = new StringParameter(
"com.arsdigita.cms.contenttypes.publications.organization_type",
Parameter.OPTIONAL,
Publisher.BASE_DATA_OBJECT_TYPE);
orgaBundleType = new StringParameter(
"com.arsdigita.cms.contenttypes.publications.organization_bundle_type",
Parameter.OPTIONAL,
PublisherBundle.BASE_DATA_OBJECT_TYPE);
register(attachOrgaUnitsStep); register(attachOrgaUnitsStep);
register(attachPublicationsStepTo); register(attachPublicationsStepTo);
register(defaultAuthorsFolder); register(defaultAuthorsFolder);
@ -108,6 +119,8 @@ public class PublicationsConfig extends AbstractConfig {
register(defaultInProceedingsFolder); register(defaultInProceedingsFolder);
register(defaultArticlesInJournalFolder); register(defaultArticlesInJournalFolder);
register(defaultPublicationsFolder); register(defaultPublicationsFolder);
register(orgaType);
register(orgaBundleType);
loadInfo(); loadInfo();
} }
@ -208,4 +221,11 @@ public class PublicationsConfig extends AbstractConfig {
} }
} }
public String getOrganizationType() {
return (String) get(orgaType);
}
public String getOrganizationBundleType() {
return (String) get(orgaBundleType);
}
} }

View File

@ -61,4 +61,14 @@ com.arsdigita.cms.contenttypes.publications.default_articlesinjournal_folder.for
com.arsdigita.cms.contenttypes.publications.default_publications_folder.title = Default publications folder com.arsdigita.cms.contenttypes.publications.default_publications_folder.title = Default publications folder
com.arsdigita.cms.contenttypes.publications.default_publications_folder.purpose = Folder to put publications created using an importer in com.arsdigita.cms.contenttypes.publications.default_publications_folder.purpose = Folder to put publications created using an importer in
com.arsdigita.cms.contenttypes.publications.default_publications_folder.example = 10002 com.arsdigita.cms.contenttypes.publications.default_publications_folder.example = 10002
com.arsdigita.cms.contenttypes.publications.default_publications_folder.format = Integer com.arsdigita.cms.contenttypes.publications.default_publications_folder.format = Integer
com.arsdigita.cms.contenttypes.publications.organization_type.title = Type for imported organizations
com.arsdigita.cms.contenttypes.publications.organization_type.purpose = Sets the type used for imported organization. Must be a subtype of com.arsdigita.cms.contenttypes.GenericOrganizationalUnit
com.arsdigita.cms.contenttypes.publications.organization_type.example = com.arsdigita.cms.contenttypes.Publisher
com.arsdigita.cms.contenttypes.publications.organization_type.format = String
com.arsdigita.cms.contenttypes.publications.organization_bundle_type.title = Type of the content bundle sub class used for imported organizations
com.arsdigita.cms.contenttypes.publications.organization_bundle_type.purpose = Sets the type of the bundle used for imported organization. Must be a subtype of com.arsdigita.cms.contenttypes.GenericOrganizationalUnitBundle
com.arsdigita.cms.contenttypes.publications.organization_bundle_type.example = com.arsdigita.cms.contenttypes.PublisherBundle
com.arsdigita.cms.contenttypes.publications.organization_bundle_type = String

View File

@ -6,6 +6,8 @@ import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume;
import com.arsdigita.cms.contenttypes.ArticleInJournal; import com.arsdigita.cms.contenttypes.ArticleInJournal;
import com.arsdigita.cms.contenttypes.CollectedVolume; import com.arsdigita.cms.contenttypes.CollectedVolume;
import com.arsdigita.cms.contenttypes.CollectedVolumeBundle; import com.arsdigita.cms.contenttypes.CollectedVolumeBundle;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitBundle;
import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.GenericPerson;
import com.arsdigita.cms.contenttypes.GenericPersonBundle; import com.arsdigita.cms.contenttypes.GenericPersonBundle;
import com.arsdigita.cms.contenttypes.InProceedings; import com.arsdigita.cms.contenttypes.InProceedings;
@ -18,11 +20,13 @@ import com.arsdigita.cms.contenttypes.PublicationWithPublisher;
import com.arsdigita.cms.contenttypes.Publisher; import com.arsdigita.cms.contenttypes.Publisher;
import com.arsdigita.cms.contenttypes.PublisherBundle; import com.arsdigita.cms.contenttypes.PublisherBundle;
import com.arsdigita.cms.contenttypes.SciAuthor; import com.arsdigita.cms.contenttypes.SciAuthor;
import com.arsdigita.cms.contenttypes.UnPublished;
import com.arsdigita.cms.lifecycle.LifecycleDefinition; import com.arsdigita.cms.lifecycle.LifecycleDefinition;
import com.arsdigita.cms.lifecycle.LifecycleDefinitionCollection; import com.arsdigita.cms.lifecycle.LifecycleDefinitionCollection;
import com.arsdigita.cms.scipublications.importer.report.AuthorImportReport; import com.arsdigita.cms.scipublications.importer.report.AuthorImportReport;
import com.arsdigita.cms.scipublications.importer.report.CollectedVolumeImportReport; import com.arsdigita.cms.scipublications.importer.report.CollectedVolumeImportReport;
import com.arsdigita.cms.scipublications.importer.report.JournalImportReport; import com.arsdigita.cms.scipublications.importer.report.JournalImportReport;
import com.arsdigita.cms.scipublications.importer.report.OrganizationalUnitImportReport;
import com.arsdigita.cms.scipublications.importer.report.ProceedingsImportReport; import com.arsdigita.cms.scipublications.importer.report.ProceedingsImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublisherImportReport; import com.arsdigita.cms.scipublications.importer.report.PublisherImportReport;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -49,6 +53,7 @@ public class ImporterUtil {
private final transient Set<String> createdJournals = new HashSet<String>(); private final transient Set<String> createdJournals = new HashSet<String>();
private final transient Set<String> createdProcs = new HashSet<String>(); private final transient Set<String> createdProcs = new HashSet<String>();
private final transient Set<String> createdPublishers = new HashSet<String>(); private final transient Set<String> createdPublishers = new HashSet<String>();
private final transient Set<String> createdOrgas = new HashSet<String>();
public ImporterUtil() { public ImporterUtil() {
publish = false; publish = false;
@ -416,6 +421,67 @@ public class ImporterUtil {
return report; return report;
} }
public OrganizationalUnitImportReport processOrganization(final UnPublished publication,
final String name,
final boolean pretend) {
final OrganizationalUnitImportReport report = new OrganizationalUnitImportReport();
final Session session = SessionManager.getSession();
final DataCollection collection = session.retrieve(GenericOrganizationalUnit.BASE_DATA_OBJECT_TYPE);
collection.addEqualsFilter("title", name);
report.setName(name);
if (collection.isEmpty()) {
if (!pretend) {
final Integer folderId = Publication.getConfig().getDefaultOrganizationsFolder();
final Folder folder = new Folder(new BigDecimal(folderId));
if (folder == null) {
throw new IllegalArgumentException("Error getting folder for organizations.");
}
final GenericOrganizationalUnit orga = new GenericOrganizationalUnit(Publication.getConfig().
getOrganizationType());
orga.setTitle(name);
orga.setName(normalizeString(name));
orga.setContentSection(folder.getContentSection());
orga.setLanguage(Kernel.getConfig().getLanguagesIndependentCode());
orga.save();
final GenericOrganizationalUnitBundle bundle = new GenericOrganizationalUnitBundle(Publication.
getConfig().getOrganizationBundleType());
bundle.setDefaultLanguage(orga.getLanguage());
bundle.setContentType(orga.getContentType());
bundle.addInstance(orga);
bundle.setName(orga.getName());
bundle.save();
publication.setOrganization(orga);
if (publish) {
publishItem(orga);
}
}
report.setCreated(true);
//Special handling for pretend mode
if (pretend && createdOrgas.contains(name)) {
report.setCreated(false);
} else {
createdOrgas.add(name);
}
} else {
if (!pretend) {
collection.next();
final GenericOrganizationalUnit orga = new GenericOrganizationalUnit(collection.getDataObject());
publication.setOrganization(orga);
}
report.setCreated(false);
}
collection.close();
return report;
}
public void publishItem(final ContentItem item) { public void publishItem(final ContentItem item) {
final Calendar now = new GregorianCalendar(); final Calendar now = new GregorianCalendar();
final LifecycleDefinitionCollection lifecycles = item.getContentSection().getLifecycleDefinitions(); final LifecycleDefinitionCollection lifecycles = item.getContentSection().getLifecycleDefinitions();

View File

@ -9,6 +9,7 @@
<ccm:requires name="ccm-core" version="6.6.0" relation="ge"/> <ccm:requires name="ccm-core" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-cms" version="6.6.6" relation="ge"/> <ccm:requires name="ccm-cms" version="6.6.6" relation="ge"/>
<ccm:requires name="ccm-sci-publications" version="6.6.3" relation="ge"/> <ccm:requires name="ccm-sci-publications" version="6.6.3" relation="ge"/>
<ccm:requires name="ccm-sci-publications-researchreport" version="6.6.3" relation="ge"/>
</ccm:dependencies> </ccm:dependencies>
<ccm:directories> <ccm:directories>

View File

@ -6,6 +6,7 @@
<table name="ct_publications"/> <table name="ct_publications"/>
<initializer class="com.arsdigita.cms.Initializer"/> <initializer class="com.arsdigita.cms.Initializer"/>
<initializer class="com.arsdigita.cms.contenttypes.PublicationInitializer"/> <initializer class="com.arsdigita.cms.contenttypes.PublicationInitializer"/>
<initializer class="com.arsdigita.cms.contenttypes.ResearchReportInitializer"/>
</requires> </requires>
<provides> <provides>

View File

@ -2,6 +2,7 @@ package com.arsdigita.cms.scipublications.importer.csv;
import com.arsdigita.cms.contenttypes.UnPublished; import com.arsdigita.cms.contenttypes.UnPublished;
import com.arsdigita.cms.scipublications.importer.report.FieldImportReport; import com.arsdigita.cms.scipublications.importer.report.FieldImportReport;
import com.arsdigita.cms.scipublications.importer.report.OrganizationalUnitImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
@ -33,6 +34,7 @@ abstract class AbstractUnPublishedImporter<T extends UnPublished> extends Abstra
} }
processNumberOfPages(publication); processNumberOfPages(publication);
processOrganization(publication);
return publication; return publication;
} }
@ -51,5 +53,14 @@ abstract class AbstractUnPublishedImporter<T extends UnPublished> extends Abstra
} }
} }
} }
private void processOrganization(final T publication) {
if ((getData().getPublisher() != null) && !getData().getPublisher().isEmpty()) {
final OrganizationalUnitImportReport report = getImporterUtil().processOrganization(publication,
getData().getPublisher(),
isPretend());
getReport().addOrgaUnit(report);
}
}
} }

View File

@ -2,6 +2,7 @@ package com.arsdigita.cms.scipublications.importer.csv;
import com.arsdigita.cms.contenttypes.GreyLiterature; import com.arsdigita.cms.contenttypes.GreyLiterature;
import com.arsdigita.cms.contenttypes.PublicationBundle; import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.UnPublishedBundle;
import com.arsdigita.cms.scipublications.importer.report.FieldImportReport; import com.arsdigita.cms.scipublications.importer.report.FieldImportReport;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
@ -72,7 +73,7 @@ class GreyLiteratureImporter extends AbstractUnPublishedImporter<GreyLiterature>
if (isPretend()) { if (isPretend()) {
return null; return null;
} else { } else {
return new PublicationBundle(greyLiterature); return new UnPublishedBundle(greyLiterature);
} }
} }

View File

@ -28,6 +28,7 @@ import com.arsdigita.cms.contenttypes.InternetArticle;
import com.arsdigita.cms.contenttypes.Monograph; import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.contenttypes.Proceedings; import com.arsdigita.cms.contenttypes.Proceedings;
import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.contenttypes.ResearchReport;
import com.arsdigita.cms.contenttypes.Review; import com.arsdigita.cms.contenttypes.Review;
import com.arsdigita.cms.contenttypes.WorkingPaper; import com.arsdigita.cms.contenttypes.WorkingPaper;
import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; import com.arsdigita.cms.scipublications.imexporter.PublicationFormat;
@ -162,6 +163,8 @@ public class PublicationsImporter implements SciPublicationsImporter {
processProceedings(publishNewItems, data, report, pretend, importerUtil); processProceedings(publishNewItems, data, report, pretend, importerUtil);
} else if (Review.class.getSimpleName().equals(data.getType())) { } else if (Review.class.getSimpleName().equals(data.getType())) {
processReview(publishNewItems, data, report, pretend, importerUtil); processReview(publishNewItems, data, report, pretend, importerUtil);
} else if(ResearchReport.class.getSimpleName().equals(data.getType()) || "Report".equals(data.getType())) {
processResearchReport(publishNewItems, data, report, pretend, importerUtil);
} else if (WorkingPaper.class.getSimpleName().equals(data.getType())) { } else if (WorkingPaper.class.getSimpleName().equals(data.getType())) {
processWorkingPaper(publishNewItems, data, report, pretend, importerUtil); processWorkingPaper(publishNewItems, data, report, pretend, importerUtil);
} }
@ -282,8 +285,7 @@ public class PublicationsImporter implements SciPublicationsImporter {
final ImporterUtil importerUtil) { final ImporterUtil importerUtil) {
if (isPublicationAlreadyInDatabase(data, Proceedings.class.getSimpleName(), report)) { if (isPublicationAlreadyInDatabase(data, Proceedings.class.getSimpleName(), report)) {
return; return;
} }
System.err.println("Publication is not in database");
final ProceedingsImporter importer = new ProceedingsImporter(data, report, pretend, importerUtil); final ProceedingsImporter importer = new ProceedingsImporter(data, report, pretend, importerUtil);
importer.doImport(publishNewItems); importer.doImport(publishNewItems);
@ -302,6 +304,19 @@ public class PublicationsImporter implements SciPublicationsImporter {
importer.doImport(publishNewItems); importer.doImport(publishNewItems);
} }
private void processResearchReport(final boolean publishNewItems,
final CsvLine data,
final PublicationImportReport report,
final boolean pretend,
final ImporterUtil importerUtil) {
if (isPublicationAlreadyInDatabase(data, ResearchReport.class.getSimpleName(), report)) {
return;
}
final ResearchReportImporter importer = new ResearchReportImporter(data, report, pretend, importerUtil);
importer.doImport(publishNewItems);
}
private void processWorkingPaper(final boolean publishNewItems, private void processWorkingPaper(final boolean publishNewItems,
final CsvLine data, final CsvLine data,

View File

@ -0,0 +1,45 @@
package com.arsdigita.cms.scipublications.importer.csv;
import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.ResearchReport;
import com.arsdigita.cms.contenttypes.UnPublishedBundle;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
class ResearchReportImporter extends AbstractUnPublishedImporter<ResearchReport> {
protected ResearchReportImporter(final CsvLine data,
final PublicationImportReport report,
final boolean pretend,
final ImporterUtil importerUtil) {
super(data, report, pretend, importerUtil);
}
@Override
protected ResearchReport createPublication() {
if (isPretend()) {
return null;
} else {
return new ResearchReport();
}
}
@Override
protected PublicationBundle createBundle(final ResearchReport report) {
if (isPretend()) {
return null;
} else {
return new UnPublishedBundle(report);
}
}
}

View File

@ -1,6 +1,7 @@
package com.arsdigita.cms.scipublications.importer.csv; package com.arsdigita.cms.scipublications.importer.csv;
import com.arsdigita.cms.contenttypes.PublicationBundle; import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.UnPublishedBundle;
import com.arsdigita.cms.contenttypes.WorkingPaper; import com.arsdigita.cms.contenttypes.WorkingPaper;
import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport;
import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil;
@ -33,7 +34,7 @@ class WorkingPaperImporter extends AbstractUnPublishedImporter<WorkingPaper> {
if (isPretend()) { if (isPretend()) {
return null; return null;
} else { } else {
return new PublicationBundle(workingPaper); return new UnPublishedBundle(workingPaper);
} }
} }