From a56263629698be4bd970be3cbe3ed83d0b5204eb Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sun, 17 Nov 2019 11:54:50 +0100 Subject: [PATCH] Sheet for Publication with publisher --- .../ui/PublicationPropertyForm.java | 2 +- ...icationWithPublisherSetPublisherSheet.java | 277 ++++++++++++++++++ ...licationWithPublisherSetPublisherStep.java | 11 +- 3 files changed, 284 insertions(+), 6 deletions(-) create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherSheet.java diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java index ee39a7a..23ccb44 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertyForm.java @@ -33,9 +33,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.l10n.GlobalizationHelper; -import org.scientificcms.publications.Publication; import org.scientificcms.publications.SciPublicationsConfig; import org.scientificcms.publications.SciPublicationsConstants; + import org.scientificcms.publications.contenttypes.PublicationItem; import java.text.Collator; diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherSheet.java new file mode 100644 index 0000000..bfe9f7b --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherSheet.java @@ -0,0 +1,277 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +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.Text; +import com.arsdigita.bebop.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +import com.arsdigita.bebop.parameters.StringParameter; +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.globalization.GlobalizedMessage; +import com.arsdigita.util.LockableImpl; + +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.PermissionChecker; +import org.librecms.contentsection.privileges.ItemPrivileges; +import org.scientificcms.publications.contenttypes.PublicationWithPublisherItem; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.Publisher; +import org.scientificcms.publications.PublicationWithPublisher; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationWithPublisherSetPublisherSheet + extends Table + implements TableActionListener { + + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_DEL = "table_col_del"; + private final ItemSelectionModel itemModel; + + public PublicationWithPublisherSetPublisherSheet( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + + this.itemModel = itemModel; + + setEmptyView( + new Label( + new GlobalizedMessage( + "publications.ui.with_publisher.publisher.none", + SciPublicationsConstants.BUNDLE + ) + ) + ); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add( + new TableColumn( + 0, + new Label( + new GlobalizedMessage( + "publications.ui.with_publisher.publisher", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_EDIT + ) + ); + columnModel.add( + new TableColumn( + 1, + new Label( + new GlobalizedMessage( + "publications.ui.with_publisher.publisher.remove", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_DEL + ) + ); + + setModelBuilder( + new PublicationWithPublisherSetPublisherSheetModelBuilder( + itemModel + ) + ); + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + columnModel.get(1).setCellRenderer((new DeleteCellRenderer())); + + addTableActionListener(this); + } + + @Override + public void cellSelected(final TableActionEvent event) { + PageState state = event.getPageState(); + + final PublicationWithPublisherItem publicationItem + = (PublicationWithPublisherItem) itemModel + .getSelectedObject(state); + + final TableColumn column = getColumnModel() + .get(event.getColumn() + .intValue()); + + if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) { + // Nothing + } else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) { + final SciPublicationsWithPublisherController controller = CdiUtil + .createCdiUtil() + .findBean(SciPublicationsWithPublisherController.class); + controller.unsetPublisher( + publicationItem.getPublication().getPublicationId(), + publicationItem.getPublication().getPublisher().getPublisherId() + ); + } + + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing to do + } + + private class PublicationWithPublisherSetPublisherSheetModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private ItemSelectionModel itemModel; + + public PublicationWithPublisherSetPublisherSheetModelBuilder( + final ItemSelectionModel itemModel) { + this.itemModel = itemModel; + } + + @Override + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + final PublicationWithPublisherItem publicationItem + = (PublicationWithPublisherItem) itemModel + .getSelectedObject(state); + return new PublicationWithPublisherSetPublisherSheetModel( + table, state, publicationItem.getPublication() + ); + } + + } + + private class PublicationWithPublisherSetPublisherSheetModel + implements TableModel { + + private final Table table; + private final Publisher publisher; + private boolean m_done; + + public PublicationWithPublisherSetPublisherSheetModel( + final Table table, + final PageState state, + final PublicationWithPublisher publication + ) { + this.table = table; + publisher = publication.getPublisher(); + if (publisher == null) { + m_done = false; + } else { + m_done = true; + } + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + @Override + public boolean nextRow() { + boolean ret; + + if (m_done) { + ret = true; + m_done = false; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return publisher.getName(); + case 1: + return new Label( + new GlobalizedMessage( + "publications.ui.with_publisher.publisher.remove", + SciPublicationsConstants.BUNDLE + ) + ); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return publisher.getPublisherId(); + } + + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column + ) { + return new Text((String) value); + } + + } + + private class DeleteCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent( + final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int col + ) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final PermissionChecker permissionChecker = cdiUtil + .findBean(PermissionChecker.class); + final PublicationWithPublisherItem publicationItem + = (PublicationWithPublisherItem) itemModel + .getSelectedItem(state); + final boolean canEdit = permissionChecker.isPermitted( + ItemPrivileges.EDIT, publicationItem + ); + + if (canEdit) { + final ControlLink link = new ControlLink((Label) value); + link.setConfirmation( + new GlobalizedMessage( + "publications.ui.with_publisher.publisher.remove.confirm", + SciPublicationsConstants.BUNDLE + ) + ); + return link; + } else { + return new Text(""); + } + } + + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherStep.java index 1a03b62..fb26e4f 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherStep.java @@ -21,7 +21,7 @@ import org.scientificcms.publications.SciPublicationsConstants; public class PublicationWithPublisherSetPublisherStep extends SimpleEditStep { private String SET_PUBLICATION_PUBLISHER_STEP - = "setPublicationPublisherStep"; + = "setPublicationPublisherStep"; public PublicationWithPublisherSetPublisherStep( final ItemSelectionModel itemModel, @@ -39,8 +39,8 @@ public class PublicationWithPublisherSetPublisherStep extends SimpleEditStep { super(itemModel, parent, selectedLangParameter, prefix); final BasicItemForm setPublisherForm - = new PublicationWithPublisherSetPublisherForm( - itemModel); + = new PublicationWithPublisherSetPublisherForm( + itemModel, selectedLangParameter); add(SET_PUBLICATION_PUBLISHER_STEP, new GlobalizedMessage( "publications.ui.with_publisher.setPublisher", @@ -50,8 +50,9 @@ public class PublicationWithPublisherSetPublisherStep extends SimpleEditStep { setPublisherForm.getSaveCancelSection().getCancelButton()); final PublicationWithPublisherSetPublisherSheet sheet - = new PublicationWithPublisherSetPublisherSheet( - itemModel); + = new PublicationWithPublisherSetPublisherSheet( + itemModel, selectedLangParameter + ); setDisplayComponent(sheet); }