diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsController.java new file mode 100644 index 0000000..dad38ca --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsController.java @@ -0,0 +1,117 @@ +/* + * 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.InProceedings; +import org.scientificcms.publications.Proceedings; +import org.scientificcms.publications.ProceedingsManager; +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 InProceedingsController { + + public static final String START_PAGE = "startPage"; + public static final String END_PAGE = "endPage"; + + @Inject + private ProceedingsManager proceedingsManager; + + @Inject + private PublicationRepository publicationRepository; + + @Transactional(Transactional.TxType.REQUIRED) + public void saveInProceedings( + final long inProceedingsId, + final Map data + ) { + final InProceedings inProceedings = publicationRepository + .findByIdAndType(inProceedingsId, InProceedings.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No InProceedings publication with ID %d found.", + inProceedingsId + ) + ) + ); + + if (data.containsKey(START_PAGE)) { + inProceedings.setStartPage((Integer) data.get(START_PAGE)); + } + + if (data.containsKey(END_PAGE)) { + inProceedings.setEndPage((Integer) data.get(END_PAGE)); + } + + publicationRepository.save(inProceedings); + } + + public void setProceedings( + final long inProceedingsId, final long proceedingsId + ) { + final InProceedings inProceedings = publicationRepository + .findByIdAndType(inProceedingsId, InProceedings.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No InProceedings publication with ID %d found.", + inProceedingsId + ) + ) + ); + + final Proceedings proccedings = publicationRepository + .findByIdAndType(proceedingsId, Proceedings.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No Proceedings with ID %d found", proceedingsId + ) + ) + ); + + proceedingsManager.addPaperToCollectedVolume(inProceedings, proccedings); + } + + public void unsetProcceedings( + final long inProceedingsId, final long proceedingsId + ) { + final InProceedings inProceedings = publicationRepository + .findByIdAndType(inProceedingsId, InProceedings.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No InProceedings publication with ID %d found.", + inProceedingsId + ) + ) + ); + + final Proceedings proccedings = publicationRepository + .findByIdAndType(proceedingsId, Proceedings.class) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No Proceedings with ID %d found", proceedingsId + ) + ) + ); + + proceedingsManager.removeArticleFromCollectedVolume( + inProceedings, proccedings); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java new file mode 100644 index 0000000..f1a9617 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java @@ -0,0 +1,64 @@ +/* + * 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 InProceedingsProceedingsStep extends SimpleEditStep { + + private static final String ADD_PROCEEDINGS_STEP = "addProceedings"; + + public InProceedingsProceedingsStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + this(itemModel, parent, selectedLangParam, null); + } + + public InProceedingsProceedingsStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam, + final String prefix) { + super(itemModel, parent, selectedLangParam, prefix); + + final BasicItemForm addProceedingsForm + = new InProceedingsProceedingsForm( + itemModel + ); + add( + ADD_PROCEEDINGS_STEP, + new GlobalizedMessage( + "publications.ui.inProceedings.addProceedings", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess( + addProceedingsForm, + itemModel + ), + addProceedingsForm.getSaveCancelSection().getCancelButton()); + + final InProceedingsProceedingsSheet sheet + = new InProceedingsProceedingsSheet( + itemModel + ); + setDisplayComponent(sheet); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java new file mode 100644 index 0000000..c714b21 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java @@ -0,0 +1,129 @@ +/* + * 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; + +import static com.arsdigita.cms.contenttypes.ui.PublicationPropertiesStep.*; + +/** + * + * @author Jens Pelzetter + */ +public class InProceedingsPropertiesStep + extends PublicationPropertiesStep { + + private final ItemSelectionModel itemModel; + private final StringParameter selectedLangParam; + + public InProceedingsPropertiesStep( + final ItemSelectionModel itemModel, + final AuthoringKitWizard parent, + final StringParameter selectedLangParam + ) { + super(itemModel, parent, selectedLangParam); + this.selectedLangParam = selectedLangParam; + this.itemModel = itemModel; + } + + public static Component getInProceedingsPropertySheet( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + final DomainObjectPropertySheet sheet + = (DomainObjectPropertySheet) PublicationWithPublisherPropertiesStep + .getPublicationPropertySheet( + itemModel, selectedLangParam + ); + + sheet.add( + new GlobalizedMessage( + "publications.ui.inproceedings.pages_from", + SciPublicationsConstants.BUNDLE + ), + InProceedingsController.START_PAGE + ); + + sheet.add( + new GlobalizedMessage( + "publications.ui.inproceedings.pages_to", + SciPublicationsConstants.BUNDLE + ), + InProceedingsController.END_PAGE); + + 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 InProceedingsPropertyForm( + itemModel, this + ); + + basicProperties.add( + EDIT_SHEET_NAME, + new GlobalizedMessage( + "publications.ui.inproceedings.edit_basic_sheet", + SciPublicationsConstants.BUNDLE + ), + new WorkflowLockedComponentAccess( + editBasicSheet, itemModel + ), + editBasicSheet.getSaveCancelSection().getCancelButton()); + + basicProperties.setDisplayComponent( + getInProceedingsPropertySheet(itemModel, selectedLangParam) + ); + + getSegmentedPanel().addSegment( + new Label( + new GlobalizedMessage( + "publications.ui.publications.basic_properties", + SciPublicationsConstants.BUNDLE + ) + ), + basicProperties); + } + + @Override + public void addSteps( + final ItemSelectionModel itemModel, final AuthoringKitWizard parent + ) { + super.addSteps(itemModel, parent); + + addStep( + new InProceedingsProceedingsStep( + itemModel, parent, selectedLangParam + ), + new GlobalizedMessage( + "publications.ui.inProceedings.proceedings", + SciPublicationsConstants.BUNDLE + ) + ); + } + +} diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertyForm.java new file mode 100644 index 0000000..607e9e6 --- /dev/null +++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertyForm.java @@ -0,0 +1,137 @@ +/* + * 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.InProceedings; +import org.scientificcms.publications.SciPublicationsConstants; +import org.scientificcms.publications.contenttypes.InProceedingsItem; + +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class InProceedingsPropertyForm extends PublicationPropertyForm + implements FormProcessListener, FormInitListener, FormSubmissionListener { + + public static final String ID = "InProceedingsEdit"; + + private InProceedingsPropertiesStep step; + + public InProceedingsPropertyForm( + final ItemSelectionModel itemModel, + final StringParameter selectedLangParam + ) { + this(itemModel, null, selectedLangParam); + } + + public InProceedingsPropertyForm( + final ItemSelectionModel itemModel, + final InProceedingsPropertiesStep step, + final StringParameter selectedLangParam + ) { + super(itemModel, step, selectedLangParam); + this.step = step; + addSubmissionListener(this); + } + + @Override + protected void addWidgets() { + + super.addWidgets(); + + final ParameterModel pagesFromParam = new IntegerParameter( + InProceedingsController.START_PAGE); + final TextField pagesFrom = new TextField(pagesFromParam); + pagesFrom.setLabel( + new GlobalizedMessage( + "publications.ui.inproceedings.pages_from", + SciPublicationsConstants.BUNDLE + ) + ); + add(pagesFrom); + + ParameterModel pagesToParam = new IntegerParameter( + InProceedingsController.END_PAGE + ); + final TextField pagesTo = new TextField(pagesToParam); + pagesTo.setLabel( + new GlobalizedMessage( + "publications.ui.inproceedings.pages_to", + SciPublicationsConstants.BUNDLE + ) + ); + add(pagesTo); + } + + @Override + public void init(final FormSectionEvent event) throws FormProcessException { + super.init(event); + + final FormData data = event.getFormData(); + final InProceedingsItem inProceedingsItem = (InProceedingsItem) super + .initBasicWidgets(event); + final InProceedings inProceedings = inProceedingsItem.getPublication(); + + data.put( + InProceedingsController.START_PAGE, inProceedings.getStartPage() + ); + data.put( + InProceedingsController.END_PAGE, inProceedings.getEndPage() + ); + } + + @Override + public void process(final FormSectionEvent event) + throws FormProcessException { + super.process(event); + + final FormData formData = event.getFormData(); + final PageState state = event.getPageState(); + final InProceedingsItem inProceedingsItem = (InProceedingsItem) super + .processBasicWidgets(event); + + if ((inProceedingsItem != null) + && getSaveCancelSection().getSaveButton().isSelected(state)) { + + final Map data = new HashMap<>(); + data.put( + InProceedingsController.START_PAGE, + formData.get(InProceedingsController.START_PAGE) + ); + data.put( + InProceedingsController.END_PAGE, + formData.get(InProceedingsController.END_PAGE) + ); + + final InProceedingsController controller = CdiUtil + .createCdiUtil() + .findBean(InProceedingsController.class); + + controller.saveInProceedings( + inProceedingsItem.getPublication().getPublicationId(), data + ); + } + } + +}