From 80791e4adf5d6e1331845e98dae3ac457463d6e4 Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 20 Aug 2010 15:37:45 +0000 Subject: [PATCH] Naechster Satz von UI Klassen fuer das Publikationen-Modul. git-svn-id: https://svn.libreccm.org/ccm/trunk@512 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/contenttypes/Publication.java | 2 +- .../VolumeInSeriesCollection.java | 7 +- .../ui/PublicationAuthorsPropertyStep.java | 3 +- .../ui/PublicationAuthorsTable.java | 7 +- .../ui/PublicationPropertyForm.java | 14 +- .../ui/SeriesEditshipAddForm.java | 95 ++++++ .../contenttypes/ui/SeriesEditshipStep.java | 38 +++ .../contenttypes/ui/SeriesEditshipTable.java | 317 ++++++++++++++++++ .../contenttypes/ui/SeriesPropertiesStep.java | 112 +++++++ .../contenttypes/ui/SeriesPropertyForm.java | 87 +++++ .../contenttypes/ui/SeriesVolumeAddForm.java | 84 +++++ .../contenttypes/ui/SeriesVolumesStep.java | 42 +++ .../contenttypes/ui/SeriesVolumesTable.java | 231 +++++++++++++ 13 files changed, 1027 insertions(+), 12 deletions(-) create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipAddForm.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipTable.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java index 1eacbfe56..8e5238ca6 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java @@ -30,7 +30,7 @@ import java.math.BigDecimal; * * @author Jens Pelzetter */ -public abstract class Publication extends ContentPage { +public class Publication extends ContentPage { public final static String YEAR_OF_PUBLICATION = "yearOfPublication"; public final static String ABSTRACT = "abstract"; diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java index 4044c3cd2..64f3e0eb1 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/VolumeInSeriesCollection.java @@ -33,7 +33,7 @@ public class VolumeInSeriesCollection extends DomainCollection { public static final String LINK_VOLUME_OF_SERIES = "link.volumeOfSeries"; public static final String VOLUME_OF_SERIES = "volumeOfSeries"; public static final Logger s_log = - Logger.getLogger(VolumeInSeriesCollection.class); + Logger.getLogger(VolumeInSeriesCollection.class); public VolumeInSeriesCollection(DataCollection dataCollection) { super(dataCollection); @@ -59,8 +59,7 @@ public class VolumeInSeriesCollection extends DomainCollection { * * @return The current data object. */ - public DataObject getPublication() { - return m_dataCollection.getDataObject(); + public Publication getPublication() { + return new Publication(m_dataCollection.getDataObject()); } - } 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 2df68b80c..41c0185ae 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 @@ -14,7 +14,8 @@ public class PublicationAuthorsPropertyStep extends SimpleEditStep { private static final String ADD_AUTHOR_SHEET_NAME = "addAuthor"; public PublicationAuthorsPropertyStep( - ItemSelectionModel itemModel, AuthoringKitWizard parent) { + ItemSelectionModel itemModel, + AuthoringKitWizard parent) { this(itemModel, parent, null); } 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 2e2d856a8..7b9df30da 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 @@ -34,8 +34,8 @@ public class PublicationAuthorsTable Logger.getLogger(PublicationAuthorsTable.class); private final String TABLE_COL_EDIT = "table_col_edit"; private final String TABLE_COL_DEL = "table_col_del"; - private final static String TABLE_COL_UP = "table_col_up"; - private final static String TABLE_COL_DOWN = "table_col_down"; + private final String TABLE_COL_UP = "table_col_up"; + private final String TABLE_COL_DOWN = "table_col_down"; private ItemSelectionModel m_itemModel; public PublicationAuthorsTable(ItemSelectionModel itemModel) { @@ -115,10 +115,12 @@ public class PublicationAuthorsTable m_authorshipCollection = publication.getAuthors(); } + @Override public int getColumnCount() { return m_table.getColumnModel().size(); } + @Override public boolean nextRow() { boolean ret; @@ -133,6 +135,7 @@ public class PublicationAuthorsTable return ret; } + @Override public Object getElementAt(int columnIndex) { switch (columnIndex) { case 0: diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java index 7ac562499..36ca786ac 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java @@ -21,8 +21,11 @@ import org.apache.log4j.Logger; * * @author Jens Pelzetter */ -public class PublicationPropertyForm extends BasicPageForm implements - FormProcessListener, FormInitListener, FormSubmissionListener { +public class PublicationPropertyForm + extends BasicPageForm + implements FormProcessListener, + FormInitListener, + FormSubmissionListener { private static final Logger s_log = Logger.getLogger( PublicationPropertyForm.class); @@ -92,9 +95,11 @@ public class PublicationPropertyForm extends BasicPageForm implements FormData data = fse.getFormData(); Publication publication = (Publication) super.processBasicWidgets(fse); - if((publication != null) && getSaveCancelSection().getSaveButton().isSelected(fse.getPageState())) { + if ((publication != null) && getSaveCancelSection().getSaveButton(). + isSelected(fse.getPageState())) { publication.setTitle((String) data.get(Publication.NAME)); - publication.setYearOfPublication((Integer) data.get(Publication.YEAR_OF_PUBLICATION)); + publication.setYearOfPublication((Integer) data.get( + Publication.YEAR_OF_PUBLICATION)); publication.setAbstract((String) data.get(Publication.ABSTRACT)); publication.setMisc((String) data.get(Publication.MISC)); @@ -106,6 +111,7 @@ public class PublicationPropertyForm extends BasicPageForm implements } } + @Override public void submitted(FormSectionEvent fse) throws FormProcessException { if ((m_step != null) && getSaveCancelSection().getCancelButton(). isSelected(fse.getPageState())) { 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 new file mode 100644 index 000000000..893172917 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipAddForm.java @@ -0,0 +1,95 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SaveCancelSection; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.parameters.DateParameter; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.EditshipCollection; +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 java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesEditshipAddForm extends BasicItemForm { + + private static final Logger s_log = + Logger.getLogger(SeriesEditshipAddForm.class); + private SeriesPropertiesStep m_step; + private ItemSearchWidget m_itemSearch; + private SaveCancelSection m_saveCancelSection; + private final String ITEM_SEARCH = "editors"; + private ItemSelectionModel m_itemModel; + + public SeriesEditshipAddForm(ItemSelectionModel itemModel) { + super("EditorsEntryForm", itemModel); + m_itemModel = itemModel; + } + + @Override + protected void addWidgets() { + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.editorship.selectEditors").localize())); + m_itemSearch = new ItemSearchWidget( + ITEM_SEARCH, + ContentType.findByAssociatedObjectType(GenericPerson.class. + getName())); + add(m_itemSearch); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.editorship.from").localize())); + ParameterModel fromParam = new DateParameter(EditshipCollection.FROM); + 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); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.editorship.to").localize())); + ParameterModel toParam = new DateParameter(EditshipCollection.TO); + com.arsdigita.bebop.form.Date to = new com.arsdigita.bebop.form.Date( + toParam); + to.setYearRange(1900, today.get(Calendar.YEAR)); + add(to); + } + + @Override + public void init(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + + setVisible(state, true); + } + + @Override + public void process(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Series series = + (Series) getItemSelectionModel().getSelectedObject(state); + + if (!(this.getSaveCancelSection(). + getCancelButton().isSelected(state))) { + series.addEditor((GenericPerson) data.get(ITEM_SEARCH), + (Date) data.get(EditshipCollection.FROM), + (Date) data.get(EditshipCollection.TO)); + } + + init(fse); + + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipStep.java new file mode 100644 index 000000000..ca78a8faf --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipStep.java @@ -0,0 +1,38 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +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.authoring.WorkflowLockedComponentAccess; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesEditshipStep extends SimpleEditStep { + + private static final String ADD_EDITOR_SHEET_NAME = "addEditor"; + + public SeriesEditshipStep( + ItemSelectionModel itemModel, AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public SeriesEditshipStep( + ItemSelectionModel itemModel, + AuthoringKitWizard parent, + String prefix) { + super(itemModel, parent, prefix); + + BasicItemForm addEditorSheet = new SeriesEditshipAddForm(itemModel); + add(ADD_EDITOR_SHEET_NAME, + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.add_editship").localize(), + new WorkflowLockedComponentAccess(addEditorSheet, itemModel), + addEditorSheet.getSaveCancelSection().getCancelButton()); + + SeriesEditshipTable editorsTable = new SeriesEditshipTable(itemModel); + setDisplayComponent(editorsTable); + } +} 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 new file mode 100644 index 000000000..9aaa57f0c --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesEditshipTable.java @@ -0,0 +1,317 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.bebop.table.TableColumn; +import com.arsdigita.bebop.table.TableColumnModel; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.bebop.table.TableModelBuilder; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.SecurityManager; +import com.arsdigita.cms.contenttypes.EditshipCollection; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Series; +import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesEditshipTable extends Table implements TableActionListener { + + private static final Logger s_log = + Logger.getLogger(SeriesEditshipTable.class); + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_DEL = "table_col_del"; + //private final String TABLE_COL_UP = "table_col_up"; + //private final String TABLE_COL_DOWN = "table_col_down"; + private ItemSelectionModel m_itemModel; + + public SeriesEditshipTable(ItemSelectionModel itemModel) { + super(); + m_itemModel = itemModel; + + setEmptyView( + new Label(PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.none"))); + + TableColumnModel colModel = getColumnModel(); + colModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.name").localize(), + TABLE_COL_EDIT)); + colModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.from").localize())); + colModel.add(new TableColumn( + 2, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.to").localize())); + colModel.add(new TableColumn( + 3, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.remove").localize(), + TABLE_COL_DEL)); + /* Just in the case someone want's to sort editships manually..." */ + /* colModel.add(new TableColumn( + 4, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.edithship.up").localize(), + TABLE_COL_UP)); + colModel.add(new TableColumn( + 5, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.down").localize(), + TABLE_COL_DOWN));*/ + + setModelBuilder(new SeriesEditshipTableModelBuilder(itemModel)); + + colModel.get(0).setCellRenderer(new EditCellRenderer()); + colModel.get(3).setCellRenderer(new DeleteCellRenderer()); + //colModel.get(4).setCellRenderer(new UpCellRenderer()); + //colModel.get(5).setCellRenderer(new DownCellRenderer()); + } + + private class SeriesEditshipTableModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private ItemSelectionModel m_itemModel; + + public SeriesEditshipTableModelBuilder( + ItemSelectionModel itemModel) { + m_itemModel = itemModel; + } + + public TableModel makeModel(Table table, PageState state) { + table.getRowSelectionModel().clearSelection(state); + Series series = + (Series) m_itemModel.getSelectedObject(state); + return new SeriesEditshipTableModel(table, state, series); + } + } + + private class SeriesEditshipTableModel implements TableModel { + + private final int MAX_DESC_LENGTH = 25; + private Table m_table; + private EditshipCollection m_editshipCollection; + private GenericPerson m_editor; + + private SeriesEditshipTableModel( + Table table, + PageState state, + Series series) { + m_table = table; + m_editshipCollection = series.getEditors(); + } + + @Override + public int getColumnCount() { + return m_table.getColumnModel().size(); + } + + @Override + public boolean nextRow() { + boolean ret; + + if ((m_editshipCollection != null) && m_editshipCollection.next()) { + m_editor = m_editshipCollection.getEditor(); + ret = true; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(int columnIndex) { + switch (columnIndex) { + case 0: + return m_editor.getFullName(); + case 1: + return m_editshipCollection.getFrom(); + case 2: + return m_editshipCollection.getTo(); + case 3: + return PublicationGlobalizationUtil.globalize( + "publications.ui.series.editship.remove"). + localize(); + default: + return null; + } + } + + public Object getKeyAt(int columnIndex) { + return m_editor.getID(); + } + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + SecurityManager securityManager = + Utilities.getSecurityManager(state); + 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; + } + } + } + + private class DeleteCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + SecurityManager securityManager = + Utilities.getSecurityManager(state); + Series series = (Series) m_itemModel.getSelectedObject(state); + + boolean canDelete = securityManager.canAccess( + state.getRequest(), + SecurityManager.DELETE_ITEM, + series); + + if (canDelete) { + ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String) PublicationGlobalizationUtil. + globalize("publications.ui.editship.remove.confirm"). + localize()); + return link; + } else { + Label label = new Label(value.toString()); + return label; + } + } + } + + /* + private class UpCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + + if (0 == row) { + s_log.debug("Row is first row in table, don't show up link"); + Label label = new Label(""); + return label; + } else { + ControlLink link = new ControlLink("up"); + return link; + } + } + }*/ + + /* + private class DownCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + + Series = (Series) m_itemModel. + getSelectedObject(state); + EditshipCollection editors = series.getEditors(); + + if ((editors.size() - 1) + == row) { + s_log.debug("Row is last row in table, don't show down link"); + Label label = new Label(""); + return label; + } else { + ControlLink link = new ControlLink("down"); + return link; + } + } + }*/ + + @Override + public void cellSelected(TableActionEvent event) { + PageState state = event.getPageState(); + + GenericPerson editor = + new GenericPerson(new BigDecimal(event.getRowKey().toString())); + + Series series = (Series) m_itemModel.getSelectedObject(state); + + //EditshipCollection editors = series.getEditors(); + + TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { + + } else if(TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { + series.removeEditor(editor); + } + /* + else if(TABLE_COL_UP.equals(column.getHeaderKey().toString())) { + editors.swapWithPrevious(editor); + } else if(TABLE_COL_DOWN.equals(column.getHeaderKey().toString())) { + authors.swapWithNext(editor); + } + */ + } + + @Override + public void headSelected(TableActionEvent event) { + //Nothing to do here. + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java new file mode 100644 index 000000000..56811e530 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertiesStep.java @@ -0,0 +1,112 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SegmentedPanel; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Series; +import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; +import com.arsdigita.cms.ui.authoring.WorkflowLockedComponentAccess; +import com.arsdigita.domain.DomainObject; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; +import java.text.DateFormat; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesPropertiesStep extends SimpleEditStep { + + public static final String EDIT_SHEET_NAME = "edit"; + private SegmentedPanel segmentedPanel; + + public SeriesPropertiesStep(ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + super(itemModel, parent); + + segmentedPanel = new SegmentedPanel(); + setDefaultEditKey(EDIT_SHEET_NAME); + + addBasicProperties(itemModel, parent); + addSteps(itemModel, parent); + + setDisplayComponent(segmentedPanel); + } + + public static Component getSeriesPropertySheet( + ItemSelectionModel itemModel) { + DomainObjectPropertySheet sheet = new DomainObjectPropertySheet( + itemModel); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.series.title"), + Series.NAME); + + if (!ContentSection.getConfig().getHideLaunchDate()) { + sheet.add(ContenttypesGlobalizationUtil.globalize( + "cms.ui.authoring.page_launch_date"), + ContentPage.LAUNCH_DATE, + new DomainObjectPropertySheet.AttributeFormatter() { + + public String format(DomainObject item, + String attribute, + PageState state) { + ContentPage page = (ContentPage) item; + if (page.getLaunchDate() != null) { + return DateFormat.getDateInstance(DateFormat.LONG). + format(page.getLaunchDate()); + } else { + return (String) ContenttypesGlobalizationUtil.globalize( + "cms.ui.unknown").localize(); + } + } + }); + } + + return sheet; + } + + protected void addBasicProperties(ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + SimpleEditStep basicProperties = new SimpleEditStep(itemModel, + parent, + EDIT_SHEET_NAME); + + BasicPageForm editBasicSheet = new SeriesPropertyForm(itemModel, this); + + basicProperties.add( + EDIT_SHEET_NAME, + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.edit_basic_sheet").localize(), + new WorkflowLockedComponentAccess(editBasicSheet, + itemModel), + editBasicSheet.getSaveCancelSection().getCancelButton()); + + basicProperties.setDisplayComponent(getSeriesPropertySheet(itemModel)); + + segmentedPanel.addSegment(new Label((String) PublicationGlobalizationUtil. + globalize("publications.ui.series.basic_properties").localize()), + basicProperties); + } + + protected void addSteps(ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + addStep(new SeriesEditshipStep(itemModel, parent), + "publications.ui.series.editors"); + addStep(new SeriesVolumesStep(itemModel, parent), + "publications.ui.series.volumes"); + } + + protected void addStep(SimpleEditStep step, String labelKey) { + segmentedPanel.addSegment( + new Label((String) PublicationGlobalizationUtil.globalize( + labelKey).localize()), + step); + } +} 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 new file mode 100644 index 000000000..9957d0652 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesPropertyForm.java @@ -0,0 +1,87 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.event.FormInitListener; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.event.FormSubmissionListener; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Series; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesPropertyForm + extends BasicPageForm + implements FormProcessListener, + FormInitListener, + FormSubmissionListener { + + private static final Logger s_log = + Logger.getLogger(SeriesPropertyForm.class); + private SeriesPropertiesStep m_step; + public static final String ID = "Series_edit"; + + public SeriesPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + public SeriesPropertyForm(ItemSelectionModel itemModel, + SeriesPropertiesStep step) { + super(ID, itemModel); + m_step = step; + addSubmissionListener(this); + } + + @Override + protected void addWidgets() { + super.addWidgets(); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.title").localize())); + ParameterModel titleParam = new StringParameter(Series.NAME); + TextField title = new TextField(titleParam); + add(title); + } + + @Override + public void init(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + Series series = (Series) super.initBasicWidgets(fse); + + data.put(Series.NAME, series.getTitle()); + } + + @Override + public void process(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + Series series = (Series) super.processBasicWidgets(fse); + + if ((series != null) && getSaveCancelSection().getSaveButton(). + isSelected(fse.getPageState())) { + series.setTitle((String) data.get(Series.NAME)); + + series.save(); + } + + if (m_step != null) { + m_step.maybeForwardToNextStep(fse.getPageState()); + } + } + + @Override + public void submitted(FormSectionEvent fse) throws FormProcessException { + if ((m_step != null) && getSaveCancelSection().getCancelButton(). + isSelected(fse.getPageState())) { + m_step.cancelStreamlinedCreation(fse.getPageState()); + } + } +} 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 new file mode 100644 index 000000000..58d8911c2 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumeAddForm.java @@ -0,0 +1,84 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SaveCancelSection; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Publication; +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 org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesVolumeAddForm extends BasicItemForm { + + private static final Logger s_log = Logger.getLogger( + SeriesVolumeAddForm.class); + private SeriesPropertiesStep m_step; + private ItemSearchWidget m_itemSearch; + private SaveCancelSection m_saveCancelSection; + private final String ITEM_SEARCH = "volumes"; + private ItemSelectionModel m_itemModel; + + public SeriesVolumeAddForm(ItemSelectionModel itemModel) { + super("VolumesEntryForm", itemModel); + m_itemModel = itemModel; + } + + @Override + protected void addWidgets() { + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.select_publication"). + localize())); + m_itemSearch = new ItemSearchWidget( + ITEM_SEARCH, + ContentType.findByAssociatedObjectType( + Publication.class.getName())); + add(m_itemSearch); + + 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); + add(volumeOfSeries); + } + + @Override + public void init(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + + setVisible(state, true); + } + + @Override + public void process(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + PageState state = fse.getPageState(); + Series series = (Series) getItemSelectionModel(). + getSelectedObject(state); + + if (!(this.getSaveCancelSection().getCancelButton(). + isSelected(state))) { + series.addVolume( + (Publication) data.get(ITEM_SEARCH), + (Integer) data.get( + VolumeInSeriesCollection.VOLUME_OF_SERIES)); + } + + init(fse); + } +} 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 new file mode 100644 index 000000000..0e068dba5 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesStep.java @@ -0,0 +1,42 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +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; + +/** + * + * @author Jens Pelzetter + */ +public class SeriesVolumesStep extends SimpleEditStep { + + private static final String ADD_VOLUME_SHEET_NAME = "addVolume"; + + public SeriesVolumesStep( + ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public SeriesVolumesStep( + ItemSelectionModel itemModel, + AuthoringKitWizard parent, + String prefix) { + super(itemModel, parent, prefix); + + BasicItemForm addVolumeSheet = + new SeriesVolumeAddForm(itemModel); + add(ADD_VOLUME_SHEET_NAME, + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.series.add_volume").localize(), + new WorkflowLockedComponentAccess(addVolumeSheet, itemModel), + addVolumeSheet.getSaveCancelSection().getCancelButton()); + + SeriesVolumesTable volumesTable = new SeriesVolumesTable( + itemModel); + setDisplayComponent(volumesTable); + } + +} 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 new file mode 100644 index 000000000..37e59ce4d --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/SeriesVolumesTable.java @@ -0,0 +1,231 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.ControlLink; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.bebop.table.TableColumn; +import com.arsdigita.bebop.table.TableColumnModel; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.bebop.table.TableModelBuilder; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.SecurityManager; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.Series; +import com.arsdigita.cms.contenttypes.VolumeInSeriesCollection; +import com.arsdigita.cms.dispatcher.Utilities; +import com.arsdigita.util.LockableImpl; +import java.math.BigDecimal; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +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_DEL = "table_col_del"; + private ItemSelectionModel m_itemModel; + + public SeriesVolumesTable(ItemSelectionModel itemModel) { + super(); + m_itemModel = itemModel; + + setEmptyView( + new Label(PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.none"))); + + TableColumnModel colModel = getColumnModel(); + colModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.name").localize(), + TABLE_COL_EDIT)); + colModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize( + "publications.ui.series.volumes.volumeOfSeries").localize())); + colModel.add(new TableColumn( + 2, + 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()); + } + + private class SeriesVolumesTableModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private ItemSelectionModel m_itemModel; + + public SeriesVolumesTableModelBuilder( + ItemSelectionModel itemModel) { + m_itemModel = itemModel; + } + + public TableModel makeModel(Table table, PageState state) { + table.getRowSelectionModel().clearSelection(state); + Series series = + (Series) m_itemModel.getSelectedObject(state); + return new SeriesVolumesTableModel(table, state, series); + } + } + + private class SeriesVolumesTableModel implements TableModel { + + private final int MAX_DESC_LENGTH = 25; + private Table m_table; + private VolumeInSeriesCollection m_volumesCollection; + private Publication m_publication; + + private SeriesVolumesTableModel( + Table table, + PageState state, + Series series) { + m_table = table; + m_volumesCollection = series.getVolumes(); + } + + @Override + public int getColumnCount() { + return m_table.getColumnModel().size(); + } + + @Override + public boolean nextRow() { + boolean ret; + + if ((m_volumesCollection != null) && m_volumesCollection.next()) { + m_publication = m_volumesCollection.getPublication(); + ret = true; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(int columnIndex) { + switch (columnIndex) { + case 0: + return m_publication.getTitle(); + case 1: + return m_volumesCollection.getVolumeOfSeries(); + case 2: + return PublicationGlobalizationUtil.globalize( + "publication.ui.series.volumes.remove").localize(); + default: + return null; + } + } + + public Object getKeyAt(int columnIndex) { + return m_publication.getID(); + } + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + SecurityManager securityManager = + Utilities.getSecurityManager(state); + 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; + } + } + } + + private class DeleteCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int col) { + SecurityManager securityManager = + Utilities.getSecurityManager(state); + Series series = (Series) m_itemModel.getSelectedObject(state); + + boolean canDelete = securityManager.canAccess( + state.getRequest(), + SecurityManager.DELETE_ITEM, + series); + + if (canDelete) { + ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String) PublicationGlobalizationUtil. + globalize("publications.ui.volumes.remove.confirm"). + localize()); + return link; + } else { + Label label = new Label(value.toString()); + return label; + } + } + } + + @Override + public void cellSelected(TableActionEvent event) { + PageState state = event.getPageState(); + + Publication publication = + new Publication(new BigDecimal(event.getRowKey(). + toString())); + + Series series = (Series) m_itemModel.getSelectedObject(state); + + //VolumeInSeriesCollection volumes = series.getVolumes(); + + TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) { + } else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) { + series.removeVolume(publication); + } + } + + @Override + public void headSelected(TableActionEvent event) { + //Nothing to do. + } +}