diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeSheet.java index 0771f28..cca05d4 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeSheet.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeSheet.java @@ -114,9 +114,7 @@ public class ArticleInCollectedVolumeCollectedVolumeSheet = (ArticleInCollectedVolumeItem) itemModel .getSelectedObject(state); - final TableColumn column = getColumnModel().get( - event.getColumn().intValue() - ); + final TableColumn column = getColumnModel().get(event.getColumn()); if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) { // Nothing @@ -160,7 +158,6 @@ public class ArticleInCollectedVolumeCollectedVolumeSheet return new ArticleInCollectedVolumeCollectedVolumeSheetModel( table, state, article, selectedLangParam ); - } } diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeStep.java index 7a180e6..2e7531d 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInCollectedVolumeCollectedVolumeStep.java @@ -41,10 +41,12 @@ public class ArticleInCollectedVolumeCollectedVolumeStep final StringParameter selectedLanguageParam, final String parameterSuffix ) { - super(itemSelectionModel, - authoringKitWizard, - selectedLanguageParam, - parameterSuffix); + super( + itemSelectionModel, + authoringKitWizard, + selectedLanguageParam, + parameterSuffix + ); final BasicItemForm addCollectedVolumeForm = new ArticleInCollectedVolumeCollectedVolumeForm( @@ -52,22 +54,22 @@ public class ArticleInCollectedVolumeCollectedVolumeStep selectedLanguageParam ); - add(ADD_COLLECTED_VOLUME_STEP, + add( + ADD_COLLECTED_VOLUME_STEP, new GlobalizedMessage( "publications.ui.collectedVolume.addCollectedVolume", SciPublicationsConstants.BUNDLE ), new WorkflowLockedComponentAccess( - addCollectedVolumeForm, - itemSelectionModel + addCollectedVolumeForm, itemSelectionModel ), - addCollectedVolumeForm.getSaveCancelSection().getCancelButton()); + addCollectedVolumeForm.getSaveCancelSection().getCancelButton() + ); final ArticleInCollectedVolumeCollectedVolumeSheet sheet - = new ArticleInCollectedVolumeCollectedVolumeSheet( + = new ArticleInCollectedVolumeCollectedVolumeSheet( itemSelectionModel, selectedLanguageParam); setDisplayComponent(sheet); - } } diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalController.java index 0ff49d1..268e189 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalController.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalController.java @@ -138,8 +138,7 @@ public class ArticleInJournalController { @Transactional(Transactional.TxType.REQUIRED) public void unsetJournal( - final long articleId, final long journalId - ) { + final long articleId) { final ArticleInJournal article = publicationRepository .findByIdAndType(articleId, ArticleInJournal.class) .orElseThrow( diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalForm.java index 05af38b..3df2902 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalForm.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalForm.java @@ -5,10 +5,89 @@ */ 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.ArticleInJournal; +import org.scientificcms.publications.Journal; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ArticleInJournalItem; + /** * * @author Jens Pelzetter */ -public class ArticleInJournalJournalForm { +public class ArticleInJournalJournalForm + extends BasicItemForm + implements FormProcessListener, FormInitListener { + private JournalSearchWidget journalSearch; + private final String JOURNAL_SEARCH = "journal"; + //private final static PublicationsConfig config = new PublicationsConfig(); + + public ArticleInJournalJournalForm( + final ItemSelectionModel itemSelectionModel, + final StringParameter selectedLanguageParam + ) { + + super( + "ArticleInJournalJournal", + itemSelectionModel, + selectedLanguageParam + ); + } + + @Override + protected void addWidgets() { + + journalSearch = new JournalSearchWidget(JOURNAL_SEARCH); + journalSearch.setLabel( + new GlobalizedMessage( + "publications.ui.articleInJournal.selectJournal", + SciPublicationsConstants.BUNDLE + ) + ); + add(journalSearch); + } + + @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 ArticleInJournalItem articleItem = (ArticleInJournalItem) getItemSelectionModel(). + getSelectedObject(state); + final ArticleInJournal article = articleItem.getPublication(); + + if (this.getSaveCancelSection().getSaveButton().isSelected(state)) { + final Journal journal = (Journal) data.get(JOURNAL_SEARCH); + + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final ArticleInJournalController controller = cdiUtil + .findBean(ArticleInJournalController.class); + controller.setJournal( + article.getPublicationId(), journal.getJournalId() + ); + } + + init(event); + } + } diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalSheet.java index 32ab9c1..5f0bb5c 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalSheet.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalSheet.java @@ -5,10 +5,280 @@ */ 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.Journal; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.ArticleInJournalItem; + + /** * * @author Jens Pelzetter */ -public class ArticleInJournalJournalSheet { - +public class ArticleInJournalJournalSheet + extends Table + implements TableActionListener { + + private final String TABLE_COL_EDIT = "table_col_edit"; + + private final String TABLE_COL_DEL = "table_col_del"; + + private ItemSelectionModel itemSelectionModel; + + public ArticleInJournalJournalSheet( + final ItemSelectionModel itemSelectionModel, + final StringParameter selectedLangParam + ) { + super(); + this.itemSelectionModel = itemSelectionModel; + + setEmptyView( + new Label( + new GlobalizedMessage( + "publications.ui.articleInJournal.journal.none", + SciPublicationsConstants.BUNDLE + ) + ) + ); + + final TableColumnModel columnModel = getColumnModel(); + columnModel.add( + new TableColumn( + 0, + new Label( + new GlobalizedMessage( + "publications.ui.articleInJournal.journal", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_EDIT + ) + ); + columnModel.add( + new TableColumn( + 1, + new Label( + new GlobalizedMessage( + "publications.ui.articleInJournal.journal.remove", + SciPublicationsConstants.BUNDLE + ) + ), + TABLE_COL_DEL + ) + ); + + setModelBuilder( + new ArticleInJournalJournalSheetModelBuilder( + itemSelectionModel, selectedLangParam + ) + ); + 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 ArticleInJournalItem article + = (ArticleInJournalItem) itemSelectionModel + .getSelectedObject(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 ArticleInJournalController controller = CdiUtil + .createCdiUtil() + .findBean(ArticleInJournalController.class); + controller.unsetJournal(article.getPublication().getPublicationId()); + } + } + + @Override + public void headSelected(TableActionEvent event) { + //Nothing to do + } + + private class ArticleInJournalJournalSheetModelBuilder + extends LockableImpl + implements TableModelBuilder { + + private final ItemSelectionModel itemModel; + private final StringParameter selectedLangParam; + + public ArticleInJournalJournalSheetModelBuilder( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + this.itemModel = itemModel; + this.selectedLangParam = selectedLangParam; + } + + @Override + public TableModel makeModel(final Table table, final PageState state) { + table.getRowSelectionModel().clearSelection(state); + final ArticleInJournalItem article + = (ArticleInJournalItem) itemModel. + getSelectedObject(state); + return new ArticleInJournalJournalSheetModel( + table, state, article, selectedLangParam); + } + + } + + private class ArticleInJournalJournalSheetModel implements TableModel { + + private final Table table; + + private final String journalTitle; + + private final Long journalId; + + private boolean done; + + public ArticleInJournalJournalSheetModel( + final Table table, + final PageState state, + final ArticleInJournalItem articleItem, + final StringParameter selectedLangParam + ) { + this.table = table; + final Journal journal = articleItem + .getPublication() + .getJournal(); + if (journal == null) { + done = false; + journalTitle = null; + journalId = null; + } else { + done = true; + journalTitle = journal.getTitle(); + journalId = journal.getJournalId(); + } + } + + @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 journalTitle; + case 1: + return new Label( + new GlobalizedMessage( + "publications.ui.articleInCollectedVolume.collectedVolume.remove", + SciPublicationsConstants.BUNDLE + ) + ); + default: + return null; + } + } + + @Override + public Object getKeyAt(final int columnIndex) { + return journalId; + } + + } + + private class EditCellRenderer + extends LockableImpl + implements TableCellRenderer { + + 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 { + + 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 ArticleInJournalItem articleItem + = (ArticleInJournalItem) itemSelectionModel + .getSelectedItem(state); + final boolean canEdit = permissionChecker.isPermitted( + ItemPrivileges.EDIT, articleItem + ); + + if (canEdit) { + final ControlLink link = new ControlLink((Component) value); + link.setConfirmation( + new GlobalizedMessage( + "publication.ui.articleInJournal.journal.confirm_remove", + SciPublicationsConstants.BUNDLE + ) + ); + return link; + } else { + return new Text(""); + } + } + + } + } diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalStep.java index 88b9e2e..2d6c555 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalJournalStep.java @@ -1,15 +1,68 @@ 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; + /* * 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. */ - /** * * @author Jens Pelzetter */ -public class ArticleInJournalJournalStep { - +public class ArticleInJournalJournalStep extends SimpleEditStep { + + private String ADD_JOURNAL_STEP = "addJournal"; + + public ArticleInJournalJournalStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLanguageParam + ) { + this(itemModel, parent, selectedLanguageParam, null); + } + + public ArticleInJournalJournalStep( + final ItemSelectionModel itemSelectionModel, + final AuthoringKitWizard authoringKitWizard, + final StringParameter selectedLanguageParam, + final String parameterSuffix + ) { + super( + itemSelectionModel, + authoringKitWizard, + selectedLanguageParam, + parameterSuffix + ); + + final BasicItemForm addJournalForm = new ArticleInJournalJournalForm( + itemSelectionModel, selectedLanguageParam + ); + add( + ADD_JOURNAL_STEP, + new GlobalizedMessage( + "publications.ui.articleInJournal.addJournal", + SciPublicationsConstants.BUNDLE), + new WorkflowLockedComponentAccess( + addJournalForm, itemSelectionModel + ), + addJournalForm.getSaveCancelSection().getCancelButton()); + + final ArticleInJournalJournalSheet sheet + = new ArticleInJournalJournalSheet( + itemSelectionModel, + selectedLanguageParam + ); + setDisplayComponent(sheet); + } + } diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalPropertiesStep.java index 2e042e7..28b0a32 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalPropertiesStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/ArticleInJournalPropertiesStep.java @@ -113,7 +113,8 @@ public class ArticleInJournalPropertiesStep extends PublicationPropertiesStep { ); final BasicPageForm editBasicSheet = new ArticleInJournalPropertyForm( - itemModel, this); + itemModel, this, selectedLanguageParam + ); basicProperties.add( EDIT_SHEET_NAME, @@ -152,7 +153,9 @@ public class ArticleInJournalPropertiesStep extends PublicationPropertiesStep { super.addSteps(itemModel, parent); addStep( - new ArticleInJournalJournalStep(itemModel, parent), + new ArticleInJournalJournalStep( + itemModel, parent, selectedLanguageParam + ), new GlobalizedMessage( "publication.ui.articleInJournal.journal", SciPublicationsConstants.BUNDLE 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 new file mode 100644 index 0000000..4fd12c8 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/CollectedVolumePropertiesStep.java @@ -0,0 +1,15 @@ +/* + * 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; + +/** + * + * @author Jens Pelzetter + */ +public class CollectedVolumePropertiesStep + extends PublicationWithPublisherPropertiesStep { + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java index 480fc01..efa1901 100644 --- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationPropertiesStep.java @@ -166,7 +166,6 @@ public class PublicationPropertiesStep extends SimpleEditStep { protected void addBasicProperties( final ItemSelectionModel itemModel, final AuthoringKitWizard parent ) { - final SimpleEditStep basicProperties = new SimpleEditStep( itemModel, parent, diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertiesStep.java new file mode 100644 index 0000000..055816a --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertiesStep.java @@ -0,0 +1,154 @@ +/* + * 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 PublicationWithPublisherPropertiesStep + extends PublicationPropertiesStep { + + private final StringParameter selectedLangParam; + + public PublicationWithPublisherPropertiesStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + super(itemModel, parent, selectedLangParam); + this.selectedLangParam = selectedLangParam; + } + + public static Component getPublicationWithPublisherPropertySheet( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + final DomainObjectPropertySheet sheet + = (DomainObjectPropertySheet) PublicationPropertiesStep + .getPublicationPropertySheet(itemModel, selectedLangParam); + + sheet.add( + new GlobalizedMessage( + "publications.ui.with_publisher.isbn10", + SciPublicationsConstants.BUNDLE + ), + SciPublicationsWithPublisherController.ISBN10 + ); + + sheet.add( + new GlobalizedMessage( + "publications.ui.with_publisher.isbn13", + SciPublicationsConstants.BUNDLE + ), + SciPublicationsWithPublisherController.ISBN13 + ); + + sheet.add( + new GlobalizedMessage( + "publications.ui.with_publisher.volume", + SciPublicationsConstants.BUNDLE + ), + SciPublicationsWithPublisherController.VOLUME + ); + + sheet.add( + new GlobalizedMessage( + "publications.ui.with_publisher.number_of_volumes", + SciPublicationsConstants.BUNDLE + ), + SciPublicationsWithPublisherController.NUMBER_OF_VOLUMES + ); + + sheet.add(new GlobalizedMessage( + "publications.ui.with_publisher.number_of_pages", + SciPublicationsConstants.BUNDLE + ), + SciPublicationsWithPublisherController.NUMBER_OF_PAGES + ); + + sheet.add(new GlobalizedMessage( + "publications.ui.with_publisher.edition", + SciPublicationsConstants.BUNDLE + ), + SciPublicationsWithPublisherController.EDITION + ); + + 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 PublicationWithPublisherPropertyForm( + itemModel, this, selectedLangParam); + + basicProperties.add( + EDIT_SHEET_NAME, + new GlobalizedMessage( + "publications.ui.publication.edit_basic_sheet", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess(editBasicSheet, itemModel), + editBasicSheet.getSaveCancelSection().getCancelButton() + ); + + basicProperties.setDisplayComponent( + getPublicationWithPublisherPropertySheet( + 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 PublicationWithPublisherSetPublisherStep( + itemModel, parent, selectedLangParam + ), + new GlobalizedMessage( + "publications.ui.with_publisher.publisher", + SciPublicationsConstants.BUNDLE + ) + ); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java new file mode 100644 index 0000000..5a5e1f0 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherPropertyForm.java @@ -0,0 +1,334 @@ +/* + * 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.event.ParameterEvent; +import com.arsdigita.bebop.event.ParameterListener; +import com.arsdigita.bebop.form.TextField; +import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.ParameterData; +import com.arsdigita.bebop.parameters.ParameterModel; +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.PublicationWithPublisher; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.PublicationWithPublisherItem; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class PublicationWithPublisherPropertyForm + extends PublicationPropertyForm + implements FormProcessListener, + FormInitListener, + FormSubmissionListener { + + private static final Logger LOGGER = LogManager.getLogger( + PublicationWithPublisherPropertyForm.class + ); + + public static final String ID = "PublicationWithPublisherEdit"; + + private static final String PUBLISHER_SEARCH = "publisher"; + + private final PublicationWithPublisherPropertiesStep step; + + private final ItemSelectionModel itemModel; + + private final StringParameter selectedLangParam; + + private PublisherSearchWidget publisherSearch; + + public PublicationWithPublisherPropertyForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + this(itemModel, null, selectedLangParam); + } + + public PublicationWithPublisherPropertyForm( + ItemSelectionModel itemModel, + PublicationWithPublisherPropertiesStep step, + final StringParameter selectedLangParam + ) { + super(itemModel, step, selectedLangParam); + this.step = step; + this.itemModel = itemModel; + this.selectedLangParam = selectedLangParam; + addSubmissionListener(this); + } + + @Override + protected void addWidgets() { + + super.addWidgets(); + + final ParameterModel isbn10Param = new StringParameter( + SciPublicationsWithPublisherController.ISBN10 + ); + final TextField isbn10 = new TextField(isbn10Param); + isbn10.setMaxLength(17); + isbn10.addValidationListener(new ParameterListener() { + + public void validate(final ParameterEvent event) + throws FormProcessException { + ParameterData data = event.getParameterData(); + String value = (String) data.getValue(); + + if (value.isEmpty()) { + return; + } + + value = value.replace("-", ""); + + if (value.length() != 10) { + data.invalidate(); + data.addError( + new GlobalizedMessage( + "publications.ui.invalid_isbn10", + SciPublicationsConstants.BUNDLE + ) + ); + } + + try { + Long num = Long.parseLong(value); + } catch (NumberFormatException ex) { + data.invalidate(); + data.addError( + new GlobalizedMessage( + "publications.ui.invalid_isbn10", + SciPublicationsConstants.BUNDLE + ) + ); + } + } + + }); + isbn10.setLabel(new GlobalizedMessage( + "publications.ui.with_publisher.isbn10")); + add(isbn10); + + final ParameterModel isbn13Param = new StringParameter( + SciPublicationsWithPublisherController.ISBN13 + ); + final TextField isbn13 = new TextField(isbn13Param); + isbn13.setMaxLength(17); + isbn13.addValidationListener(new ParameterListener() { + + public void validate(final ParameterEvent event) + throws FormProcessException { + ParameterData data = event.getParameterData(); + String value = (String) data.getValue(); + + if (value.isEmpty()) { + return; + } + + value = value.replace("-", ""); + + if (value.length() != 13) { + data.invalidate(); + data.addError( + new GlobalizedMessage( + "publications.ui.invalid_isbn13", + SciPublicationsConstants.BUNDLE + ) + ); + } + + try { + Long num = Long.parseLong(value); + } catch (NumberFormatException ex) { + data.invalidate(); + data.addError(new GlobalizedMessage( + "publications.ui.invalid_isbn13", + SciPublicationsConstants.BUNDLE + ) + ); + } + } + + }); + isbn13.setLabel(new GlobalizedMessage( + "publications.ui.with_publisher.isbn13")); + add(isbn13); + + final ParameterModel volumeParam = new IntegerParameter( + SciPublicationsWithPublisherController.VOLUME + ); + final TextField volume = new TextField(volumeParam); + volume.setLabel( + new GlobalizedMessage( + "publications.ui.collected_volume.volume", + SciPublicationsConstants.BUNDLE + ) + ); + add(volume); + + final ParameterModel numberOfVolumesParam = new IntegerParameter( + SciPublicationsWithPublisherController.NUMBER_OF_VOLUMES + ); + TextField numberOfVolumes = new TextField(numberOfVolumesParam); + numberOfVolumes.setLabel( + new GlobalizedMessage( + "publications.ui.collected_volume.number_of_volumes", + SciPublicationsConstants.BUNDLE + ) + ); + add(numberOfVolumes); + + final ParameterModel numberOfPagesParam = new IntegerParameter( + SciPublicationsWithPublisherController.NUMBER_OF_PAGES + ); + final TextField numberOfPages = new TextField(numberOfPagesParam); + numberOfPages.setLabel( + new GlobalizedMessage( + "publications.ui.collected_volume.number_of_pages", + SciPublicationsConstants.BUNDLE + ) + ); + add(numberOfPages); + + ParameterModel editionModel = new StringParameter( + SciPublicationsWithPublisherController.EDITION + ); + + final TextField edition = new TextField(editionModel); + edition.setLabel( + new GlobalizedMessage( + "publications.ui.collected_volume.edition", + SciPublicationsConstants.BUNDLE + ) + ); + add(edition); + + } + + @Override + public void init(final FormSectionEvent event) throws FormProcessException { + + final FormData data = event.getFormData(); + super.init(event); + + final PublicationWithPublisherItem publicationItem + = (PublicationWithPublisherItem) super + .initBasicWidgets(event); + + final PublicationWithPublisher publication = publicationItem + .getPublication(); + + data.put( + SciPublicationsWithPublisherController.ISBN10, + publication.getIsbn10() + ); + data.put( + SciPublicationsWithPublisherController.ISBN13, + publication.getIsbn10() + ); + data.put( + SciPublicationsWithPublisherController.VOLUME, + publication.getVolume() + ); + data.put( + SciPublicationsWithPublisherController.NUMBER_OF_VOLUMES, + publication.getNumberOfVolumes() + ); + data.put( + SciPublicationsWithPublisherController.NUMBER_OF_PAGES, + publication.getNumberOfPages() + ); + data.put( + SciPublicationsWithPublisherController.EDITION, + publication.getEdition() + ); + } + + @Override + public void process(final FormSectionEvent event) + throws FormProcessException { + + final FormData formData = event.getFormData(); + final PageState state = event.getPageState(); + super.process(event); + + final PublicationWithPublisherItem item + = (PublicationWithPublisherItem) super + .processBasicWidgets(event); + + if ((item != null) + && getSaveCancelSection().getSaveButton().isSelected(state)) { + final PublicationWithPublisher publication = item + .getPublication(); + + final Map data = new HashMap<>(); + + data.put( + SciPublicationsWithPublisherController.ISBN10, + formData.get(SciPublicationsWithPublisherController.ISBN10) + ); + + data.put( + SciPublicationsWithPublisherController.ISBN13, + formData.get(SciPublicationsWithPublisherController.ISBN13) + ); + + data.put( + SciPublicationsWithPublisherController.VOLUME, + formData.get(SciPublicationsWithPublisherController.VOLUME) + ); + + data.put( + SciPublicationsWithPublisherController.NUMBER_OF_PAGES, + formData.get( + SciPublicationsWithPublisherController.NUMBER_OF_PAGES + ) + ); + + data.put( + SciPublicationsWithPublisherController.NUMBER_OF_VOLUMES, + formData.get( + SciPublicationsWithPublisherController.NUMBER_OF_VOLUMES + ) + ); + + data.put( + SciPublicationsWithPublisherController.EDITION, + formData.get(SciPublicationsWithPublisherController.EDITION) + ); + + final Locale selectedLocale = SelectedLanguageUtil.selectedLocale( + state, selectedLangParam + ); + + final SciPublicationsWithPublisherController controller = CdiUtil + .createCdiUtil() + .findBean(SciPublicationsWithPublisherController.class); + controller.savePublication( + publication.getPublicationId(), selectedLocale, data + ); + } + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherForm.java new file mode 100644 index 0000000..c0b92d0 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherForm.java @@ -0,0 +1,87 @@ +/* + * 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.scientificcms.publications.SciPublicationsConstants; + +import java.util.concurrent.Flow.Publisher; + + +/** + * + * @author Jens Pelzetter + */ +public class PublicationWithPublisherSetPublisherForm + extends BasicItemForm + implements FormInitListener, FormProcessListener { + + private PublisherSearchWidget publisherSearch; + private final String PUBLISHER_SEARCH = "setPublisher"; + + public PublicationWithPublisherSetPublisherForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + super( + "PublicationWithPublisherSetPublisher", + itemModel, + selectedLangParam + ); + } + + @Override + public void addWidgets() { + + publisherSearch = new PublisherSearchWidget(PUBLISHER_SEARCH); + publisherSearch.setLabel( + new GlobalizedMessage( + "publications.ui.with_publisher.publisher", + SciPublicationsConstants.BUNDLE + ) + ); + add(publisherSearch); + } + + @Override + public void init(final FormSectionEvent fse) throws FormProcessException { + final PageState state = fse.getPageState(); + + setVisible(state, true); + } + + @Override + public void process(final FormSectionEvent fse) + throws FormProcessException { + final FormData data = fse.getFormData(); + final PageState state = fse.getPageState(); + final PublicationWithPublisherItem publication = + (PublicationWithPublisherItem) getItemSelectionModel(). + getSelectedObject(state); + + if (this.getSaveCancelSection().getSaveButton().isSelected(state)) { + final Publisher publisher = (Publisher) data.get(PUBLISHER_SEARCH); + + publication.setPublisher(publisher); + itemSearch.publishCreatedItem(data, publisher); + } + + init(fse); + } + + + +} 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 new file mode 100644 index 0000000..1a03b62 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/PublicationWithPublisherSetPublisherStep.java @@ -0,0 +1,58 @@ +/* + * 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 PublicationWithPublisherSetPublisherStep extends SimpleEditStep { + + private String SET_PUBLICATION_PUBLISHER_STEP + = "setPublicationPublisherStep"; + + public PublicationWithPublisherSetPublisherStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + this(itemModel, parent, selectedLangParam, null); + } + + public PublicationWithPublisherSetPublisherStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParameter, + final String prefix) { + super(itemModel, parent, selectedLangParameter, prefix); + + final BasicItemForm setPublisherForm + = new PublicationWithPublisherSetPublisherForm( + itemModel); + add(SET_PUBLICATION_PUBLISHER_STEP, + new GlobalizedMessage( + "publications.ui.with_publisher.setPublisher", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess(setPublisherForm, itemModel), + setPublisherForm.getSaveCancelSection().getCancelButton()); + + final PublicationWithPublisherSetPublisherSheet sheet + = new PublicationWithPublisherSetPublisherSheet( + itemModel); + setDisplayComponent(sheet); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SciPublicationsWithPublisherController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SciPublicationsWithPublisherController.java new file mode 100644 index 0000000..398a61c --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/SciPublicationsWithPublisherController.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 org.scientificcms.publications.PublicationWithPublisher; +import org.scientificcms.publications.PublicationWithPublisherRepository; +import org.scientificcms.publications.Publisher; +import org.scientificcms.publications.PublisherManager; +import org.scientificcms.publications.PublisherRepository; + +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 SciPublicationsWithPublisherController { + + private static final long serialVersionUID = 1L; + + public static final String ISBN10 = "isbn10"; + + public static final String ISBN13 = "isbn13"; + + public static final String VOLUME = "volume"; + + public static final String NUMBER_OF_VOLUMES = "numberOfVolumes"; + + public static final String NUMBER_OF_PAGES = "numberOfPages"; + + public static final String EDITION = "edition"; + + @Inject + private SciPublicationsController publicationsController; + + @Inject + private PublicationWithPublisherRepository publicationRepository; + + @Inject + private PublisherManager publisherManager; + + @Inject + private PublisherRepository publisherRepository; + + @Transactional(Transactional.TxType.REQUIRED) + public void savePublication(final long publicationId, + final Locale selectedLocale, + final Map data) { + publicationsController.savePublication(publicationId, selectedLocale, + data); + + final PublicationWithPublisher publication = publicationRepository + .findById(publicationId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No PublicationWithPublisher with ID %d found.", + publicationId + ) + ) + ); + + final String isbn10 = (String) data.get(ISBN10); + final String isbn13 = (String) data.get(ISBN13); + final Integer volume = (Integer) data.get(VOLUME); + final Integer numberOfVolumes = (Integer) data.get(NUMBER_OF_VOLUMES); + final Integer numberOfPages = (Integer) data.get(NUMBER_OF_PAGES); + final String edition = (String) data.get(EDITION); + + publication.setIsbn10(isbn10); + publication.setIsbn13(isbn13); + publication.setVolume(volume); + publication.setNumberOfVolumes(numberOfVolumes); + publication.setNumberOfPages(numberOfPages); + publication.getEdition().addValue(selectedLocale, edition); + + publicationRepository.save(publication); + } + + public void setPublisher(final long publicationId, final long publisherId) { + + final PublicationWithPublisher publication = publicationRepository + .findById(publicationId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No PublicationWithPublisher with ID %d found.", + publicationId + ) + ) + ); + + final Publisher publisher = publisherRepository + .findById(publisherId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No Publisher with ID %d found.", publisherId) + ) + ); + + publisherManager.addPublicationToPublisher(publication, publisher); + + } + + public void unsetPublisher( + final long publicationId, final long publisherId + ) { + final PublicationWithPublisher publication = publicationRepository + .findById(publicationId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No PublicationWithPublisher with ID %d found.", + publicationId + ) + ) + ); + + final Publisher publisher = publisherRepository + .findById(publisherId) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No Publisher with ID %d found.", publisherId) + ) + ); + + publisherManager.removePublicationFromPublisher(publication, publisher); + } + +}