From 92e63ef562172a282db79a340492b4540e7d9a79 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 19 Aug 2010 15:45:54 +0000 Subject: [PATCH] First part of UI classes for the publication contenttypes. git-svn-id: https://svn.libreccm.org/ccm/trunk@511 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/contenttypes/GenericPerson.java | 29 +- .../ui/PublicationAuthorAddForm.java | 97 ++++++ .../ui/PublicationAuthorsPropertyStep.java | 41 +++ .../ui/PublicationAuthorsTable.java | 319 ++++++++++++++++++ .../ui/PublicationGlobalizationUtil.java | 21 ++ .../ui/PublicationPropertiesStep.java | 118 +++++++ .../ui/PublicationPropertyForm.java | 115 +++++++ 7 files changed, 732 insertions(+), 8 deletions(-) create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorAddForm.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGlobalizationUtil.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java index 8c9dd1684..812f09b8d 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java @@ -48,9 +48,9 @@ public class GenericPerson extends ContentPage implements RelationAttribute { public static final String CONTACT_TYPE = "contact_type"; public static final String CONTACT_ORDER = "contact_order"; private static final String RELATION_ATTRIBUTES = "GenericContactType"; - /** Data object type for this domain object */ - public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.GenericPerson"; + public static final String BASE_DATA_OBJECT_TYPE = + "com.arsdigita.cms.contenttypes.GenericPerson"; /** * Default constructor. This creates a new (empty) GenericPerson. @@ -102,12 +102,14 @@ public class GenericPerson extends ContentPage implements RelationAttribute { public String getTitlePre() { return (String) get(TITLEPRE); } - public Date getBirthdate() { - return (Date)get(BIRTHDATE); - } - public void setBirthdate(Date birthdate) { - set(BIRTHDATE, birthdate); - } + + public Date getBirthdate() { + return (Date) get(BIRTHDATE); + } + + public void setBirthdate(Date birthdate) { + set(BIRTHDATE, birthdate); + } public void setTitlePre(String titlePre) { set(TITLEPRE, titlePre); @@ -121,6 +123,17 @@ public class GenericPerson extends ContentPage implements RelationAttribute { set(TITLEPOST, titlePost); } + /** + * A convinient method which combines {@code titlePre}, {@code givenName), + * {@code surname} and {@code titlePost}. + * + * @return {@code titlePre} {@code givenName) {@code surnameName} {@code titlePost} + */ + public String getFullName() { + return String.format("%s %s %s %s", getTitlePre(), getGivenName(), + getSurname(), getTitlePost()).trim(); + } + // Get all contacts for this person public GenericPersonContactCollection getContacts() { return new GenericPersonContactCollection((DataCollection) get(CONTACTS)); diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorAddForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorAddForm.java new file mode 100644 index 000000000..2c10fa5d8 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorAddForm.java @@ -0,0 +1,97 @@ +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.Option; +import com.arsdigita.bebop.form.RadioGroup; +import com.arsdigita.bebop.parameters.BooleanParameter; +import com.arsdigita.bebop.parameters.NotNullValidationListener; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.AuthorshipCollection; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.ui.ItemSearchWidget; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationAuthorAddForm extends BasicItemForm { + + private static final Logger s_log = Logger.getLogger( + PublicationAuthorAddForm.class); + private PublicationPropertiesStep m_step; + private ItemSearchWidget m_itemSearch; + private SaveCancelSection m_saveCancelSection; + private final String ITEM_SEARCH = "authors"; + private ItemSelectionModel m_itemModel; + + public PublicationAuthorAddForm(ItemSelectionModel itemModel) { + super("AuthorsEntryForm", itemModel); + m_itemModel = itemModel; + } + + @Override + protected void addWidgets() { + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.authors.selectAuthor").localize())); + m_itemSearch = new ItemSearchWidget( + ITEM_SEARCH, + ContentType.findByAssociatedObjectType(GenericPerson.class. + getName())); + add(m_itemSearch); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.authors.is_editor").localize())); + ParameterModel isEditorModel = new BooleanParameter( + AuthorshipCollection.EDITOR); + RadioGroup isEditorGroup = new RadioGroup(isEditorModel); + isEditorGroup.addValidationListener(new NotNullValidationListener()); + isEditorGroup.setMetaDataAttribute( + "label", + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.authors.is_editor_label"). + localize()); + isEditorGroup.addOption( + new Option(Boolean.FALSE.toString(), + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.authors.is_editor_false").localize())); + isEditorGroup.addOption( + new Option(Boolean.TRUE.toString(), + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.authors.is_editor_true").localize())); + add(isEditorGroup); + } + + @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(); + Publication publication = (Publication) getItemSelectionModel(). + getSelectedObject(state); + + if (!(this.getSaveCancelSection().getCancelButton().isSelected(state))) { + publication.addAuthor( + (GenericPerson) data.get(ITEM_SEARCH), + (Boolean) data.get(AuthorshipCollection.EDITOR)); + } + + init(fse); + } +} 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 new file mode 100644 index 000000000..2df68b80c --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsPropertyStep.java @@ -0,0 +1,41 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.cms.ItemSelectionModel; +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 PublicationAuthorsPropertyStep extends SimpleEditStep { + + private static final String ADD_AUTHOR_SHEET_NAME = "addAuthor"; + + public PublicationAuthorsPropertyStep( + ItemSelectionModel itemModel, AuthoringKitWizard parent) { + this(itemModel, parent, null); + } + + public PublicationAuthorsPropertyStep( + ItemSelectionModel itemModel, + AuthoringKitWizard parent, + String prefix) { + super(itemModel, parent, prefix); + + BasicItemForm addAuthorSheet = + new PublicationAuthorAddForm(itemModel); + add(ADD_AUTHOR_SHEET_NAME, + (String) PublicationGlobalizationUtil.globalize( + "publications.ui.add_author").localize(), + new WorkflowLockedComponentAccess(addAuthorSheet, itemModel), + addAuthorSheet.getSaveCancelSection().getCancelButton()); + + PublicationAuthorsTable authorsTable = new PublicationAuthorsTable( + itemModel); + setDisplayComponent(authorsTable); + } + + +} 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 new file mode 100644 index 000000000..2e2d856a8 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationAuthorsTable.java @@ -0,0 +1,319 @@ +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.AuthorshipCollection; +import com.arsdigita.cms.contenttypes.GenericPerson; +import com.arsdigita.cms.contenttypes.Publication; +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 PublicationAuthorsTable + extends Table + implements TableActionListener { + + private static final Logger s_log = + 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 ItemSelectionModel m_itemModel; + + public PublicationAuthorsTable(ItemSelectionModel itemModel) { + super(); + m_itemModel = itemModel; + + setEmptyView( + new Label(PublicationGlobalizationUtil.globalize( + "publications.ui.authors.none"))); + + TableColumnModel colModel = getColumnModel(); + colModel.add(new TableColumn( + 0, + PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.name").localize(), + TABLE_COL_EDIT)); + colModel.add(new TableColumn( + 1, + PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.isEditor").localize())); + colModel.add(new TableColumn( + 2, + PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.delete").localize(), + TABLE_COL_DEL)); + colModel.add(new TableColumn( + 3, + PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.up").localize(), + TABLE_COL_UP)); + colModel.add(new TableColumn( + 4, + PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.down").localize(), + TABLE_COL_DOWN)); + + setModelBuilder( + new PublicationAuthorsTableModelBuilder(itemModel)); + + colModel.get(0).setCellRenderer(new EditCellRenderer()); + colModel.get(2).setCellRenderer(new DeleteCellRenderer()); + colModel.get(3).setCellRenderer(new UpCellRenderer()); + colModel.get(4).setCellRenderer(new DownCellRenderer()); + } + + private class PublicationAuthorsTableModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private ItemSelectionModel m_itemModel; + + public PublicationAuthorsTableModelBuilder( + ItemSelectionModel itemModel) { + m_itemModel = itemModel; + } + + public TableModel makeModel(Table table, PageState state) { + table.getRowSelectionModel().clearSelection(state); + Publication publication = + (Publication) m_itemModel.getSelectedObject(state); + return new PublicationAuthorsTableModel(table, state, publication); + } + } + + private class PublicationAuthorsTableModel implements TableModel { + + private final int MAX_DESC_LENGTH = 25; + private Table m_table; + private AuthorshipCollection m_authorshipCollection; + private GenericPerson m_author; + + private PublicationAuthorsTableModel( + Table table, + PageState state, + Publication publication) { + m_table = table; + m_authorshipCollection = publication.getAuthors(); + } + + public int getColumnCount() { + return m_table.getColumnModel().size(); + } + + public boolean nextRow() { + boolean ret; + + if ((m_authorshipCollection != null) + && m_authorshipCollection.next()) { + m_author = m_authorshipCollection.getAuthor(); + ret = true; + } else { + ret = false; + } + + return ret; + } + + public Object getElementAt(int columnIndex) { + switch (columnIndex) { + case 0: + return m_author.getFullName(); + case 1: + if (m_authorshipCollection.isEditor()) { + return (String) PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.isEditor"). + localize(); + } else { + return PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.isNotEditor"). + localize(); + } + case 2: + return PublicationGlobalizationUtil.globalize( + "publications.ui.authors.author.remove"). + localize(); + default: + return null; + } + } + + public Object getKeyAt(int columnIndex) { + return m_author.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); + Publication publication = (Publication) m_itemModel. + getSelectedObject(state); + + boolean canEdit = securityManager.canAccess( + state.getRequest(), + SecurityManager.EDIT_ITEM, + publication); + + 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); + Publication publication = (Publication) m_itemModel. + getSelectedObject(state); + + boolean canDelete = securityManager.canAccess( + state.getRequest(), + SecurityManager.DELETE_ITEM, + publication); + + if (canDelete) { + ControlLink link = new ControlLink(value.toString()); + link.setConfirmation((String) PublicationGlobalizationUtil. + globalize( + "publications.ui.authors.author.confirm_remove"). + 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) { + + Publication publication = (Publication) m_itemModel. + getSelectedObject(state); + AuthorshipCollection authors = publication.getAuthors(); + + if ((authors.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 author = + new GenericPerson(new BigDecimal(event.getRowKey(). + toString())); + + Publication publication = (Publication) m_itemModel.getSelectedObject( + state); + + AuthorshipCollection authors = publication.getAuthors(); + + TableColumn column = getColumnModel().get(event.getColumn().intValue()); + + if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) { + } else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) { + publication.removeAuthor(author); + } else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) { + authors.swapWithPrevious(author); + } else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) { + authors.swapWithNext(author); + } + } + + @Override + public void headSelected(TableActionEvent event) { + //Nothing to do here. + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGlobalizationUtil.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGlobalizationUtil.java new file mode 100644 index 000000000..7681c2270 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationGlobalizationUtil.java @@ -0,0 +1,21 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.globalization.GlobalizedMessage; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationGlobalizationUtil { + + public static final String BUNDLE_NAME = + "com.arsdigita.cms.contenttypes.PublicationBundle"; + + public static GlobalizedMessage globalize(String key) { + return new GlobalizedMessage(key, BUNDLE_NAME); + } + + public static GlobalizedMessage globalize(String key, Object[] args) { + return new GlobalizedMessage(key, BUNDLE_NAME, args); + } +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java new file mode 100644 index 000000000..6a957582f --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java @@ -0,0 +1,118 @@ +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.ui.authoring.AuthoringKitWizard; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.domain.DomainObject; +import java.text.DateFormat; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationPropertiesStep extends SimpleEditStep { + + public static final String EDIT_SHEET_NAME = "edit"; + private SegmentedPanel segmentedPanel; + + public PublicationPropertiesStep(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 getPublicationPropertySheet( + ItemSelectionModel itemModel) { + DomainObjectPropertySheet sheet = new DomainObjectPropertySheet( + itemModel); + + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.publication.title"), + Publication.NAME); + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.publication.year_of_publication"), + Publication.YEAR_OF_PUBLICATION); + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.publication.abstract"), + Publication.ABSTRACT); + sheet.add(PublicationGlobalizationUtil.globalize( + "publications.ui.publication.misc"), + Publication.MISC); + + 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 PublicationPropertyForm(itemModel, + this); + basicProperties.add(EDIT_SHEET_NAME, (String) PublicationGlobalizationUtil. + globalize("publications.ui.publication.edit_basic_sheet"). + localize(), new WorkflowLockedComponentAccess(editBasicSheet, + itemModel), editBasicSheet. + getSaveCancelSection().getCancelButton()); + + basicProperties.setDisplayComponent(getPublicationPropertySheet( + itemModel)); + + segmentedPanel.addSegment(new Label((String) PublicationGlobalizationUtil. + globalize("publications.ui.publication.basic_properties"). + localize()), basicProperties); + } + + protected void addSteps(ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + addStep(new PublicationAuthorsPropertyStep(itemModel, parent), + "publications.ui.publication.authors"); + } + + 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/PublicationPropertyForm.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java new file mode 100644 index 000000000..7ac562499 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java @@ -0,0 +1,115 @@ +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.TextArea; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.ui.authoring.BasicPageForm; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationPropertyForm extends BasicPageForm implements + FormProcessListener, FormInitListener, FormSubmissionListener { + + private static final Logger s_log = Logger.getLogger( + PublicationPropertyForm.class); + private PublicationPropertiesStep m_step; + public static final String ID = "Publication_edit"; + + public PublicationPropertyForm(ItemSelectionModel itemModel) { + this(itemModel, null); + } + + public PublicationPropertyForm(ItemSelectionModel itemModel, + PublicationPropertiesStep step) { + super(ID, itemModel); + m_step = step; + addSubmissionListener(this); + } + + @Override + protected void addWidgets() { + super.addWidgets(); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.publication.title").localize())); + ParameterModel titleParam = new StringParameter(Publication.NAME); + TextField title = new TextField(titleParam); + add(title); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.publication.yearOfPublication").localize())); + ParameterModel yearOfPublicationParam = new IntegerParameter( + Publication.YEAR_OF_PUBLICATION); + TextField yearOfPublication = new TextField(yearOfPublicationParam); + yearOfPublication.setMaxLength(4); + add(yearOfPublication); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.publication.abstract").localize())); + ParameterModel abstractParam = new StringParameter(Publication.ABSTRACT); + TextArea abstractArea = new TextArea(abstractParam); + abstractArea.setCols(60); + abstractArea.setRows(18); + add(abstractArea); + + add(new Label((String) PublicationGlobalizationUtil.globalize( + "publications.ui.publication.misc").localize())); + ParameterModel miscParam = new StringParameter(Publication.ABSTRACT); + TextArea misc = new TextArea(miscParam); + misc.setCols(60); + misc.setRows(18); + add(misc); + } + + @Override + public void init(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + Publication publication = (Publication) super.initBasicWidgets(fse); + + data.put(Publication.NAME, publication.getTitle()); + data.put(Publication.YEAR_OF_PUBLICATION, publication. + getYearOfPublication()); + data.put(Publication.ABSTRACT, publication.getAbstract()); + data.put(Publication.MISC, publication.getMisc()); + } + + @Override + public void process(FormSectionEvent fse) throws FormProcessException { + FormData data = fse.getFormData(); + Publication publication = (Publication) super.processBasicWidgets(fse); + + 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.setAbstract((String) data.get(Publication.ABSTRACT)); + publication.setMisc((String) data.get(Publication.MISC)); + + publication.save(); + } + + if (m_step != null) { + m_step.maybeForwardToNextStep(fse.getPageState()); + } + } + + public void submitted(FormSectionEvent fse) throws FormProcessException { + if ((m_step != null) && getSaveCancelSection().getCancelButton(). + isSelected(fse.getPageState())) { + m_step.cancelStreamlinedCreation(fse.getPageState()); + } + } +}