From 8cd3ff1683428d57175e1fac5480c4f97ec83cb9 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sun, 17 Nov 2019 18:00:49 +0100 Subject: [PATCH] Ported forms for CollectedVolume --- .../ui/CollectedVolumeArticlesAddForm.java | 102 ++++++ .../ui/CollectedVolumeArticlesStep.java | 62 ++++ .../ui/CollectedVolumeArticlesTable.java | 323 ++++++++++++++++++ .../ui/CollectedVolumeController.java | 133 ++++++++ .../ui/CollectedVolumePropertiesStep.java | 133 +++++++- .../ui/CollectedVolumePropertyForm.java | 155 +++++++++ .../publications/CollectedVolumeManager.java | 2 +- .../publications/PublicationManager.java | 25 +- 8 files changed, 920 insertions(+), 15 deletions(-) create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesAddForm.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesStep.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesTable.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeController.java create mode 100644 sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertyForm.java diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesAddForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesAddForm.java new file mode 100644 index 0000000..b492a17 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesAddForm.java @@ -0,0 +1,102 @@ +/* + * 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.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.libreccm.cdi.utils.CdiUtil; +import org.scientificcms.publications.ArticleInCollectedVolume; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.CollectedVolumeItem; + +/** + * + * @author Jens Pelzetter + */ +public class CollectedVolumeArticlesAddForm + extends BasicItemForm + implements FormProcessListener, + FormInitListener { + + private static final Logger LOGGER = LogManager.getLogger( + CollectedVolumeArticlesAddForm.class + ); + + private final String ARTICLE_SEARCH = "articles"; + + private final ItemSelectionModel itemModel; + + private PublicationSearchWidget articleSearch; + + public CollectedVolumeArticlesAddForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + super("ArticlesAddForm", itemModel, selectedLangParam); + this.itemModel = itemModel; + } + + @Override + protected void addWidgets() { + + articleSearch = new PublicationSearchWidget( + ARTICLE_SEARCH, ArticleInCollectedVolume.class + ); + articleSearch.setLabel( + new GlobalizedMessage( + "publications.ui.collected_volume.articles.select_article", + SciPublicationsConstants.BUNDLE + ) + ); + add(articleSearch); + } + + @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 formData = event.getFormData(); + final PageState state = event.getPageState(); + final CollectedVolumeItem collectedVolumeItem + = (CollectedVolumeItem) getItemSelectionModel() + .getSelectedItem(state); + + if (this.getSaveCancelSection().getSaveButton().isSelected(state)) { + final ArticleInCollectedVolume article + = (ArticleInCollectedVolume) formData + .get(ARTICLE_SEARCH); + + final CollectedVolumeController controller = CdiUtil + .createCdiUtil() + .findBean(CollectedVolumeController.class); + + controller.addArticle( + collectedVolumeItem.getPublication().getPublicationId(), + article.getPublicationId() + ); + } + + init(event); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesStep.java new file mode 100644 index 0000000..f374816 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesStep.java @@ -0,0 +1,62 @@ +/* + * 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 CollectedVolumeArticlesStep extends SimpleEditStep { + + private static final String ADD_ARTICLE_SHEET_NAME = "addArticle"; + + public CollectedVolumeArticlesStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + this(itemModel, parent, selectedLangParam, null); + } + + public CollectedVolumeArticlesStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam, + final String prefix + ) { + super(itemModel, parent, selectedLangParam, prefix); + + final BasicItemForm addArticleSheet = new CollectedVolumeArticlesAddForm( + itemModel, selectedLangParam + ); + add( + ADD_ARTICLE_SHEET_NAME, + new GlobalizedMessage( + "publications.ui.collected_volume.add_article", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess(addArticleSheet, itemModel), + addArticleSheet.getSaveCancelSection().getCancelButton()); + + final CollectedVolumeArticlesTable articlesTable + = new CollectedVolumeArticlesTable( + itemModel, + selectedLangParam + ); + setDisplayComponent(articlesTable); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesTable.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesTable.java new file mode 100644 index 0000000..4b1cba0 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeArticlesTable.java @@ -0,0 +1,323 @@ +/* + * 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.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.PermissionChecker; +import org.librecms.contentsection.privileges.ItemPrivileges; +import org.scientificcms.publications.ArticleInCollectedVolume; +import org.scientificcms.publications.CollectedVolume; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.CollectedVolumeItem; + +import java.util.Iterator; +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class CollectedVolumeArticlesTable + extends Table + implements TableActionListener { + + private static final Logger LOGGER = LogManager.getLogger( + CollectedVolumeArticlesTable.class + ); + + private final String TABLE_COL_EDIT = "table_col_edit"; + private final String TABLE_COL_DEL = "table_col_del"; + + private final ItemSelectionModel itemModel; + + public CollectedVolumeArticlesTable( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + super(); + this.itemModel = itemModel; + + setEmptyView( + new Label( + new GlobalizedMessage( + "publications.ui.collected_volume.no_articles", + SciPublicationsConstants.BUNDLE + ) + ) + ); + + TableColumnModel colModel = getColumnModel(); + colModel.add(new TableColumn( + 0, + new Label( + new GlobalizedMessage( + "publications.ui.collected_volume.article", + SciPublicationsConstants.BUNDLE + )), + TABLE_COL_EDIT)); + colModel.add(new TableColumn( + 1, + new Label( + new GlobalizedMessage( + "publications.ui.collected_volume.article.remove", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_DEL)); + + setModelBuilder( + new CollectedVolumeArticlesTableModelBuilder(itemModel)); + + colModel.get(0).setCellRenderer(new EditCellRenderer()); + colModel.get(1).setCellRenderer(new DeleteCellRenderer()); + + addTableActionListener(this); + } + + @Override + public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); + + final CollectedVolumeController controller = CdiUtil + .createCdiUtil() + .findBean(CollectedVolumeController.class); + + final ArticleInCollectedVolume article = controller + .findArticle((Long) event.getRowKey()); + + final CollectedVolumeItem collectedVolumeItem + = (CollectedVolumeItem) itemModel + .getSelectedObject(state); + final CollectedVolume collectedVolume = collectedVolumeItem + .getPublication(); + + final List articles = collectedVolume + .getArticles(); + + 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)) { + controller.removeArticle( + collectedVolume.getPublicationId(), + article.getPublicationId() + ); + } +// else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) { +// controller.swapWithPreviousArticle( +// collectedVolume.getPublicationId(), +// article.getPublicationId() +// ); +// } else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) { +// controller.swapWithNextArticle( +// collectedVolume.getPublicationId(), +// article.getPublicationId() +// ); +// } + } + + @Override + public void headSelected(TableActionEvent event) { + //Nothing to do. + } + + private class CollectedVolumeArticlesTableModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private final ItemSelectionModel itemModel; + + public CollectedVolumeArticlesTableModelBuilder( + final ItemSelectionModel itemModel + ) { + this.itemModel = itemModel; + } + + @Override + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + final CollectedVolumeItem collectedVolumeItem + = (CollectedVolumeItem) itemModel + .getSelectedItem(state); + return new CollectedVolumeArticlesTableModel( + table, state, collectedVolumeItem.getPublication() + ); + } + + } + + private class CollectedVolumeArticlesTableModel implements TableModel { + + private final Table table; + private final Iterator articles; + private ArticleInCollectedVolume article; + + private CollectedVolumeArticlesTableModel( + final Table table, + final PageState state, + final CollectedVolume collectedVolume + ) { + this.table = table; + articles = collectedVolume.getArticles().iterator(); + } + + @Override + public int getColumnCount() { + return table.getColumnModel().size(); + } + + @Override + public boolean nextRow() { + return articles != null && articles.hasNext(); + } + + @Override + public Object getElementAt(final int columnIndex) { + switch (columnIndex) { + case 0: + return article.getTitle(); + case 1: + return new Label( + new GlobalizedMessage( + "publications.ui.collected_volume.article.remove", + SciPublicationsConstants.BUNDLE + ) + ); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return article.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 col + ) { +// SecurityManager securityManager = Utilities +// .getSecurityManager(state); +// CollectedVolume collectedVolume = (CollectedVolume) m_itemModel. +// getSelectedObject(state); +// +// boolean canEdit = securityManager.canAccess( +// state.getRequest(), +// SecurityManager.EDIT_ITEM, +// collectedVolume); +// +// if (canEdit) { +// ArticleInCollectedVolume article; +// try { +// article = new ArticleInCollectedVolume((BigDecimal) key); +// } catch (ObjectNotFoundException ex) { +// s_log.warn(String.format("No object with key '%s' found.", +// key), +// ex); +// return new Label(value.toString()); +// } +// +// ContentSection section = article.getContentSection();//CMS.getContext().getContentSection(); +// ItemResolver resolver = section.getItemResolver(); +// Link link = new Link(value.toString(), +// resolver.generateItemURL(state, +// article, +// section, +// article +// .getVersion())); +// +// return link; +// } else { +// ArticleInCollectedVolume article; +// try { +// article = new ArticleInCollectedVolume((BigDecimal) key); +// } catch (ObjectNotFoundException ex) { +// s_log.warn(String.format("No object with key '%s' found.", +// key), +// ex); +// return new Label(value.toString()); +// } +// +// Label label = new Label(value.toString()); +// return label; +// } + 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 PermissionChecker permissionChecker = CdiUtil + .createCdiUtil() + .findBean(PermissionChecker.class); + + final CollectedVolumeItem collectedVolumeItem + = (CollectedVolumeItem) itemModel + .getSelectedObject(state); + + boolean canEdit = permissionChecker + .isPermitted(ItemPrivileges.DELETE, collectedVolumeItem); + + if (canEdit) { + ControlLink link = new ControlLink((Label) value); + link.setConfirmation(new GlobalizedMessage( + "publications.ui.collected_volume.articles.confirm_remove")); + return link; + } else { + return new Text(""); + } + } + + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeController.java new file mode 100644 index 0000000..f883ce9 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumeController.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.scientificcms.publications.ArticleInCollectedVolume; +import org.scientificcms.publications.CollectedVolume; +import org.scientificcms.publications.CollectedVolumeManager; +import org.scientificcms.publications.PublicationRepository; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class CollectedVolumeController { + + public static final String PEER_REVIEWED = "peerReviewed"; + + @Inject + private CollectedVolumeManager collectedVolumeManager; + + @Inject + private PublicationRepository publicationRepository; + + @Transactional(Transactional.TxType.REQUIRED) + public void save( + final long collectedVolumeId, + final Locale selectedLocale, + final Map data + ) { + final CollectedVolume collectedVolume = publicationRepository + .findByIdAndType(collectedVolumeId, CollectedVolume.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No CollectedVolume with ID %d found.", + collectedVolumeId + ) + ) + ); + + if (data.get(PEER_REVIEWED) != null) { + final Boolean reviewed = (Boolean) data.get(PEER_REVIEWED); + collectedVolume.setPeerReviewed(reviewed); + } + + publicationRepository.save(collectedVolume); + } + + public ArticleInCollectedVolume findArticle(final long articleId) { + return publicationRepository + .findByIdAndType(articleId, ArticleInCollectedVolume.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No ArticleInCollectedVolume with ID %d found.", + articleId + ) + ) + ); + } + + public void addArticle( + final long collectedVolumeId, final long articleId + ) { + final CollectedVolume collectedVolume = publicationRepository + .findByIdAndType(collectedVolumeId, CollectedVolume.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No CollectedVolume with ID %d found", + collectedVolumeId + ) + ) + ); + + final ArticleInCollectedVolume article = publicationRepository + .findByIdAndType(articleId, ArticleInCollectedVolume.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No ArticleInCollectedVolume with ID %d found.", + articleId + ) + ) + ); + + collectedVolumeManager.addArticleToCollectedVolume( + article, collectedVolume + ); + } + + public void removeArticle( + final long collectedVolumeId, final long articleId + ) { + final CollectedVolume collectedVolume = publicationRepository + .findByIdAndType(collectedVolumeId, CollectedVolume.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No CollectedVolume with ID %d found", + collectedVolumeId + ) + ) + ); + + final ArticleInCollectedVolume article = publicationRepository + .findByIdAndType(articleId, ArticleInCollectedVolume.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No ArticleInCollectedVolume with ID %d found.", + articleId + ) + ) + ); + + collectedVolumeManager.removeArticleFromCollectedVolume( + article, collectedVolume + ); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertiesStep.java index 4fd12c8..5ad7904 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertiesStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertiesStep.java @@ -5,11 +5,140 @@ */ 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.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.domain.DomainService; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; + +import org.scientificcms.publications.SciPublicationsConstants; + +import static com.arsdigita.cms.contenttypes.ui.PublicationPropertiesStep.*; + /** * * @author Jens Pelzetter */ -public class CollectedVolumePropertiesStep +public class CollectedVolumePropertiesStep extends PublicationWithPublisherPropertiesStep { - + + private final StringParameter selectedLangParam; + + public CollectedVolumePropertiesStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + super(itemModel, parent, selectedLangParam); + this.selectedLangParam = selectedLangParam; + } + + public static Component getCollectedVolumePropertySheet( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + final DomainObjectPropertySheet sheet + = (DomainObjectPropertySheet) PublicationWithPublisherPropertiesStep + .getPublicationWithPublisherPropertySheet( + itemModel, selectedLangParam + ); + + sheet.add(new GlobalizedMessage( + "publications.ui.collectedVolume.reviewed", + SciPublicationsConstants.BUNDLE + ), + CollectedVolumeController.PEER_REVIEWED, + new ReviewedFormatter()); + + return sheet; + } + + @Override + protected void addBasicProperties( + ItemSelectionModel itemModel, + AuthoringKitWizard parent) { + SimpleEditStep basicProperties = new SimpleEditStep( + itemModel, parent, selectedLangParam, EDIT_SHEET_NAME); + + final BasicPageForm editBasicSheet + = new CollectedVolumePropertyForm( + itemModel, + this, + selectedLangParam + ); + + basicProperties.add( + EDIT_SHEET_NAME, + new GlobalizedMessage( + "publications.ui.collected_volume.edit_basic_sheet", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess(editBasicSheet, itemModel), + editBasicSheet.getSaveCancelSection().getCancelButton()); + + basicProperties.setDisplayComponent( + getCollectedVolumePropertySheet(itemModel, selectedLangParam)); + + getSegmentedPanel().addSegment( + new Label( + new GlobalizedMessage( + "publications.ui.publication.basic_properties", + SciPublicationsConstants.BUNDLE + ) + ), + basicProperties); + } + + @Override + protected void addSteps( + final ItemSelectionModel itemModel, final AuthoringKitWizard parent + ) { + super.addSteps(itemModel, parent); + + addStep( + new CollectedVolumeArticlesStep( + itemModel, parent, selectedLangParam + ), + new GlobalizedMessage( + "publications.ui.collected_volume_articles", + SciPublicationsConstants.BUNDLE + )); + } + + private static class ReviewedFormatter + extends DomainService + implements DomainObjectPropertySheet.AttributeFormatter { + + public ReviewedFormatter() { + super(); + } + + @Override + public String format( + final Object obj, final String attribute, final PageState state + ) { + if ((get(obj, attribute) != null) + && (get(obj, attribute) instanceof Boolean) + && ((Boolean) get(obj, attribute) == true)) { + return (String) new GlobalizedMessage( + "publications.ui.collectedVolume.reviewed.yes", + SciPublicationsConstants.BUNDLE + ).localize(); + } else { + return (String) new GlobalizedMessage( + "publications.ui.collectedVolume.reviewed.no", + SciPublicationsConstants.BUNDLE + ).localize(); + } + } + + } + } diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertyForm.java new file mode 100644 index 0000000..9ae4029 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertyForm.java @@ -0,0 +1,155 @@ +/* + * 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.Label; +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.CheckboxGroup; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.SelectedLanguageUtil; +import com.arsdigita.globalization.GlobalizedMessage; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.libreccm.cdi.utils.CdiUtil; +import org.scientificcms.publications.CollectedVolume; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.CollectedVolumeItem; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class CollectedVolumePropertyForm + extends PublicationWithPublisherPropertyForm + implements FormProcessListener, + FormInitListener, + FormSubmissionListener { + + private static final Logger LOGGER = LogManager.getLogger( + CollectedVolumePropertyForm.class + ); + + private static final String ID = "CollectedVolumeEdit"; + + private final StringParameter selectedLangParam; + + private final CollectedVolumePropertiesStep step; + + private CheckboxGroup reviewed; + + public CollectedVolumePropertyForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + this(itemModel, null, selectedLangParam); + } + + public CollectedVolumePropertyForm( + final ItemSelectionModel itemModel, + CollectedVolumePropertiesStep step, + final StringParameter selectedLangParam + ) { + super(itemModel, step, selectedLangParam); + this.step = step; + this.selectedLangParam = selectedLangParam; + addSubmissionListener(this); + } + + @Override + protected void addWidgets() { + + super.addWidgets(); + + reviewed = new CheckboxGroup("reviewedGroup"); + reviewed.addOption( + new Option( + CollectedVolumeController.PEER_REVIEWED, + new Label( + new GlobalizedMessage( + "publications.ui.collectedVolume.reviewed", + SciPublicationsConstants.BUNDLE + ) + ) + ) + ); + reviewed.setLabel( + new GlobalizedMessage( + "publications.ui.collectedVolume.reviewed", + SciPublicationsConstants.BUNDLE + ) + ); + add(reviewed); + } + + @Override + public void init(final FormSectionEvent event) throws FormProcessException { + super.init(event); + + final FormData data = event.getFormData(); + final CollectedVolumeItem collectedVolumeItem + = (CollectedVolumeItem) super + .initBasicWidgets(event); + + final CollectedVolume collectedVolume = collectedVolumeItem + .getPublication(); + + if ((collectedVolume.getPeerReviewed() != null) + && (collectedVolume.getPeerReviewed())) { + reviewed.setValue( + event.getPageState(), + new String[]{CollectedVolumeController.PEER_REVIEWED} + ); + } else { + reviewed.setValue(event.getPageState(), null); + } + } + + @Override + public void process(final FormSectionEvent event) throws + FormProcessException { + super.process(event); + + final PageState state = event.getPageState(); + final CollectedVolumeItem collectedVolumeItem + = (CollectedVolumeItem) super + .processBasicWidgets(event); + + if ((collectedVolumeItem != null) + && getSaveCancelSection().getSaveButton().isSelected(state)) { + + final CollectedVolumeController controller = CdiUtil + .createCdiUtil() + .findBean(CollectedVolumeController.class); + final Map data = new HashMap<>(); + if (reviewed.getValue(state.getPageState()) == null) { + data.put(CollectedVolumeController.PEER_REVIEWED, false); + } else { + data.put(CollectedVolumeController.PEER_REVIEWED, true); + } + + controller.save( + collectedVolumeItem.getPublication().getPublicationId(), + SelectedLanguageUtil.selectedLocale( + state, selectedLangParam + ), + data); + } + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/CollectedVolumeManager.java b/sci-publications/src/main/java/org/scientificcms/publications/CollectedVolumeManager.java index c351536..c5e9c9e 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/CollectedVolumeManager.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/CollectedVolumeManager.java @@ -73,5 +73,5 @@ public class CollectedVolumeManager implements Serializable { publicationRepository.save(article); publicationRepository.save(collectedVolume); } - + } diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java b/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java index e671ff5..c264fc7 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/PublicationManager.java @@ -154,10 +154,11 @@ public class PublicationManager { @AuthorizationRequired @RequiresPrivilege(ItemPrivileges.EDIT) @Transactional(Transactional.TxType.REQUIRED) - public void moveAuthorToPosition(final Publication ofPublication, - final Person author, - final int toPosition) { - + public void moveAuthorToPosition( + final Publication ofPublication, + final Person author, + final int toPosition + ) { Objects.requireNonNull(ofPublication); Objects.requireNonNull(author); if (toPosition < 0) { @@ -357,20 +358,20 @@ public class PublicationManager { ) { Objects.requireNonNull(series); Objects.requireNonNull(fromPublication); - + final Optional result = fromPublication - .getSeries() - .stream() - .filter(volume -> volume.getSeries().equals(series)) - .findAny(); - + .getSeries() + .stream() + .filter(volume -> volume.getSeries().equals(series)) + .findAny(); + if (!result.isPresent()) { return; } - + final VolumeInSeries remove = result.get(); fromPublication.removeSeries(remove); - + entityManager.remove(remove); publicationRepository.save(fromPublication); }