diff --git a/ccm-sci-publications-researchreport/sql/ccm-sci-publications-researchreport/postgres-create.sql b/ccm-sci-publications-researchreport/sql/ccm-sci-publications-researchreport/postgres-create.sql new file mode 100644 index 000000000..38209a696 --- /dev/null +++ b/ccm-sci-publications-researchreport/sql/ccm-sci-publications-researchreport/postgres-create.sql @@ -0,0 +1,4 @@ +begin; +\i ddl/postgres/create.sql +\i ddl/postgres/deferred.sql +end; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java index 9f55d7819..77bc5632d 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig.java @@ -26,6 +26,8 @@ public class PublicationsConfig extends AbstractConfig { private final Parameter defaultInProceedingsFolder; private final Parameter defaultArticlesInJournalFolder; private final Parameter defaultPublicationsFolder; + private final Parameter orgaType; + private final Parameter orgaBundleType; public PublicationsConfig() { attachOrgaUnitsStep = @@ -95,6 +97,15 @@ public class PublicationsConfig extends AbstractConfig { Parameter.OPTIONAL, 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(attachPublicationsStepTo); register(defaultAuthorsFolder); @@ -108,6 +119,8 @@ public class PublicationsConfig extends AbstractConfig { register(defaultInProceedingsFolder); register(defaultArticlesInJournalFolder); register(defaultPublicationsFolder); + register(orgaType); + register(orgaBundleType); loadInfo(); } @@ -208,4 +221,11 @@ public class PublicationsConfig extends AbstractConfig { } } + public String getOrganizationType() { + return (String) get(orgaType); + } + + public String getOrganizationBundleType() { + return (String) get(orgaBundleType); + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties index e977a0e57..f2845fdba 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationsConfig_parameter.properties @@ -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.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.format = Integer \ No newline at end of file +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 \ No newline at end of file diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/util/ImporterUtil.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/util/ImporterUtil.java index d577459a1..3ed6f28dc 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/util/ImporterUtil.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/importer/util/ImporterUtil.java @@ -6,6 +6,8 @@ import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume; import com.arsdigita.cms.contenttypes.ArticleInJournal; import com.arsdigita.cms.contenttypes.CollectedVolume; 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.GenericPersonBundle; 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.PublisherBundle; import com.arsdigita.cms.contenttypes.SciAuthor; +import com.arsdigita.cms.contenttypes.UnPublished; import com.arsdigita.cms.lifecycle.LifecycleDefinition; import com.arsdigita.cms.lifecycle.LifecycleDefinitionCollection; import com.arsdigita.cms.scipublications.importer.report.AuthorImportReport; import com.arsdigita.cms.scipublications.importer.report.CollectedVolumeImportReport; 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.PublisherImportReport; import com.arsdigita.kernel.Kernel; @@ -49,6 +53,7 @@ public class ImporterUtil { private final transient Set createdJournals = new HashSet(); private final transient Set createdProcs = new HashSet(); private final transient Set createdPublishers = new HashSet(); + private final transient Set createdOrgas = new HashSet(); public ImporterUtil() { publish = false; @@ -416,6 +421,67 @@ public class ImporterUtil { 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) { final Calendar now = new GregorianCalendar(); final LifecycleDefinitionCollection lifecycles = item.getContentSection().getLifecycleDefinitions(); diff --git a/ccm-sci-publicationscsvimporter/application.xml b/ccm-sci-publicationscsvimporter/application.xml index 1515e37c1..cb6b57258 100644 --- a/ccm-sci-publicationscsvimporter/application.xml +++ b/ccm-sci-publicationscsvimporter/application.xml @@ -9,6 +9,7 @@ + diff --git a/ccm-sci-publicationscsvimporter/src/ccm-sci-publicationscsvimporter.load b/ccm-sci-publicationscsvimporter/src/ccm-sci-publicationscsvimporter.load index f03fcff5f..277ba1db0 100644 --- a/ccm-sci-publicationscsvimporter/src/ccm-sci-publicationscsvimporter.load +++ b/ccm-sci-publicationscsvimporter/src/ccm-sci-publicationscsvimporter.load @@ -6,6 +6,7 @@ + diff --git a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/AbstractUnPublishedImporter.java b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/AbstractUnPublishedImporter.java index 50e487c40..7cdbe00db 100644 --- a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/AbstractUnPublishedImporter.java +++ b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/AbstractUnPublishedImporter.java @@ -2,6 +2,7 @@ package com.arsdigita.cms.scipublications.importer.csv; import com.arsdigita.cms.contenttypes.UnPublished; 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.util.ImporterUtil; @@ -33,6 +34,7 @@ abstract class AbstractUnPublishedImporter extends Abstra } processNumberOfPages(publication); + processOrganization(publication); return publication; } @@ -51,5 +53,14 @@ abstract class AbstractUnPublishedImporter 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); + } + } } diff --git a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/GreyLiteratureImporter.java b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/GreyLiteratureImporter.java index 4a7e5f3e0..ff38040dc 100644 --- a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/GreyLiteratureImporter.java +++ b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/GreyLiteratureImporter.java @@ -2,6 +2,7 @@ package com.arsdigita.cms.scipublications.importer.csv; import com.arsdigita.cms.contenttypes.GreyLiterature; 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.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; @@ -72,7 +73,7 @@ class GreyLiteratureImporter extends AbstractUnPublishedImporter if (isPretend()) { return null; } else { - return new PublicationBundle(greyLiterature); + return new UnPublishedBundle(greyLiterature); } } diff --git a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/PublicationsImporter.java b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/PublicationsImporter.java index f32ee861f..ed243b5fd 100644 --- a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/PublicationsImporter.java +++ b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/PublicationsImporter.java @@ -28,6 +28,7 @@ import com.arsdigita.cms.contenttypes.InternetArticle; import com.arsdigita.cms.contenttypes.Monograph; import com.arsdigita.cms.contenttypes.Proceedings; import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.ResearchReport; import com.arsdigita.cms.contenttypes.Review; import com.arsdigita.cms.contenttypes.WorkingPaper; import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; @@ -162,6 +163,8 @@ public class PublicationsImporter implements SciPublicationsImporter { processProceedings(publishNewItems, data, report, pretend, importerUtil); } else if (Review.class.getSimpleName().equals(data.getType())) { 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())) { processWorkingPaper(publishNewItems, data, report, pretend, importerUtil); } @@ -282,8 +285,7 @@ public class PublicationsImporter implements SciPublicationsImporter { final ImporterUtil importerUtil) { if (isPublicationAlreadyInDatabase(data, Proceedings.class.getSimpleName(), report)) { return; - } - System.err.println("Publication is not in database"); + } final ProceedingsImporter importer = new ProceedingsImporter(data, report, pretend, importerUtil); importer.doImport(publishNewItems); @@ -302,6 +304,19 @@ public class PublicationsImporter implements SciPublicationsImporter { 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, final CsvLine data, diff --git a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/ResearchReportImporter.java b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/ResearchReportImporter.java new file mode 100644 index 000000000..23f1c97ae --- /dev/null +++ b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/ResearchReportImporter.java @@ -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 + * @version $Id$ + */ +class ResearchReportImporter extends AbstractUnPublishedImporter { + + 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); + } + } + + + +} diff --git a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/WorkingPaperImporter.java b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/WorkingPaperImporter.java index 111bbe15e..e3c6c5cda 100644 --- a/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/WorkingPaperImporter.java +++ b/ccm-sci-publicationscsvimporter/src/com/arsdigita/cms/scipublications/importer/csv/WorkingPaperImporter.java @@ -1,6 +1,7 @@ package com.arsdigita.cms.scipublications.importer.csv; import com.arsdigita.cms.contenttypes.PublicationBundle; +import com.arsdigita.cms.contenttypes.UnPublishedBundle; import com.arsdigita.cms.contenttypes.WorkingPaper; import com.arsdigita.cms.scipublications.importer.report.PublicationImportReport; import com.arsdigita.cms.scipublications.importer.util.ImporterUtil; @@ -33,7 +34,7 @@ class WorkingPaperImporter extends AbstractUnPublishedImporter { if (isPretend()) { return null; } else { - return new PublicationBundle(workingPaper); + return new UnPublishedBundle(workingPaper); } }