From ea92d065ed7edf1124e2b7ac5b8736d7b57823ac Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Mon, 18 Nov 2019 10:35:40 +0100 Subject: [PATCH] Forms for editing publications of type Expertise --- .../contenttypes/ui/ExpertiseController.java | 133 +++++++++ .../contenttypes/ui/ExpertiseOrdererForm.java | 91 ++++++ .../ui/ExpertiseOrdererSheet.java | 266 ++++++++++++++++++ .../contenttypes/ui/ExpertiseOrdererStep.java | 63 +++++ .../ui/ExpertiseOrganizationForm.java | 89 ++++++ .../ui/ExpertiseOrganizationSheet.java | 266 ++++++++++++++++++ .../ui/ExpertiseOrganizationStep.java | 63 +++++ .../ui/ExpertisePropertiesStep.java | 131 +++++++++ .../ui/ExpertisePropertyForm.java | 141 ++++++++++ 9 files changed, 1243 insertions(+) create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseController.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererForm.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererSheet.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererStep.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationForm.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationSheet.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationStep.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertiesStep.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertyForm.java diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseController.java new file mode 100644 index 0000000..fc8fe5f --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseController.java @@ -0,0 +1,133 @@ +/* + * 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 org.librecms.assets.Organization; +import org.librecms.contentsection.AssetRepository; +import org.scientificcms.publications.Expertise; +import org.scientificcms.publications.PublicationRepository; + +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class ExpertiseController { + + public static final String PLACE = "place"; + public static final String NUMBER_OF_PAGES = "numberOfPages"; + + @Inject + private AssetRepository assetRepository; + + @Inject + private PublicationRepository publicationRepository; + + @Transactional(Transactional.TxType.REQUIRED) + public void save(final long expertiseId, final Map data) { + final Expertise expertise = publicationRepository + .findByIdAndType(expertiseId, Expertise.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Expertise with ID %d found.", expertiseId) + ) + ); + + if (data.containsKey(PLACE)) { + expertise.setPlace((String) data.get(PLACE)); + } + + if (data.containsKey(NUMBER_OF_PAGES)) { + expertise.setNumberOfPages((Integer) data.get(NUMBER_OF_PAGES)); + } + + publicationRepository.save(expertise); + } + + @Transactional + public void setOrderer(final long expertiseId, final long ordererId) { + final Expertise expertise = publicationRepository + .findByIdAndType(expertiseId, Expertise.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Expertise with ID %d found.", expertiseId) + ) + ); + + final Organization orderer = assetRepository + .findById(ordererId, Organization.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No Organization with ID %d found.", ordererId + ) + ) + ); + + expertise.setOrderer(orderer); + publicationRepository.save(expertise); + } + + @Transactional + public void unsetOrderer(final long expertiseId) { + final Expertise expertise = publicationRepository + .findByIdAndType(expertiseId, Expertise.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Expertise with ID %d found.", expertiseId) + ) + ); + + expertise.setOrderer(null); + publicationRepository.save(expertise); + } + + @Transactional + public void setOrganization( + final long expertiseId, final long organizationId + ) { + final Expertise expertise = publicationRepository + .findByIdAndType(expertiseId, Expertise.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Expertise with ID %d found.", expertiseId) + ) + ); + + final Organization organization = assetRepository + .findById(organizationId, Organization.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No Organization with ID %d found.", organizationId + ) + ) + ); + + expertise.setOrganization(organization); + publicationRepository.save(expertise); + } + + @Transactional + public void unsetOrganization(final long expertiseId) { + final Expertise expertise = publicationRepository + .findByIdAndType(expertiseId, Expertise.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format("No Expertise with ID %d found.", expertiseId) + ) + ); + expertise.setOrganization(null); + publicationRepository.save(expertise); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererForm.java new file mode 100644 index 0000000..c6119da --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererForm.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.assets.AssetSearchWidget; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.hibernate.resource.beans.container.internal.CdiBasedBeanContainer; +import org.libreccm.cdi.utils.CdiUtil; +import org.librecms.assets.Organization; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ExpertiseItem; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertiseOrdererForm + extends BasicItemForm + implements FormProcessListener, FormInitListener { + + private static final String ORGA_SEARCH = "expertiseOrderer"; + + private AssetSearchWidget orgaSearch; + + private final ItemSelectionModel itemModel; + + public ExpertiseOrdererForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + super("ExpertiseOrdererForm", itemModel, selectedLangParam); + this.itemModel = itemModel; + } + + @Override + protected void addWidgets() { + orgaSearch = new AssetSearchWidget( + ORGA_SEARCH, Organization.class + ); + orgaSearch.setLabel( + new GlobalizedMessage( + "publications.ui.expertise.orderer", + SciPublicationsConstants.BUNDLE + ) + ); + add(orgaSearch); + } + + @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 PageState state = event.getPageState(); + final ExpertiseItem expertise = (ExpertiseItem) itemModel. + getSelectedItem(state); + + if (getSaveCancelSection().getSaveButton().isSelected(state)) { + final Organization orderer = (Organization) orgaSearch + .getValue(state); + final ExpertiseController controller = CdiUtil + .createCdiUtil() + .findBean(ExpertiseController.class); + controller.setOrderer( + expertise.getPublication().getPublicationId(), + orderer.getObjectId() + ); + } + + init(event); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererSheet.java new file mode 100644 index 0000000..6e73018 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererSheet.java @@ -0,0 +1,266 @@ +/* + * 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.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.assets.Organization; +import org.librecms.contentsection.privileges.ItemPrivileges; +import org.scientificcms.publications.Expertise; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ExpertiseItem; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertiseOrdererSheet + 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 ExpertiseOrdererSheet(final ItemSelectionModel itemModel) { + super(); + + this.itemModel = itemModel; + + setEmptyView( + new Label( + new GlobalizedMessage( + "publications.ui.expertise.orderer.none", + SciPublicationsConstants.BUNDLE + ) + ) + ); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add( + new TableColumn( + 0, + new Label( + new GlobalizedMessage( + "publications.ui.expertise.orderer", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_EDIT + ) + ); + columnModel.add( + new TableColumn( + 1, + new Label( + new GlobalizedMessage( + "publications.ui.expertise.orderer.remove", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_DEL + ) + ); + + setModelBuilder(new ExpertiseOrganizationSheetModelBuilder(itemModel)); + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + columnModel.get(1).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(this); + } + + @Override + public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); + + final ExpertiseItem expertiseItem = (ExpertiseItem) itemModel + .getSelectedItem(state); + + 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 ExpertiseController controller = CdiUtil + .createCdiUtil() + .findBean(ExpertiseController.class); + controller.unsetOrderer( + expertiseItem.getPublication().getPublicationId() + ); + } + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing to do + } + + private class ExpertiseOrganizationSheetModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private final ItemSelectionModel itemModel; + + public ExpertiseOrganizationSheetModelBuilder( + final ItemSelectionModel itemModel + ) { + this.itemModel = itemModel; + } + + @Override + public final TableModel makeModel( + final Table table, final PageState state + ) { + table.getRowSelectionModel().clearSelection(state); + final ExpertiseItem expertiseItem = (ExpertiseItem) itemModel + .getSelectedItem(state); + return new ExpertiseOrganizationSheetModel( + table, state, expertiseItem.getPublication() + ); + } + + } + + private class ExpertiseOrganizationSheetModel implements TableModel { + + private final Table table; + private final Organization orderer; + private boolean done; + + public ExpertiseOrganizationSheetModel( + final Table table, + final PageState state, + final Expertise expertise + ) { + this.table = table; + orderer = expertise.getOrderer(); + done = orderer != null; + } + + @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 orderer.getTitle(); + case 1: + return new Label( + new GlobalizedMessage( + "publications.ui.expertise.orderer.remove", + SciPublicationsConstants.BUNDLE + ) + ); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return orderer.getObjectId(); + } + + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public final 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 ExpertiseItem expertiseItem = (ExpertiseItem) itemModel + .getSelectedItem(state); + + final boolean canEdit = permissionChecker.isPermitted( + ItemPrivileges.DELETE, expertiseItem + ); + + if (canEdit) { + final ControlLink link = new ControlLink((Component) value); + link.setConfirmation( + new GlobalizedMessage( + "publication.ui.expertise.orderer.remove.confirm", + SciPublicationsConstants.BUNDLE + ) + ); + return link; + } else { + return new Text(""); + } + } + + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererStep.java new file mode 100644 index 0000000..d33d506 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrdererStep.java @@ -0,0 +1,63 @@ +/* + * 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.parameters.StringParameter; +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; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.scientificcms.publications.SciPublicationsConstants; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertiseOrdererStep extends SimpleEditStep { + + private static final String SET_EXPERTISE_ORDERER_STEP + = "setExpertiseOrdererStep"; + + public ExpertiseOrdererStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + this(itemModel, parent, selectedLangParam, null); + } + + public ExpertiseOrdererStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam, + final String prefix + ) { + super(itemModel, parent, selectedLangParam, prefix); + + final BasicItemForm setOrdererForm = new ExpertiseOrdererForm( + itemModel, + selectedLangParam + ); + add( + SET_EXPERTISE_ORDERER_STEP, + new GlobalizedMessage( + "publications.ui.expertise.setOrderer", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess(setOrdererForm, itemModel), + setOrdererForm.getSaveCancelSection().getCancelButton() + ); + + final ExpertiseOrdererSheet sheet = new ExpertiseOrdererSheet( + itemModel + ); + setDisplayComponent(sheet); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationForm.java new file mode 100644 index 0000000..4d12011 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationForm.java @@ -0,0 +1,89 @@ +/* + * 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.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.assets.AssetSearchWidget; +import com.arsdigita.cms.ui.authoring.BasicItemForm; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.libreccm.cdi.utils.CdiUtil; +import org.librecms.assets.Organization; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ExpertiseItem; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertiseOrganizationForm + extends BasicItemForm + implements FormProcessListener, FormInitListener { + + private static final String ORGA_SEARCH = "expertiseOrganization"; + + private AssetSearchWidget orgaSearch; + + private final ItemSelectionModel itemModel; + + public ExpertiseOrganizationForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + super("ExpertiseOrganizationForm", itemModel, selectedLangParam); + this.itemModel = itemModel; + } + + @Override + protected void addWidgets() { + orgaSearch = new AssetSearchWidget( + ORGA_SEARCH, Organization.class + ); + orgaSearch.setLabel( + new GlobalizedMessage( + "publications.ui.expertise.orderer", + SciPublicationsConstants.BUNDLE + ) + ); + add(orgaSearch); + } + + @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 PageState state = event.getPageState(); + final ExpertiseItem expertise = (ExpertiseItem) itemModel. + getSelectedItem(state); + + if (getSaveCancelSection().getSaveButton().isSelected(state)) { + final Organization organization = (Organization) orgaSearch + .getValue(state); + final ExpertiseController controller = CdiUtil + .createCdiUtil() + .findBean(ExpertiseController.class); + controller.setOrganization( + expertise.getPublication().getPublicationId(), + organization.getObjectId() + ); + } + + init(event); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationSheet.java new file mode 100644 index 0000000..beb2be6 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationSheet.java @@ -0,0 +1,266 @@ +/* + * 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.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.assets.Organization; +import org.librecms.contentsection.privileges.ItemPrivileges; +import org.scientificcms.publications.Expertise; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ExpertiseItem; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertiseOrganizationSheet 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 ExpertiseOrganizationSheet(final ItemSelectionModel itemModel) { + super(); + + this.itemModel = itemModel; + + setEmptyView( + new Label( + new GlobalizedMessage( + "publications.ui.expertise.organization.none", + SciPublicationsConstants.BUNDLE + ) + ) + ); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add( + new TableColumn( + 0, + new Label( + new GlobalizedMessage( + "publications.ui.expertise.organization", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_EDIT + ) + ); + columnModel.add( + new TableColumn( + 1, + new Label( + new GlobalizedMessage( + "publications.ui.expertise.organization.remove", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_DEL + ) + ); + + setModelBuilder(new ExpertiseOrganizationSheetModelBuilder(itemModel)); + columnModel.get(0).setCellRenderer(new EditCellRenderer()); + columnModel.get(1).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(this); + } + + @Override + public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); + + final ExpertiseItem expertiseItem = (ExpertiseItem) itemModel + .getSelectedItem(state); + + 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 ExpertiseController controller = CdiUtil + .createCdiUtil() + .findBean(ExpertiseController.class); + controller.unsetOrganization( + expertiseItem.getPublication().getPublicationId() + ); + } + } + + @Override + public void headSelected(final TableActionEvent event) { + //Nothing to do + } + + private class ExpertiseOrganizationSheetModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private final ItemSelectionModel itemModel; + + public ExpertiseOrganizationSheetModelBuilder( + final ItemSelectionModel itemModel + ) { + this.itemModel = itemModel; + } + + @Override + public final TableModel makeModel( + final Table table, final PageState state + ) { + table.getRowSelectionModel().clearSelection(state); + final ExpertiseItem expertiseItem = (ExpertiseItem) itemModel + .getSelectedItem(state); + return new ExpertiseOrganizationSheetModel( + table, state, expertiseItem.getPublication() + ); + } + + } + + private class ExpertiseOrganizationSheetModel implements TableModel { + + private final Table table; + private final Organization organization; + private boolean done; + + public ExpertiseOrganizationSheetModel( + final Table table, + final PageState state, + final Expertise expertise + ) { + this.table = table; + organization = expertise.getOrganization(); + done = organization != null; + } + + @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 organization.getTitle(); + case 1: + return new Label( + new GlobalizedMessage( + "publications.ui.expertise.organization.remove", + SciPublicationsConstants.BUNDLE + ) + ); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return organization.getObjectId(); + } + + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public final 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 ExpertiseItem expertiseItem = (ExpertiseItem) itemModel + .getSelectedItem(state); + + final boolean canEdit = permissionChecker.isPermitted( + ItemPrivileges.DELETE, expertiseItem + ); + + if (canEdit) { + final ControlLink link = new ControlLink((Component) value); + link.setConfirmation( + new GlobalizedMessage( + "publication.ui.expertise.organization.remove.confirm", + SciPublicationsConstants.BUNDLE + ) + ); + return link; + } else { + return new Text(""); + } + } + + } + + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationStep.java new file mode 100644 index 0000000..ce23177 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertiseOrganizationStep.java @@ -0,0 +1,63 @@ +/* + * 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.parameters.StringParameter; +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; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.scientificcms.publications.SciPublicationsConstants; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertiseOrganizationStep extends SimpleEditStep { + + private static final String SET_EXPERTISE_ORGANIZATION_STEP + = "setExpertiseOrganizationStep"; + + public ExpertiseOrganizationStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + this(itemModel, parent, selectedLangParam, null); + } + + public ExpertiseOrganizationStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam, + final String prefix + ) { + super(itemModel, parent, selectedLangParam, prefix); + + final BasicItemForm setOrgaForm = new ExpertiseOrganizationForm( + itemModel, selectedLangParam + ); + add( + SET_EXPERTISE_ORGANIZATION_STEP, + new GlobalizedMessage( + "publications.ui.expertise.setOrganization", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess( + setOrgaForm, itemModel), + setOrgaForm.getSaveCancelSection().getCancelButton() + ); + + final ExpertiseOrganizationSheet sheet = new ExpertiseOrganizationSheet( + itemModel + ); + setDisplayComponent(sheet); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertiesStep.java new file mode 100644 index 0000000..4302825 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertiesStep.java @@ -0,0 +1,131 @@ +/* + * 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.Label; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +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.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; + +import org.scientificcms.publications.SciPublicationsConstants; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertisePropertiesStep extends PublicationPropertiesStep { + + private final StringParameter selectedLangParam; + + public ExpertisePropertiesStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + super(itemModel, parent, selectedLangParam); + this.selectedLangParam = selectedLangParam; + } + + public static Component getExpertisePropertySheet( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + final DomainObjectPropertySheet sheet + = (DomainObjectPropertySheet) getPublicationPropertySheet( + itemModel, selectedLangParam); + + sheet.add( + new GlobalizedMessage( + "publications.ui.expertise.place", + SciPublicationsConstants.BUNDLE + ), + ExpertiseController.PLACE + ); + + sheet.add( + new GlobalizedMessage( + "publications.ui.expertise.number_of_pages", + SciPublicationsConstants.BUNDLE + ), + ExpertiseController.NUMBER_OF_PAGES + ); + + return sheet; + } + + @Override + protected void addBasicProperties( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent + ) { + final SimpleEditStep basicProperties = new SimpleEditStep( + itemModel, + parent, + selectedLangParam, + EDIT_SHEET_NAME + ); + + final BasicPageForm editBasicSheet + = new ExpertisePropertyForm( + itemModel, this, selectedLangParam + ); + + basicProperties.add( + EDIT_SHEET_NAME, + new GlobalizedMessage( + "publications.ui.expertise.edit_basic_sheet", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess( + editBasicSheet, + itemModel + ), + editBasicSheet.getSaveCancelSection().getCancelButton() + ); + + basicProperties.setDisplayComponent( + getExpertisePropertySheet(itemModel, selectedLangParam) + ); + + getSegmentedPanel().addSegment( + new Label( + new GlobalizedMessage( + "publications.ui.publication.basic_properties" + ) + ), + basicProperties + ); + } + + @Override + protected void addSteps( + final ItemSelectionModel itemModel, final AuthoringKitWizard parent + ) { + super.addSteps(itemModel, parent); + + addStep( + new ExpertiseOrganizationStep(itemModel, parent, selectedLangParam), + new GlobalizedMessage( + "publications.ui.expertise.setOrganization", + SciPublicationsConstants.BUNDLE + ) + ); + addStep( + new ExpertiseOrdererStep(itemModel, parent, selectedLangParam), + new GlobalizedMessage( + "publications.ui.expertise.setOrderer", + SciPublicationsConstants.BUNDLE + ) + ); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertyForm.java new file mode 100644 index 0000000..96bb25e --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ExpertisePropertyForm.java @@ -0,0 +1,141 @@ +/* + * 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.event.FormSubmissionListener; +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.globalization.GlobalizedMessage; + +import org.libreccm.cdi.utils.CdiUtil; +import org.scientificcms.publications.Expertise; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ExpertiseItem; + +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class ExpertisePropertyForm + extends PublicationPropertyForm + implements FormInitListener, FormProcessListener, FormSubmissionListener { + + public static final String ID = "ExpertiseEdit"; + + private final ExpertisePropertiesStep step; + + public ExpertisePropertyForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + this(itemModel, null, selectedLangParam); + } + + public ExpertisePropertyForm( + final ItemSelectionModel itemModel, + final ExpertisePropertiesStep step, + final StringParameter selectedLangParam + ) { + super(itemModel, step, selectedLangParam); + this.step = step; + addSubmissionListener(this); + } + + @Override + protected void addWidgets() { + + super.addWidgets(); + + final ParameterModel placeParam = new StringParameter( + ExpertiseController.PLACE + ); + final TextField place = new TextField(placeParam); + place.setLabel( + new GlobalizedMessage( + "publications.ui.expertise.place", + SciPublicationsConstants.BUNDLE + ) + ); + add(place); + + final ParameterModel numberOfPagesParam = new IntegerParameter( + ExpertiseController.NUMBER_OF_PAGES + ); + final TextField numberOfPages = new TextField(numberOfPagesParam); + numberOfPages.setLabel( + new GlobalizedMessage( + "publications.ui.expertise.number_of_pages", + SciPublicationsConstants.BUNDLE + ) + ); + add(numberOfPages); + } + + @Override + public void init(final FormSectionEvent event) throws FormProcessException { + super.init(event); + + final FormData data = event.getFormData(); + final ExpertiseItem expertiseItem = (ExpertiseItem) initBasicWidgets( + event); + + final Expertise expertise = expertiseItem.getPublication(); + + data.put(ExpertiseController.PLACE, expertise.getPlace()); + data.put( + ExpertiseController.NUMBER_OF_PAGES, + expertise.getNumberOfPages() + ); + } + + @Override + public void process(final FormSectionEvent event) + throws FormProcessException { + super.process(event); + + final FormData formData = event.getFormData(); + final PageState state = event.getPageState(); + final ExpertiseItem expertiseItem = (ExpertiseItem) processBasicWidgets( + event + ); + + if ((expertiseItem != null) + && getSaveCancelSection().getSaveButton().isSelected(state)) { + + final Map data = new HashMap<>(); + data.put( + ExpertiseController.PLACE, + formData.get(ExpertiseController.PLACE) + ); + data.put( + ExpertiseController.NUMBER_OF_PAGES, + formData.get(ExpertiseController.NUMBER_OF_PAGES) + ); + + final ExpertiseController controller = CdiUtil + .createCdiUtil() + .findBean(ExpertiseController.class); + + controller.save( + expertiseItem.getPublication().getPublicationId(), + data + ); + } + } + +}