diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties index 27dcd0bcf..6bd1af98b 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties @@ -329,7 +329,7 @@ cms.ui.there_are_no_items=There are no items. cms.ui.there_was_no_one_matching_the_search_criteria=There was no one matching the search criteria. cms.ui.this_should_never_happen=This should never happen cms.ui.types=Content types -cms.ui.unknown=unknown +cms.ui.unknown=unknown cms.ui.upload_new_content=Upload new content cms.ui.use_custom_permissions=Use Custom Permissions cms.ui.user=User diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties index 5867f41b6..cf71eeee7 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties @@ -328,7 +328,7 @@ cms.ui.there_are_no_items=Keine elemente vorhanden. cms.ui.there_was_no_one_matching_the_search_criteria=Kein Element erf\u00fcllte die Suchkriterien. cms.ui.this_should_never_happen=Dies sollte nie passieren\! cms.ui.types=Dokument Typen -cms.ui.unknown=unbekannt +cms.ui.unknown=unbekannt cms.ui.upload_new_content=Neuen Inhalt laden cms.ui.use_custom_permissions=Benutzerspezifische Rechte cms.ui.user=Benutzer diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl index ebd01cd0a..922c4de52 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Journal.pdl @@ -27,7 +27,8 @@ object type Journal extends ContentPage { Integer[0..1] firstYear = ct_journal.firstyear INTEGER; Integer[0..1] lastYear = ct_journal.lastyear INTEGER; - String[0..1] issn = ct_journal.issn VARCHAR(9); + String[0..1] issn = ct_journal.issn VARCHAR(9); + String[0..1] abstract = ct_journal.abstract VARCHAR(4096); reference key (ct_journal.journal_id); } diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl index ce4eacbf5..832c51990 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Series.pdl @@ -48,8 +48,12 @@ association { to cms_person_bundles.bundle_id; // Additional attributes for the editship - Date[0..1] dateFrom = ct_series_editship.dateFrom DATE; - Date[0..1] dateTo = ct_series_editship.dateTo DATE; + Date[0..1] dateFrom = ct_series_editship.date_from DATE; + Boolean[0..1] dateFromSkipMonth = ct_series_editship.date_from_skip_month; + Boolean[0..1] dateFromSkipDay = ct_series_editship.date_from_skip_day; + Date[0..1] dateTo = ct_series_editship.date_to DATE; + Boolean[0..1] dateToSkipMonth = ct_series_editship.date_to_skip_month; + Boolean[0..1] dateToSkipDay = ct_series_editship.date_to_skip_day; //Sorting is first done by the period defined by from and to, //and secondly by the following order attribute diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/EditshipCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/EditshipCollection.java index 8d0a6a346..143ed9252 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/EditshipCollection.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/EditshipCollection.java @@ -33,9 +33,17 @@ import org.apache.log4j.Logger; public class EditshipCollection extends DomainCollection { public static final String LINK_FROM = "link.dateFrom"; + public static final String LINK_FROM_SKIP_MONTH = "link.dateFromSkipMonth"; + public static final String LINK_FROM_SKIP_DAY = "link.dateFromSkipDay"; public static final String LINK_TO = "link.dateTo"; + public static final String LINK_TO_SKIP_MONTH = "link.dateToSkipMonth"; + public static final String LINK_TO_SKIP_DAY = "link.dateToSkipDay"; public static final String FROM = "dateFrom"; + public static final String FROM_SKIP_MONTH = "dateFromSkipMonth"; + public static final String FROM_SKIP_DAY = "dateFromSkipDay"; public static final String TO = "dateTo"; + public static final String TO_SKIP_MONTH = "dateToSkipMonth"; + public static final String TO_SKIP_DAY = "dateToSkipDay"; public static final String LINKORDER = "link.editor_order"; public static final String ORDER = "editor_order"; private final static Logger s_log = @@ -50,22 +58,57 @@ public class EditshipCollection extends DomainCollection { public Date getFrom() { return (Date) m_dataCollection.get(LINK_FROM); } + + public Boolean getFromSkipMonth() { + return (Boolean) m_dataCollection.get(LINK_FROM_SKIP_MONTH); + } + + public Boolean getFromSkipDay() { + return (Boolean) m_dataCollection.get(LINK_FROM_SKIP_DAY); + } public void setFrom(Date from) { - DataObject link = (DataObject) this.get("link"); - + final DataObject link = (DataObject) get("link"); link.set(FROM, from); } + + public void setFromSkipMonth(final Boolean skipMonth) { + final DataObject link = (DataObject) get("link"); + link.set(FROM_SKIP_MONTH, skipMonth); + } + + public void setFromSkipDay(final Boolean skipDay) { + final DataObject link = (DataObject) get("link"); + link.set(FROM_SKIP_DAY, skipDay); + } public Date getTo() { return (Date) m_dataCollection.get(LINK_TO); } + + public Boolean getToSkipMonth() { + return (Boolean) m_dataCollection.get(LINK_TO_SKIP_MONTH); + } + + public Boolean getToSkipDay() { + return (Boolean) m_dataCollection.get(LINK_TO_SKIP_DAY); + } public void setTo(Date to) { DataObject link = (DataObject) this.get("link"); link.set(TO, to); } + + public void setToSkipMonth(final Boolean skipMonth) { + final DataObject link = (DataObject) get("link"); + link.set(TO_SKIP_MONTH, skipMonth); + } + + public void setToSkipDay(final Boolean skipDay) { + final DataObject link = (DataObject) get("link"); + link.set(TO_SKIP_DAY, skipDay); + } /** * Gets the value of the order attribute for the current association. diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java index d4e2c5d95..ce1b1c2b0 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Journal.java @@ -38,6 +38,7 @@ public class Journal extends ContentPage { public static final String ISSN = "issn"; public static final String FIRST_YEAR = "firstYear"; public static final String LAST_YEAR = "lastYear"; + public static final String ABSTRACT = "abstract"; public static final String ARTICLES = "articles"; public static final String ARTICLE_ORDER = "articleOrder"; public static final String BASE_DATA_OBJECT_TYPE = @@ -91,6 +92,14 @@ public class Journal extends ContentPage { set(LAST_YEAR, lastYear); } + public String getAbstract() { + return (String) get(ABSTRACT); + } + + public void setAbstract(final String abstractStr) { + set(ABSTRACT, abstractStr); + } + public ArticleInJournalCollection getArticles() { //return new ArticleInJournalCollection((DataCollection) get(ARTICLES)); return getJournalBundle().getArticles(); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java index 62e70b1a6..6caeac1aa 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Series.java @@ -19,13 +19,14 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.cms.ContentPage; +import com.arsdigita.cms.ExtraXMLGenerator; +import com.arsdigita.cms.contenttypes.ui.SeriesExtraXmlGenerator; import com.arsdigita.domain.DataObjectNotFoundException; -import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.OID; -import com.arsdigita.util.Assert; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * @@ -75,27 +76,27 @@ public class Series extends ContentPage { return (SeriesBundle) getContentBundle(); } - public EditshipCollection getEditors() { - //return new EditshipCollection((DataCollection) get(EDITORS)); + public EditshipCollection getEditors() { return getSeriesBundle().getEditors(); } - public void addEditor(final GenericPerson editor, - final Date from, - final Date to) { -// Assert.exists(editor, GenericPerson.class); -// -// DataObject link = add(EDITORS, editor); -// link.set(EDITOR_FROM, from); -// link.set(EDITOR_TO, to); -// link.set(EDITOR_ORDER, Integer.valueOf((int)getEditors().size())); - - getSeriesBundle().addEditor(editor, from, to); + public void addEditor(final GenericPerson editor, + final Date from, + final Boolean fromSkipMonth, + final Boolean fromSkipDay, + final Date to, + final Boolean toSkipMonth, + final Boolean toSkipDay) { + getSeriesBundle().addEditor(editor, + from, + fromSkipMonth, + fromSkipDay, + to, + toSkipMonth, + toSkipDay); } - public void removeEditor(final GenericPerson editor) { - //Assert.exists(editor, GenericPerson.class); - //remove(EDITORS, editor); + public void removeEditor(final GenericPerson editor) { getSeriesBundle().removeEditor(editor); } @@ -103,28 +104,35 @@ public class Series extends ContentPage { return !this.getEditors().isEmpty(); } - public VolumeInSeriesCollection getVolumes() { - //return new VolumeInSeriesCollection((DataCollection) get(PUBLICATIONS)); + public VolumeInSeriesCollection getVolumes() { return getSeriesBundle().getVolumes(); } public void addVolume(final Publication publication, final Integer volume) { -// Assert.exists(publication, Publication.class); -// -// DataObject link = add(PUBLICATIONS, publication); -// -// link.set(VOLUME_OF_SERIES, volume); getSeriesBundle().addVolume(publication, volume); } - public void removeVolume(final Publication publication) { - //Assert.exists(publication, Publication.class); - //remove(PUBLICATIONS, publication); + public void removeVolume(final Publication publication) { getSeriesBundle().removeVolume(publication); } public boolean hasVolumes() { return !this.getVolumes().isEmpty(); } + + @Override + public List getExtraXMLGenerators() { + final List generators = super.getExtraXMLGenerators(); + generators.add(new SeriesExtraXmlGenerator()); + return generators; + } + + @Override + public List getExtraListXMLGenerators() { + final List generators = super.getExtraListXMLGenerators(); + final ExtraXMLGenerator generator = new SeriesExtraXmlGenerator(); + generator.setListMode(true); + return generators; + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesBundle.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesBundle.java index 8b587e276..d7001f1cb 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesBundle.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/SeriesBundle.java @@ -26,6 +26,10 @@ public class SeriesBundle extends ContentBundle { public static final String EDITORS = "editors"; public static final String EDITOR_FROM = "dateFrom"; public static final String EDITOR_TO = "dateTo"; + public static final String EDITOR_FROM_SKIP_MONTH = "dateFromSkipMonth"; + public static final String EDITOR_FROM_SKIP_DAY = "dateFromSkipDay"; + public static final String EDITOR_TO_SKIP_MONTH = "dateToSkipMonth"; + public static final String EDITOR_TO_SKIP_DAY = "dateToSkipDay"; public static final String EDITOR_ORDER = "editor_order"; public static final String PUBLICATIONS = "publications"; public static final String VOLUME_OF_SERIES = "volumeOfSeries"; @@ -106,7 +110,15 @@ public class SeriesBundle extends ContentBundle { final DataObject link = add(EDITORS, livePerson); link.set(EDITOR_FROM, editors.get("link." + EDITOR_FROM)); + link.set(EDITOR_FROM_SKIP_MONTH, + editors.get("link." + EDITOR_FROM_SKIP_MONTH)); + link.set(EDITOR_FROM_SKIP_DAY, + editors.get("link." + EDITOR_FROM_SKIP_DAY)); link.set(EDITOR_TO, editors.get("link." + EDITOR_TO)); + link.set(EDITOR_TO_SKIP_MONTH, + editors.get("link." + EDITOR_TO_SKIP_MONTH)); + link.set(EDITOR_TO_SKIP_DAY, + editors.get("link." + EDITOR_TO_SKIP_DAY)); link.set(EDITOR_ORDER, editors.get("link." + EDITOR_ORDER)); link.save(); @@ -175,7 +187,15 @@ public class SeriesBundle extends ContentBundle { final DataObject link = editor.add("series", liveSeries); link.set(EDITOR_FROM, series.get("link." + EDITOR_FROM)); + link.set(EDITOR_FROM_SKIP_MONTH, + series.get("link." + EDITOR_FROM_SKIP_MONTH)); + link.set(EDITOR_FROM_SKIP_DAY, + series.get("link." + EDITOR_FROM_SKIP_DAY)); link.set(EDITOR_TO, series.get("link." + EDITOR_TO)); + link.set(EDITOR_TO_SKIP_MONTH, + series.get("link." + EDITOR_TO_SKIP_MONTH)); + link.set(EDITOR_TO_SKIP_DAY, + series.get("link." + EDITOR_TO_SKIP_DAY)); link.set(EDITOR_ORDER, series.get("link." + EDITOR_ORDER)); link.save(); @@ -188,13 +208,21 @@ public class SeriesBundle extends ContentBundle { public void addEditor(final GenericPerson editor, final Date from, - final Date to) { + final Boolean fromSkipMonth, + final Boolean fromSkipDay, + final Date to, + final Boolean toSkipMonth, + final Boolean toSkipDay) { Assert.exists(editor, GenericPerson.class); final DataObject link = add(EDITORS, editor.getGenericPersonBundle()); link.set(EDITOR_FROM, from); + link.set(EDITOR_FROM_SKIP_MONTH, fromSkipMonth); + link.set(EDITOR_FROM_SKIP_DAY, fromSkipDay); link.set(EDITOR_TO, to); + link.set(EDITOR_TO_SKIP_MONTH, toSkipMonth); + link.set(EDITOR_TO_SKIP_DAY, toSkipDay); link.set(EDITOR_ORDER, Integer.valueOf((int) getEditors().size())); link.save(); @@ -209,8 +237,8 @@ public class SeriesBundle extends ContentBundle { public VolumeInSeriesCollection getVolumes() { return new VolumeInSeriesCollection((DataCollection) get(PUBLICATIONS)); } - - public void addVolume(final Publication publication, + + public void addVolume(final Publication publication, final Integer volume) { Assert.exists(publication, Publication.class); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/UnPublishedBundle.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/UnPublishedBundle.java index b2945b347..73bb738cc 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/UnPublishedBundle.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/UnPublishedBundle.java @@ -91,7 +91,7 @@ public class UnPublishedBundle extends PublicationBundle { if (orgaunitLive != null) { final DataObject link = add(ORGANIZATION, orgaunitLive); - link.set("orgaOrder", link.get("link.orgaOrder")); + link.set("orgaOrder", 1); link.save(); } @@ -142,7 +142,7 @@ public class UnPublishedBundle extends PublicationBundle { final DataObject link = orgaBundle.add("unPublished", liveUnPublished); - link.set("orgaOrder", publications.get("link.orderOrder")); + link.set("orgaOrder", 1); link.save(); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java index c7a7dc84c..f4fd997c6 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertiesStep.java @@ -84,6 +84,10 @@ public class JournalPropertiesStep extends SimpleEditStep { sheet.add(PublicationGlobalizationUtil.globalize( "publications.ui.journal.lastYearOfPublication"), Journal.LAST_YEAR); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.journal.abstract"), + Journal.ABSTRACT); if (!ContentSection.getConfig().getHideLaunchDate()) { sheet.add(ContenttypesGlobalizationUtil.globalize( diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java index 5165aaaaa..b5dfd128c 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/JournalPropertyForm.java @@ -28,6 +28,7 @@ import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.event.ParameterEvent; import com.arsdigita.bebop.event.ParameterListener; +import com.arsdigita.bebop.form.TextArea; import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.IntegerParameter; import com.arsdigita.bebop.parameters.ParameterData; @@ -47,50 +48,50 @@ public class JournalPropertyForm implements FormProcessListener, FormInitListener, FormSubmissionListener { - + private static final Logger s_log = Logger.getLogger(JournalPropertyForm.class); private JournalPropertiesStep m_step; public static final String ID = "JournalEdit"; - + public JournalPropertyForm(ItemSelectionModel itemModel) { this(itemModel, null); } - + public JournalPropertyForm(ItemSelectionModel itemModel, JournalPropertiesStep step) { super(ID, itemModel); m_step = step; addSubmissionListener(this); } - + @Override protected void addWidgets() { super.addWidgets(); - + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.journal.issn").localize())); ParameterModel issnParam = new StringParameter(Journal.ISSN); TextField issn = new TextField(issnParam); issn.addValidationListener(new ParameterListener() { - + public void validate(ParameterEvent event) throws FormProcessException { ParameterData data = event.getParameterData(); String value = (String) data.getValue(); - + if (value.isEmpty()) { return; } - + value = value.replace("-", ""); - + if (value.length() != 8) { data.invalidate(); data.addError(PublicationGlobalizationUtil.globalize( "publications.ui.invalid_issn")); } - + try { Long num = Long.parseLong(value); } catch (NumberFormatException ex) { @@ -101,52 +102,64 @@ public class JournalPropertyForm } }); add(issn); - + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.journal.firstYearOfPublication").localize())); ParameterModel firstYearParam = new IntegerParameter(Journal.FIRST_YEAR); TextField firstYear = new TextField(firstYearParam); add(firstYear); - + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.journal.lastYearOfPublication").localize())); ParameterModel lastYearParam = new IntegerParameter(Journal.LAST_YEAR); TextField lastYear = new TextField(lastYearParam); add(lastYear); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.journal.abstract").localize())); + ParameterModel abstractParam = new StringParameter(Journal.ABSTRACT); + TextArea abstractArea = new TextArea(abstractParam); + abstractArea.setCols(60); + abstractArea.setRows(18); + add(abstractArea); } - + @Override - public void init(FormSectionEvent fse) throws FormProcessException { + public void init(FormSectionEvent fse) throws FormProcessException { FormData data = fse.getFormData(); Journal journal = (Journal) super.initBasicWidgets(fse); - + data.put(Journal.ISSN, journal.getISSN()); data.put(Journal.FIRST_YEAR, journal.getFirstYear()); data.put(Journal.LAST_YEAR, journal.getLastYear()); + data.put(Journal.ABSTRACT, journal.getAbstract()); } - + @Override - public void process(FormSectionEvent fse) throws FormProcessException { + public void process(FormSectionEvent fse) throws FormProcessException { FormData data = fse.getFormData(); Journal journal = (Journal) super.processBasicWidgets(fse); - + if ((journal != null) && getSaveCancelSection().getSaveButton(). isSelected(fse.getPageState())) { - + String issn = (String) data.get(Journal.ISSN); issn = issn.replace("-", ""); journal.setISSN(issn); - + Integer firstYear = (Integer) data.get(Journal.FIRST_YEAR); journal.setFirstYear(firstYear); - + Integer lastYear = (Integer) data.get(Journal.LAST_YEAR); journal.setLastYear(lastYear); + String abstractStr = (String) data.get(Journal.ABSTRACT); + journal.setAbstract(abstractStr); + journal.save(); } } - + @Override public void submitted(FormSectionEvent fse) throws FormProcessException { if ((m_step != null) && getSaveCancelSection().getCancelButton(). diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/ProceedingsExtraXmlGenerator.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/ProceedingsExtraXmlGenerator.java index c0b05b8c6..0a643fcd0 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/ProceedingsExtraXmlGenerator.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/ProceedingsExtraXmlGenerator.java @@ -47,6 +47,7 @@ public class ProceedingsExtraXmlGenerator implements ExtraXMLGenerator { if (organizer != null) { final XmlGenerator generator = new XmlGenerator(organizer); generator.setItemElemName("organizer", ""); + generator.setListMode(true); generator.generateXML(state, parent, ""); } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java index 005cd0144..820a4832a 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java @@ -20,15 +20,16 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.BasicItemForm; import com.arsdigita.cms.ui.authoring.SimpleEditStep; import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; -import com.arsdigita.cms.contenttypes.GenericPerson; /** * * @author Jens Pelzetter + * @version $Id$ */ public class PublicationAuthorsPropertyStep extends SimpleEditStep { diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java index 23c917249..858e2b853 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java @@ -282,7 +282,7 @@ public class PublicationAuthorsTable int row, int col) { SecurityManager securityManager = - Utilities.getSecurityManager(state); + CMS.getSecurityManager(state); Publication publication = (Publication) m_itemModel. getSelectedObject(state); @@ -314,7 +314,7 @@ public class PublicationAuthorsTable int row, int col) { SecurityManager securityManager = - Utilities.getSecurityManager(state); + CMS.getSecurityManager(state); Publication publication = (Publication) m_itemModel. getSelectedObject(state); 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 d6184d10c..9dcb51f17 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 @@ -40,12 +40,14 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { final Publication publication = (Publication) item; createAuthorsXml(publication, element, state); createOrgaUnitsXml(publication, element, state); - createSeriesXml(publication, element, state); - - final List formats = SciPublicationsExporters. - getInstance().getSupportedFormats(); if (!listMode) { + createSeriesXml(publication, element, state); + + final List formats = SciPublicationsExporters. + getInstance().getSupportedFormats(); + + for (PublicationFormat format : formats) { createExportLink(format, element, (Publication) item, state); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties index 38a75a9dc..10397cf00 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources.properties @@ -389,3 +389,7 @@ publication.ui.series.volumes.remove=Remove volume publications.ui.journal.firstYearOfPublication=First year of publication publications.ui.journal.edit_basic_sheet\ =Basic properties publications.ui.journal.edit_basic_sheet=Edit basic properties +publications.ui.journal.abstract=Short description of the Journal +publications.ui.journal_properties.title=Basic properties +publications.ui.proceedings_properties.title=Basic properties +publications.ui.series.volumes.edit_assoc=Edit diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties index 0be7746e7..e88b91ae1 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationResources_de.properties @@ -388,3 +388,7 @@ publication.ui.series.volumes.remove=Band entfernen publications.ui.journal.firstYearOfPublication=Erstes Erscheinungsjahr publications.ui.journal.edit_basic_sheet\ =Basiseigenschaften publications.ui.journal.edit_basic_sheet=Basiseigenschaften bearbeiten +publications.ui.journal.abstract=Kurze Beschreibung der Zeitschrift +publications.ui.journal_properties.title=Basiseigenschaften +publications.ui.proceedings_properties.title=Basiseigenschaften +publications.ui.series.volumes.edit_assoc=Bearbeiten diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipAddForm.java index f9bdc3d44..0348c0f56 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipAddForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipAddForm.java @@ -26,7 +26,10 @@ import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.form.Hidden; +import com.arsdigita.bebop.parameters.BooleanParameter; import com.arsdigita.bebop.parameters.DateParameter; +import com.arsdigita.bebop.parameters.IncompleteDateParameter; import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.cms.ContentType; import com.arsdigita.cms.ItemSelectionModel; @@ -35,7 +38,6 @@ import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.Series; import com.arsdigita.cms.ui.ItemSearchWidget; import com.arsdigita.cms.ui.authoring.BasicItemForm; -import com.arsdigita.kernel.Kernel; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -80,18 +82,49 @@ public class SeriesEditshipAddForm selectedEditorLabel = new Label(""); add(selectedEditorLabel); + final ParameterModel fromSkipMonthParam = + new BooleanParameter( + EditshipCollection.FROM_SKIP_MONTH); + Hidden fromSkipMonth = new Hidden(fromSkipMonthParam); + add(fromSkipMonth); + + final ParameterModel fromSkipDayParam = + new BooleanParameter( + EditshipCollection.FROM_SKIP_DAY); + Hidden fromSkipDay = new Hidden(fromSkipDayParam); + add(fromSkipDay); + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.series.editship.from").localize())); - ParameterModel fromParam = new DateParameter(EditshipCollection.FROM); + IncompleteDateParameter fromParam = + new IncompleteDateParameter( + EditshipCollection.FROM); + fromParam.allowSkipDay(true); + fromParam.allowSkipMonth(true); com.arsdigita.bebop.form.Date from = new com.arsdigita.bebop.form.Date( fromParam); Calendar today = new GregorianCalendar(); from.setYearRange(1900, today.get(Calendar.YEAR)); add(from); + final ParameterModel toSkipMonthParam = + new BooleanParameter( + EditshipCollection.TO_SKIP_MONTH); + Hidden toSkipMonth = new Hidden(toSkipMonthParam); + add(toSkipMonth); + + final ParameterModel toSkipDayParam = + new BooleanParameter(EditshipCollection.TO_SKIP_DAY); + Hidden toSkipDay = new Hidden(toSkipDayParam); + add(toSkipDay); + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.series.editship.to").localize())); - ParameterModel toParam = new DateParameter(EditshipCollection.TO); + IncompleteDateParameter toParam = + new IncompleteDateParameter( + EditshipCollection.TO); + toParam.allowSkipMonth(true); + toParam.allowSkipDay(true); com.arsdigita.bebop.form.Date to = new com.arsdigita.bebop.form.Date( toParam); to.setYearRange(1900, today.get(Calendar.YEAR)); @@ -103,19 +136,15 @@ public class SeriesEditshipAddForm FormData data = fse.getFormData(); PageState state = fse.getPageState(); - GenericPerson editor; - Date from; - Date to; - - editor = editStep.getSelectedEditor(); - from = editStep.getSelectedEditorDateFrom(); - to = editStep.getSelectedEditorDateTo(); + GenericPerson editor = editStep.getSelectedEditor(); + Date from = editStep.getSelectedEditorDateFrom(); + Date to = editStep.getSelectedEditorDateTo(); if (editor == null) { m_itemSearch.setVisible(state, true); selectedEditorLabel.setVisible(state, false); } else { - data.put(ITEM_SEARCH, editor); + //data.put(ITEM_SEARCH, editor); data.put(EditshipCollection.FROM, from); data.put(EditshipCollection.TO, to); @@ -134,8 +163,8 @@ public class SeriesEditshipAddForm Series series = (Series) getItemSelectionModel().getSelectedObject(state); - if (!(this.getSaveCancelSection(). - getCancelButton().isSelected(state))) { + if (this.getSaveCancelSection(). + getSaveButton().isSelected(state)) { GenericPerson editor; editor = editStep.getSelectedEditor(); @@ -146,7 +175,15 @@ public class SeriesEditshipAddForm series.addEditor(editorToAdd, (Date) data.get(EditshipCollection.FROM), - (Date) data.get(EditshipCollection.TO)); + (Boolean) data.get( + EditshipCollection.FROM_SKIP_MONTH), + (Boolean) data.get( + EditshipCollection.FROM_SKIP_DAY), + (Date) data.get(EditshipCollection.TO), + (Boolean) data.get( + EditshipCollection.TO_SKIP_MONTH), + (Boolean) data.get( + EditshipCollection.TO_SKIP_DAY)); } else { EditshipCollection editors; @@ -159,7 +196,15 @@ public class SeriesEditshipAddForm } editors.setFrom((Date) data.get(EditshipCollection.FROM)); + editors.setFromSkipMonth((Boolean) data.get( + EditshipCollection.FROM_SKIP_MONTH)); + editors.setFromSkipDay((Boolean) data.get( + EditshipCollection.FROM_SKIP_DAY)); editors.setTo((Date) data.get(EditshipCollection.TO)); + editors.setToSkipMonth((Boolean) data.get( + EditshipCollection.TO_SKIP_MONTH)); + editors.setToSkipDay((Boolean) data.get( + EditshipCollection.TO_SKIP_DAY)); editStep.setSelectedEditor(null); editStep.setSelectedEditorDateFrom(null); @@ -179,17 +224,19 @@ public class SeriesEditshipAddForm editStep.setSelectedEditor(null); editStep.setSelectedEditorDateFrom(null); editStep.setSelectedEditorDateTo(null); - } - init(fse); + init(fse); + } } @Override public void validate(FormSectionEvent fse) throws FormProcessException { final PageState state = fse.getPageState(); final FormData data = fse.getFormData(); + boolean editing = false; - if (data.get(ITEM_SEARCH) == null) { + if ((editStep.getSelectedEditor() == null) + && (data.get(ITEM_SEARCH) == null)) { data.addError(PublicationGlobalizationUtil.globalize( "publications.ui.series.editship.no_editor_selected")); return; @@ -198,24 +245,22 @@ public class SeriesEditshipAddForm Series series = (Series) getItemSelectionModel().getSelectedObject(state); GenericPerson editor = (GenericPerson) data.get(ITEM_SEARCH); - if (!(editor.getContentBundle().hasInstance(series.getLanguage(), - Kernel.getConfig(). - languageIndependentItems()))) { - data.addError( - PublicationGlobalizationUtil.globalize( - "publications.ui.series.editship.no_suitable_language_variant")); - return; + if (editor == null) { + editor = editStep.getSelectedEditor(); + editing = true; } - editor = (GenericPerson) editor.getContentBundle().getInstance(series. - getLanguage()); - EditshipCollection editors = series.getEditors(); - editors.addFilter(String.format("id = %s", editor.getID().toString())); - if (editors.size() > 0) { - data.addError(PublicationGlobalizationUtil.globalize( - "publications.ui.series.editship.already_added")); - } - editors.close(); + if (!editing) { + EditshipCollection editors = series.getEditors(); + editors.addFilter( + String.format("id = %s", editor.getID().toString())); + if (editors.size() > 0) { + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.already_added")); + } + + editors.close(); + } } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipTable.java index 403e91190..fd981aa5e 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipTable.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipTable.java @@ -229,7 +229,7 @@ public class SeriesEditshipTable extends Table implements TableActionListener { int row, int col) { SecurityManager securityManager = - Utilities.getSecurityManager(state); + CMS.getSecurityManager(state); Series series = (Series) m_itemModel.getSelectedObject(state); boolean canEdit = securityManager.canAccess( @@ -250,7 +250,7 @@ public class SeriesEditshipTable extends Table implements TableActionListener { ContentSection section = CMS.getContext().getContentSection(); ItemResolver resolver = section.getItemResolver(); Link link = - new Link(String.format("%s (%s)", + new Link(String.format("%s", value.toString(), editor.getLanguage()), resolver.generateItemURL(state, @@ -269,7 +269,7 @@ public class SeriesEditshipTable extends Table implements TableActionListener { ex); return new Label(value.toString()); } - Label label = new Label(String.format("%s (%s)", + Label label = new Label(String.format("%s", value.toString(), editor.getLanguage())); return label; @@ -290,7 +290,7 @@ public class SeriesEditshipTable extends Table implements TableActionListener { int row, int col) { SecurityManager securityManager = - Utilities.getSecurityManager(state); + CMS.getSecurityManager(state); Series series = (Series) m_itemModel.getSelectedObject(state); boolean canEdit = securityManager.canAccess( diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java new file mode 100644 index 000000000..84f3d170c --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesExtraXmlGenerator.java @@ -0,0 +1,179 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ExtraXMLGenerator; +import com.arsdigita.cms.contenttypes.EditshipCollection; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.Series; +import com.arsdigita.cms.contenttypes.VolumeInSeriesCollection; +import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; +import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.xml.Element; +import java.text.DateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class SeriesExtraXmlGenerator implements ExtraXMLGenerator { + + private boolean listMode = false; + + public void generateXML(final ContentItem item, + final Element element, + final PageState state) { + if (!(item instanceof Series)) { + throw new IllegalArgumentException(String.format( + "ExtraXMLGenerator '%s' only supports items of type '%s'.", + getClass().getName(), + Series.class.getName())); + } + + final Series series = (Series) item; + createEditorsXml(series, element, state); + if (!listMode) { + createVolumesXml(series, element, state); + } + } + + private void createEditorsXml(final Series series, + final Element parent, + final PageState state) { + final EditshipCollection editors = series.getEditors(); + if ((editors == null) || editors.isEmpty()) { + return; + } + + final Element editorsElem = parent.newChildElement("editors"); + while (editors.next()) { + createEditorXml(editors.getEditor(), + editors.getEditorOrder(), + editors.getFrom(), + editors.getFromSkipMonth(), + editors.getFromSkipDay(), + editors.getTo(), + editors.getToSkipMonth(), + editors.getToSkipDay(), + editorsElem, + state); + } + } + + private void createEditorXml(final GenericPerson editor, + final Integer order, + final Date from, + final Boolean fromSkipMonth, + final Boolean fromSkipDay, + final Date to, + final Boolean toSkipMonth, + final Boolean toSkipDay, + final Element editorsElem, + final PageState state) { + final XmlGenerator generator = new XmlGenerator(editor); + generator.setItemElemName("editor", ""); + generator.addItemAttribute("order", order.toString()); + if (from != null) { + createDateAttr(generator, from, "from"); + generator.addItemAttribute("fromSkipMonth", fromSkipMonth.toString()); + generator.addItemAttribute("fromSkipDay", fromSkipDay.toString()); + } + if (to != null) { + createDateAttr(generator, to, "to"); + generator.addItemAttribute("toSkipMonth", toSkipMonth.toString()); + generator.addItemAttribute("toSkipDay", toSkipDay.toString()); + } + generator.setListMode(listMode); + generator.generateXML(state, editorsElem, ""); + } + + private void createVolumesXml(final Series series, + final Element parent, + final PageState state) { + final VolumeInSeriesCollection volumes = series.getVolumes(); + if ((volumes == null) || volumes.isEmpty()) { + return; + } + + final Element volumesElem = parent.newChildElement("volumes"); + while (volumes.next()) { + createVolumeXml(volumes.getPublication(GlobalizationHelper. + getNegotiatedLocale().getLanguage()), + volumes.getVolumeOfSeries(), + volumesElem, + state); + } + } + + private void createDateAttr(final XmlGenerator generator, + final Date date, + final String prefix) { + final Calendar cal = Calendar.getInstance(); + cal.setTime(date); + + generator.addItemAttribute(String.format("%sYear", prefix), + Integer.toString(cal.get(Calendar.YEAR))); + generator.addItemAttribute(String.format("%sMonth", prefix), + Integer.toString(cal.get(Calendar.MONTH))); + generator.addItemAttribute(String.format("%sDay", prefix), + Integer.toString(cal.get( + Calendar.DAY_OF_MONTH))); + + final Locale locale = GlobalizationHelper.getNegotiatedLocale(); + final DateFormat dateFormat = DateFormat.getDateInstance( + DateFormat.MEDIUM, locale); + final DateFormat longDateFormat = DateFormat.getDateInstance( + DateFormat.LONG, locale); + generator.addItemAttribute(String.format("%sDate", prefix), + dateFormat.format(date)); + generator.addItemAttribute(String.format("%sLongDate", prefix), + longDateFormat.format(date)); + generator.addItemAttribute(String.format("%sMonthName", prefix), + cal.getDisplayName(Calendar.MONTH, + Calendar.LONG, + locale)); + + } + + private void createVolumeXml(final Publication publication, + final Integer volume, + final Element volumesElem, + final PageState state) { + final XmlGenerator generator = new XmlGenerator(publication); + generator.setItemElemName("publication", ""); + if (volume != null) { + generator.addItemAttribute("volumeNr", volume.toString()); + } + generator.setListMode(true); + generator.generateXML(state, volumesElem, ""); + } + + public void addGlobalStateParams(final Page page) { + //nothing + } + + public void setListMode(final boolean listMode) { + this.listMode = listMode; + } + + private class XmlGenerator extends SimpleXMLGenerator { + + private final ContentItem item; + + public XmlGenerator(final ContentItem item) { + super(); + this.item = item; + } + + @Override + protected ContentItem getContentItem(final PageState state) { + return item; + } + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java index 6e130b6a5..8927864c3 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java @@ -27,7 +27,6 @@ import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.form.TextArea; -import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ItemSelectionModel; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java index 68e33b727..3c8151057 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java @@ -35,6 +35,7 @@ import com.arsdigita.cms.contenttypes.Series; import com.arsdigita.cms.contenttypes.VolumeInSeriesCollection; import com.arsdigita.cms.ui.ItemSearchWidget; import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; import com.arsdigita.kernel.Kernel; import org.apache.log4j.Logger; @@ -51,10 +52,15 @@ public class SeriesVolumeAddForm extends BasicItemForm { private SaveCancelSection m_saveCancelSection; private final String ITEM_SEARCH = "volumes"; private ItemSelectionModel m_itemModel; + private SimpleEditStep editStep; + private Label selectedVolumeLabel; + private TextField volumeOfSeries; - public SeriesVolumeAddForm(ItemSelectionModel itemModel) { + public SeriesVolumeAddForm(ItemSelectionModel itemModel, + SimpleEditStep editStep) { super("VolumesEntryForm", itemModel); m_itemModel = itemModel; + this.editStep = editStep; } @Override @@ -68,11 +74,14 @@ public class SeriesVolumeAddForm extends BasicItemForm { Publication.class.getName())); add(m_itemSearch); + selectedVolumeLabel = new Label(""); + add(selectedVolumeLabel); + add(new Label((String) PublicationGlobalizationUtil.globalize( "publications.ui.series.volume_of_series").localize())); ParameterModel volumeOfSeriesParam = new IntegerParameter( VolumeInSeriesCollection.VOLUME_OF_SERIES); - TextField volumeOfSeries = new TextField(volumeOfSeriesParam); + volumeOfSeries = new TextField(volumeOfSeriesParam); add(volumeOfSeries); } @@ -81,6 +90,27 @@ public class SeriesVolumeAddForm extends BasicItemForm { FormData data = fse.getFormData(); PageState state = fse.getPageState(); + final Publication publication = ((SeriesVolumesStep) editStep). + getSelectedPublication(); + final Integer volume = + ((SeriesVolumesStep) editStep).getSelectedVolume(); + + if (publication == null) { + m_itemSearch.setVisible(state, true); + selectedVolumeLabel.setVisible(state, false); + } else { + data.put(ITEM_SEARCH, publication); + if ((volume == null)) { + volumeOfSeries.setValue(state, 0); + } else { + volumeOfSeries.setValue(state, volume); + } + + m_itemSearch.setVisible(state, false); + selectedVolumeLabel.setLabel(publication.getTitle(), state); + selectedVolumeLabel.setVisible(state, true); + } + setVisible(state, true); } @@ -93,13 +123,41 @@ public class SeriesVolumeAddForm extends BasicItemForm { if (!(this.getSaveCancelSection().getCancelButton(). isSelected(state))) { - Publication volume = (Publication) data.get(ITEM_SEARCH); - volume = (Publication) volume.getContentBundle().getInstance(series. - getLanguage()); + Publication volume = ((SeriesVolumesStep) editStep). + getSelectedPublication(); - series.addVolume(volume, - (Integer) data.get( - VolumeInSeriesCollection.VOLUME_OF_SERIES)); + Integer volOfSeries; + if (this.volumeOfSeries.getValue(state) == null) { + volOfSeries = null; + } else { + volOfSeries = data.getInteger( + VolumeInSeriesCollection.VOLUME_OF_SERIES); + } + + if (volume == null) { + volume = (Publication) data.get(ITEM_SEARCH); + volume = (Publication) volume.getContentBundle().getInstance(series. + getLanguage()); + + series.addVolume(volume, + (Integer) data.get( + VolumeInSeriesCollection.VOLUME_OF_SERIES)); + } else { + VolumeInSeriesCollection volumes = series.getVolumes(); + + while (volumes.next()) { + if (volumes.getPublication().equals(volume)) { + break; + } + } + + volumes.setVolumeOfSeries(volOfSeries); + + ((SeriesVolumesStep) editStep).setSelectedPublication(null); + ((SeriesVolumesStep) editStep).setSelectedVolume(null); + + volumes.close(); + } } init(fse); @@ -109,8 +167,10 @@ public class SeriesVolumeAddForm extends BasicItemForm { public void validate(FormSectionEvent fse) throws FormProcessException { final PageState state = fse.getPageState(); final FormData data = fse.getFormData(); + boolean editing = false; - if (data.get(ITEM_SEARCH) == null) { + if ((((SeriesVolumesStep) editStep).getSelectedPublication() == null) + && (data.get(ITEM_SEARCH) == null)) { data.addError( PublicationGlobalizationUtil.globalize( "publications.ui.series.volume_of_series.no_volume_selected")); @@ -120,24 +180,21 @@ public class SeriesVolumeAddForm extends BasicItemForm { Series series = (Series) getItemSelectionModel(). getSelectedObject(state); Publication volume = (Publication) data.get(ITEM_SEARCH); - if (!(volume.getContentBundle().hasInstance(series.getLanguage(), - Kernel.getConfig(). - languageIndependentItems()))) { - data.addError( - PublicationGlobalizationUtil.globalize( - "publications.ui.series.volume_of_series.no_suitable_language_variant")); - return; + if (volume == null) { + volume = ((SeriesVolumesStep) editStep).getSelectedPublication(); + editing = true; } - volume = (Publication) volume.getContentBundle().getInstance(series. - getLanguage()); - VolumeInSeriesCollection volumes = series.getVolumes(); - volumes.addFilter(String.format("id = %s", volume.getID().toString())); - if (volumes.size() > 0) { - data.addError(PublicationGlobalizationUtil.globalize( - "publications.ui.series.volume_of_series.already_added")); - } - volumes.close(); + if (!editing) { + VolumeInSeriesCollection volumes = series.getVolumes(); + volumes.addFilter( + String.format("id = %s", volume.getID().toString())); + if (volumes.size() > 0) { + data.addError(PublicationGlobalizationUtil.globalize( + "publications.ui.series.volume_of_series.already_added")); + } + volumes.close(); + } } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java index f3d5ea510..295f0c469 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java @@ -20,6 +20,7 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.BasicItemForm; import com.arsdigita.cms.ui.authoring.SimpleEditStep; @@ -28,10 +29,13 @@ import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; /** * * @author Jens Pelzetter + * @version $Id4 */ public class SeriesVolumesStep extends SimpleEditStep { - private static final String ADD_VOLUME_SHEET_NAME = "addVolume"; + protected static final String ADD_VOLUME_SHEET_NAME = "addVolume"; + private Publication selectedPublication; + private Integer selectedVolume; public SeriesVolumesStep( ItemSelectionModel itemModel, @@ -46,16 +50,31 @@ public class SeriesVolumesStep extends SimpleEditStep { super(itemModel, parent, prefix); BasicItemForm addVolumeSheet = - new SeriesVolumeAddForm(itemModel); + new SeriesVolumeAddForm(itemModel, this); add(ADD_VOLUME_SHEET_NAME, - (String) PublicationGlobalizationUtil.globalize( + (String) PublicationGlobalizationUtil.globalize( "publications.ui.series.add_volume").localize(), - new WorkflowLockedComponentAccess(addVolumeSheet, itemModel), - addVolumeSheet.getSaveCancelSection().getCancelButton()); + new WorkflowLockedComponentAccess(addVolumeSheet, itemModel), + addVolumeSheet.getSaveCancelSection().getCancelButton()); SeriesVolumesTable volumesTable = new SeriesVolumesTable( - itemModel); + itemModel, this); setDisplayComponent(volumesTable); } + public Publication getSelectedPublication() { + return selectedPublication; + } + + public void setSelectedPublication(final Publication selectedPublication) { + this.selectedPublication = selectedPublication; + } + + public Integer getSelectedVolume() { + return selectedVolume; + } + + public void setSelectedVolume(final Integer selectedVolume) { + this.selectedVolume = selectedVolume; + } } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java index ddad21b47..8c2f4f25b 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java @@ -40,7 +40,7 @@ import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.Series; import com.arsdigita.cms.contenttypes.VolumeInSeriesCollection; import com.arsdigita.cms.dispatcher.ItemResolver; -import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; import com.arsdigita.dispatcher.ObjectNotFoundException; import com.arsdigita.util.LockableImpl; import java.math.BigDecimal; @@ -49,18 +49,23 @@ import org.apache.log4j.Logger; /** * * @author Jens Pelzetter + * @version $Id$ */ public class SeriesVolumesTable extends Table implements TableActionListener { private static final Logger s_log = Logger.getLogger(SeriesVolumesTable.class); private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_EDIT_ASSOC = "table_col_edit_assoc"; private final String TABLE_COL_DEL = "table_col_del"; private ItemSelectionModel m_itemModel; + private SimpleEditStep editStep; - public SeriesVolumesTable(ItemSelectionModel itemModel) { + public SeriesVolumesTable(ItemSelectionModel itemModel, + SimpleEditStep editStep) { super(); m_itemModel = itemModel; + this.editStep = editStep; setEmptyView( new Label(PublicationGlobalizationUtil.globalize( @@ -79,13 +84,21 @@ public class SeriesVolumesTable extends Table implements TableActionListener { colModel.add(new TableColumn( 2, PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.edit_assoc").localize(), + TABLE_COL_EDIT_ASSOC)); + colModel.add(new TableColumn( + 3, + PublicationGlobalizationUtil.globalize( "publications.ui.series.volumes.remove").localize(), TABLE_COL_DEL)); setModelBuilder(new SeriesVolumesTableModelBuilder(itemModel)); colModel.get(0).setCellRenderer(new EditCellRenderer()); - colModel.get(2).setCellRenderer(new DeleteCellRenderer()); + colModel.get(2).setCellRenderer(new EditAssocCellRenderer()); + colModel.get(3).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(this); } private class SeriesVolumesTableModelBuilder @@ -149,6 +162,10 @@ public class SeriesVolumesTable extends Table implements TableActionListener { case 1: return m_volumesCollection.getVolumeOfSeries(); case 2: + return PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.edit_assoc"). + localize(); + case 3: return PublicationGlobalizationUtil.globalize( "publication.ui.series.volumes.remove").localize(); default: @@ -175,7 +192,7 @@ public class SeriesVolumesTable extends Table implements TableActionListener { int row, int col) { SecurityManager securityManager = - Utilities.getSecurityManager(state); + CMS.getSecurityManager(state); Series series = (Series) m_itemModel.getSelectedObject(state); boolean canEdit = securityManager.canAccess( @@ -197,9 +214,8 @@ public class SeriesVolumesTable extends Table implements TableActionListener { ContentSection section = CMS.getContext().getContentSection(); ItemResolver resolver = section.getItemResolver(); Link link = - new Link(String.format("%s (%s)", - value.toString(), - volume.getLanguage()), + new Link(String.format("%s", + value.toString()), resolver.generateItemURL(state, volume, section, @@ -217,9 +233,38 @@ public class SeriesVolumesTable extends Table implements TableActionListener { return new Label(value.toString()); } - Label label = new Label(String.format("%s (%s)", - value.toString(), - volume.getLanguage())); + Label label = new Label(String.format("%s", + value.toString())); + return label; + } + } + } + + private class EditAssocCellRenderer + extends LockableImpl + implements TableCellRenderer { + + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + final SecurityManager securityManager = + CMS.getSecurityManager(state); + final Series series = (Series) m_itemModel.getSelectedObject(state); + + boolean canEdit = securityManager.canAccess( + state.getRequest(), + SecurityManager.EDIT_ITEM, + series); + + if (canEdit) { + ControlLink link = new ControlLink(value.toString()); + return link; + } else { + Label label = new Label(value.toString()); return label; } } @@ -239,7 +284,7 @@ public class SeriesVolumesTable extends Table implements TableActionListener { int row, int col) { SecurityManager securityManager = - Utilities.getSecurityManager(state); + CMS.getSecurityManager(state); Series series = (Series) m_itemModel.getSelectedObject(state); boolean canDelete = securityManager.canAccess( @@ -271,11 +316,28 @@ public class SeriesVolumesTable extends Table implements TableActionListener { Series series = (Series) m_itemModel.getSelectedObject(state); - //VolumeInSeriesCollection volumes = series.getVolumes(); - TableColumn column = getColumnModel().get(event.getColumn().intValue()); + VolumeInSeriesCollection volumes = series.getVolumes(); + if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { + } else if (TABLE_COL_EDIT_ASSOC.equals(column.getHeaderKey().toString())) { + while (volumes.next()) { + if (volumes.getPublication(publication.getLanguage()).equals( + publication)) { + break; + } + } + + ((SeriesVolumesStep) editStep).setSelectedPublication( + publication); + ((SeriesVolumesStep) editStep).setSelectedVolume(volumes. + getVolumeOfSeries()); + + volumes.close(); + + editStep.showComponent(state, + SeriesVolumesStep.ADD_VOLUME_SHEET_NAME); } else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { series.removeVolume(publication); } diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/UnPublishedExtraXmlGenerator.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/UnPublishedExtraXmlGenerator.java index 04fbb2e55..f1aacab8b 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/UnPublishedExtraXmlGenerator.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/UnPublishedExtraXmlGenerator.java @@ -17,6 +17,8 @@ import com.arsdigita.xml.Element; */ public class UnPublishedExtraXmlGenerator implements ExtraXMLGenerator { + private boolean listMode = false; + public void generateXML(final ContentItem item, final Element element, final PageState state) { @@ -40,6 +42,7 @@ public class UnPublishedExtraXmlGenerator implements ExtraXMLGenerator { if (orga != null) { final XmlGenerator generator = new XmlGenerator(orga); generator.setItemElemName("organization", ""); + generator.setListMode(listMode); generator.generateXML(state, parent, ""); } } @@ -51,7 +54,7 @@ public class UnPublishedExtraXmlGenerator implements ExtraXMLGenerator { @Override public void setListMode(final boolean listMode) { - //nothing + this.listMode = listMode; } private class XmlGenerator extends SimpleXMLGenerator {