From d64a65d4e0c65f1c361e354c8515822dc1f30b7a Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Mon, 18 Nov 2019 20:02:14 +0100 Subject: [PATCH] Forms for InProccedings --- .../ui/InProceedingsProceedingsForm.java | 91 ++++++ .../ui/InProceedingsProceedingsSheet.java | 274 ++++++++++++++++++ .../ui/InProceedingsProceedingsStep.java | 2 +- .../ui/InProceedingsPropertiesStep.java | 2 +- .../ui/UnPublishedController.java | 2 +- 5 files changed, 368 insertions(+), 3 deletions(-) create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java new file mode 100644 index 0000000..51897c1 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java @@ -0,0 +1,91 @@ +/* + * 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.FormData; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.event.FormInitListener; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.libreccm.cdi.utils.CdiUtil; +import org.scientificcms.publications.Proceedings; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.InProceedingsItem; + +/** + * + * @author Jens Pelzetter + */ +public class InProceedingsProceedingsForm + extends BasicItemForm + implements FormProcessListener, FormInitListener { + + private static final String PROCEEDINGS_SEARCH = "proceedings"; + + private PublicationSearchWidget proceedingsSearch; + + public InProceedingsProceedingsForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + super("InProceedingsProceedings", itemModel, selectedLangParam); + } + + @Override + protected void addWidgets() { + proceedingsSearch = new PublicationSearchWidget( + PROCEEDINGS_SEARCH, Proceedings.class + ); + proceedingsSearch.setLabel( + new GlobalizedMessage( + "publications.ui.inProceedings.selectProceedings", + SciPublicationsConstants.BUNDLE + ) + ); + add(proceedingsSearch); + } + + @Override + public void init(final FormSectionEvent event) throws FormProcessException { + final PageState state = event.getPageState(); + + setVisible(state, true); + } + + @Override + public void process(final FormSectionEvent event) + throws FormProcessException { + final FormData data = event.getFormData(); + final PageState state = event.getPageState(); + + final InProceedingsItem inProceedingsItem + = (InProceedingsItem) getItemSelectionModel() + .getSelectedItem(state); + + if (this.getSaveCancelSection().getSaveButton().isSelected(state)) { + final Proceedings proceedings = (Proceedings) data + .get(PROCEEDINGS_SEARCH); + + final InProceedingsController controller = CdiUtil + .createCdiUtil() + .findBean(InProceedingsController.class); + + controller.setProceedings( + inProceedingsItem.getPublication().getPublicationId(), + proceedings.getPublicationId() + ); + } + + init(event); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java new file mode 100644 index 0000000..45fa24e --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java @@ -0,0 +1,274 @@ +/* + * 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.Link; +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.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.dispatcher.Utilities; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.util.LockableImpl; + +import org.hibernate.secure.spi.PermissionCheckEntityInformation; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.PermissionChecker; +import org.librecms.contentsection.privileges.ItemPrivileges; +import org.scientificcms.publications.InProceedings; +import org.scientificcms.publications.Proceedings; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.InProceedingsItem; + +import java.math.BigDecimal; + +/** + * + * @author Jens Pelzetter + */ +public class InProceedingsProceedingsSheet + extends Table + implements TableActionListener { + + private static final String TABLE_COL_EDIT = "table_col_edit"; + + private static final String TABLE_COL_DEL = "table_col_del"; + + private final ItemSelectionModel itemModel; + + public InProceedingsProceedingsSheet(final ItemSelectionModel itemModel) { + super(); + this.itemModel = itemModel; + + setEmptyView( + new Label( + new GlobalizedMessage( + "publications.ui.inProceedings.proceedings.none", + SciPublicationsConstants.BUNDLE + ) + ) + ); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add( + new TableColumn( + 0, + new Label( + new GlobalizedMessage( + "publications.ui.inProceedings.proceedings", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_EDIT + ) + ); + columnModel.add( + new TableColumn( + 1, + new Label( + new GlobalizedMessage( + "publications.ui.inProceedings.proceedings.remove", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_DEL + ) + ); + + setModelBuilder(new InProceedingsProceedingsSheetModelBuilder( + 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 InProceedingsItem inProceedingsItem + = (InProceedingsItem) itemModel. + getSelectedItem(state); + final InProceedings inProceedings = inProceedingsItem.getPublication(); + + final TableColumn column = getColumnModel().get(event.getColumn()); + + if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) { + // Nothing + } else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) { + final InProceedingsController controller = CdiUtil + .createCdiUtil() + .findBean(InProceedingsController.class); + controller.unsetProcceedings( + inProceedings.getPublicationId(), + inProceedings.getProceedings().getPublicationId() + ); + } + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing to do + } + + private class InProceedingsProceedingsSheetModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private ItemSelectionModel itemModel; + + public InProceedingsProceedingsSheetModelBuilder( + ItemSelectionModel itemModel) { + this.itemModel = itemModel; + } + + @Override + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + final InProceedingsItem inProceedingsItem + = (InProceedingsItem) itemModel. + getSelectedItem(state); + return new InProceedingsProceedingsSheetModel( + table, + state, + inProceedingsItem.getPublication() + ); + } + + } + + private class InProceedingsProceedingsSheetModel implements TableModel { + + private final Table table; + private final Proceedings proceedings; + private boolean done; + + public InProceedingsProceedingsSheetModel( + final Table table, + final PageState state, + final InProceedings inProceedings + ) { + this.table = table; + this.proceedings = inProceedings.getProceedings(); + if (proceedings == null) { + done = false; + } else { + done = true; + } + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + @Override + public boolean nextRow() { + boolean ret; + + if (done) { + ret = true; + done = false; + } else { + ret = false; + } + + return ret; + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return proceedings.getTitle(); + case 1: + return new Label(new GlobalizedMessage( + "publications.ui.inProceedings.proceedings.remove")); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return proceedings.getPublicationId(); + } + + } + + 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 column + ) { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final PermissionChecker permissionChecker = cdiUtil.findBean( + PermissionChecker.class + ); + + final InProceedingsItem inProceedingsItem + = (InProceedingsItem) itemModel. + getSelectedItem(state); + + final boolean canEdit = permissionChecker + .isPermitted(ItemPrivileges.EDIT, inProceedingsItem); + + if (canEdit) { + ControlLink link = new ControlLink((Component) value); + link.setConfirmation( + new GlobalizedMessage( + "publications.ui.inProceedings.proceedings.confirm_remove", + SciPublicationsConstants.BUNDLE + ) + ); + return link; + } else { + return new Text(""); + } + } + + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java index f1a9617..0f6b055 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java @@ -40,7 +40,7 @@ public class InProceedingsProceedingsStep extends SimpleEditStep { final BasicItemForm addProceedingsForm = new InProceedingsProceedingsForm( - itemModel + itemModel, selectedLangParam ); add( ADD_PROCEEDINGS_STEP, diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java index c714b21..28193f4 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java @@ -81,7 +81,7 @@ public class InProceedingsPropertiesStep ); final BasicPageForm editBasicSheet = new InProceedingsPropertyForm( - itemModel, this + itemModel, this, selectedLangParam ); basicProperties.add( diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java index 7612fca..0a38f24 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java @@ -21,7 +21,7 @@ import javax.transaction.Transactional; * @author Jens Pelzetter */ @RequestScoped -public class UnPublishedController extends PublicationPropertiesStep { +public class UnPublishedController { public static final String PLACE = "place";