diff --git a/sci-publications/src/main/java/org/scientificcms/publications/Monograph.java b/sci-publications/src/main/java/org/scientificcms/publications/Monograph.java index 9f951fb..988d6e4 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/Monograph.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/Monograph.java @@ -33,7 +33,7 @@ public class Monograph extends PublicationWithPublisher { return reviewed; } - public void setReviewed(Boolean reviewed) { + public void setReviewed(final Boolean reviewed) { this.reviewed = reviewed; } diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/AuthorsTableRow.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/AuthorsTableRow.java similarity index 94% rename from sci-publications/src/main/java/org/scientificcms/publications/ui/assets/AuthorsTableRow.java rename to sci-publications/src/main/java/org/scientificcms/publications/ui/AuthorsTableRow.java index 026fdad..416e83e 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/AuthorsTableRow.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/AuthorsTableRow.java @@ -1,4 +1,4 @@ -package org.scientificcms.publications.ui.assets; +package org.scientificcms.publications.ui; /** * diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStep.java index a50a0f6..4b5fcae 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStep.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStep.java @@ -1,5 +1,6 @@ package org.scientificcms.publications.ui.assets; +import org.scientificcms.publications.ui.AuthorsTableRow; import org.libreccm.api.Identifier; import org.libreccm.api.IdentifierParser; import org.libreccm.l10n.GlobalizationHelper; diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStepModel.java index 3bfe95e..9de7e6b 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStepModel.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/CollectedVolumeAssetEditStepModel.java @@ -1,5 +1,6 @@ package org.scientificcms.publications.ui.assets; +import org.scientificcms.publications.ui.AuthorsTableRow; import org.librecms.assets.Person; import org.librecms.ui.contentsections.documents.CmsEditorLocaleVariantRow; import org.scientificcms.publications.assets.PublisherAsset; diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStep.java index 50c50ae..eabb6c8 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStep.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStep.java @@ -1,5 +1,6 @@ package org.scientificcms.publications.ui.assets; +import org.scientificcms.publications.ui.AuthorsTableRow; import org.libreccm.api.Identifier; import org.libreccm.api.IdentifierParser; import org.libreccm.l10n.GlobalizationHelper; diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStepModel.java index db7f022..2cdfdda 100644 --- a/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStepModel.java +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/assets/ProceedingsAssetEditStepModel.java @@ -1,5 +1,6 @@ package org.scientificcms.publications.ui.assets; +import org.scientificcms.publications.ui.AuthorsTableRow; import org.librecms.assets.Organization; import org.librecms.assets.Person; import org.librecms.ui.contentsections.documents.CmsEditorLocaleVariantRow; diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationItemCreateStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationItemCreateStep.java new file mode 100644 index 0000000..0c06ae5 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationItemCreateStep.java @@ -0,0 +1,282 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package org.scientificcms.publications.ui.contenttypes; + +import org.libreccm.l10n.GlobalizationHelper; +import org.libreccm.security.AuthorizationRequired; +import org.libreccm.workflow.Workflow; +import org.librecms.contentsection.ContentItemManager; +import org.librecms.contentsection.ContentItemRepository; +import org.librecms.contenttypes.Event; +import org.librecms.ui.contentsections.documents.AbstractMvcDocumentCreateStep; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.PublicationRepository; +import org.scientificcms.publications.contenttypes.PublicationItem; +import org.scientificcms.publications.ui.SciPublicationsUiConstants; + +import java.util.Locale; +import java.util.Map; +import java.util.Optional; + +import javax.enterprise.context.Dependent; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + * @param Type of item. + * @param

Type of publication + */ +@Dependent +public abstract class AbstractPublicationItemCreateStep, P extends Publication> + extends AbstractMvcDocumentCreateStep { + + private static final String FORM_PARAM_NAME = "name"; + + private static final String FORM_PARAM_TITLE = "title"; + + private static final String FORM_PARAM_SHORT_DESCRIPTION + = "shortDescription"; + + private static final String FORM_PARAM_INITIAL_LOCALE = "locale"; + + private static final String FORM_PARAM_SELECTED_WORKFLOW = "workflow"; + + @Inject + private GlobalizationHelper globalizationHelper; + + @Inject + private ContentItemManager itemManager; + + @Inject + private ContentItemRepository itemRepo; + + @Inject + private PublicationRepository publicationRepo; + + /** + * The name of the publication item. + */ + private String name; + + /** + * The title of the publication. + */ + private String title; + + /** + * Short description of the publication. + */ + private String shortDescription; + + /** + * The initial local of the monograph item. + */ + private String initialLocale; + + /** + * The workflow to use for the new monograph item. + */ + private String selectedWorkflow; + + @Override + public String getBundle() { + return SciPublicationsUiConstants.BUNDLE; + } + + public String getName() { + return name; + } + + public String getTitle() { + return title; + } + + public String getShortDescription() { + return shortDescription; + } + + public String getInitialLocale() { + return initialLocale; + } + + @Transactional(Transactional.TxType.REQUIRED) + public String getSelectedWorkflow() { + if (selectedWorkflow == null || selectedWorkflow.isEmpty()) { + return getContentSection() + .getContentTypes() + .stream() + .filter( + type -> type.getContentItemClass().equals( + Event.class.getName() + ) + ) + .findAny() + .map(type -> type.getDefaultWorkflow()) + .map( + workflow -> globalizationHelper.getValueFromLocalizedString( + workflow.getName() + ) + ) + .orElse(""); + } else { + return selectedWorkflow; + } + } + + /** + * The subclass of the {@link PublicationItem} to use. + * + * @return The subclass of the {@link PublicationItem} to use. + */ + protected abstract Class getPublicationItemClass(); + + /** + * Creates the publication entity to use. + * + * @return The publication entity to use. + */ + protected abstract P createPublication(); + + /** + * The name of the edit step to show after the publication item was created + * successfully, without the leading @. + * + * @return The name of the edit step to show after the item was created + * successfully. + */ + protected abstract String getEditStepName(); + + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + @Override + public String createItem(final Map formParams) { + if (!formParams.containsKey(FORM_PARAM_NAME) + || formParams.get(FORM_PARAM_NAME) == null + || formParams.get(FORM_PARAM_NAME).length == 0) { + addMessage( + "danger", + globalizationHelper + .getLocalizedTextsUtil(getBundle()) + .getText("createstep.name.error.missing") + ); + return showCreateStep(); + } + + name = formParams.get(FORM_PARAM_NAME)[0]; + if (!name.matches("^([a-zA-Z0-9_-]*)$")) { + addMessage( + "danger", + globalizationHelper + .getLocalizedTextsUtil(getBundle()) + .getText("createstep.name.error.invalid") + ); + return showCreateStep(); + } + + if (!formParams.containsKey(FORM_PARAM_TITLE) + || formParams.get(FORM_PARAM_TITLE) == null + || formParams.get(FORM_PARAM_TITLE).length == 0) { + addMessage( + "danger", + globalizationHelper + .getLocalizedTextsUtil(getBundle()) + .getText("createstep.title.error.missing") + ); + return showCreateStep(); + } + title = formParams.get(FORM_PARAM_TITLE)[0]; + + if (formParams.containsKey(FORM_PARAM_SHORT_DESCRIPTION) + && formParams.get(FORM_PARAM_SHORT_DESCRIPTION) != null + && formParams.get(FORM_PARAM_SHORT_DESCRIPTION).length > 0) { + shortDescription = formParams.get(FORM_PARAM_SHORT_DESCRIPTION)[0]; + } + + if (!formParams.containsKey(FORM_PARAM_INITIAL_LOCALE) + || formParams.get(FORM_PARAM_INITIAL_LOCALE) == null + || formParams.get(FORM_PARAM_INITIAL_LOCALE).length == 0) { + addMessage( + "danger", + globalizationHelper.getLocalizedTextsUtil( + getBundle() + ).getText("createstep.initial_locale.error.missing") + ); + return showCreateStep(); + } + final Locale locale = new Locale( + formParams.get(FORM_PARAM_INITIAL_LOCALE)[0] + ); + + if (!formParams.containsKey(FORM_PARAM_SELECTED_WORKFLOW) + || formParams.get(FORM_PARAM_SELECTED_WORKFLOW) == null + || formParams.get(FORM_PARAM_SELECTED_WORKFLOW).length == 0) { + addMessage( + "danger", + globalizationHelper.getLocalizedTextsUtil( + getBundle() + ).getText("createstep.workflow.none_selected") + ); + return showCreateStep(); + } + selectedWorkflow = formParams.get(FORM_PARAM_SELECTED_WORKFLOW)[0]; + + final Optional workflowResult = getContentSection() + .getWorkflowTemplates() + .stream() + .filter(template -> template.getUuid().equals(selectedWorkflow)) + .findAny(); + + if (!workflowResult.isPresent()) { + addMessage( + "danger", + globalizationHelper.getLocalizedTextsUtil( + getBundle() + ).getText("createstep.workflow.error.not_available") + ); + return showCreateStep(); + } + + if (!getMessages().isEmpty()) { + return showCreateStep(); + } + + final T item = itemManager.createContentItem( + name, + getContentSection(), + getFolder(), + workflowResult.get(), + getPublicationItemClass(), + locale + ); + + final P publication = createPublication(); + + publication.getTitle().putValue(locale, title); + if (shortDescription != null) { + publication + .getShortDescription() + .putValue(locale, shortDescription); + } + + publicationRepo.save(publication); + + item.getTitle().putValue(locale, title); + item.getDescription().putValue(locale, shortDescription); + item.setPublication(publication); + + itemRepo.save(item); + + return String.format( + "redirect:/%s/documents/%s/%s/@%s", + getContentSectionLabel(), + getFolderPath(), + name, + getEditStepName() + ); + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationPropertiesStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationPropertiesStep.java new file mode 100644 index 0000000..2f76f74 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationPropertiesStep.java @@ -0,0 +1,16 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.contenttypes.PublicationItem; + +/** + * + * @author Jens Pelzetter + * @param Subtype of {@link PublicationAsset}. + * @param

Subtype of {@link Publication} + */ +public abstract class AbstractPublicationPropertiesStep, P extends Publication> + extends AbstractMvcAuthoringStep { + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationWithPublisherItemCreateStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationWithPublisherItemCreateStep.java new file mode 100644 index 0000000..90ec239 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationWithPublisherItemCreateStep.java @@ -0,0 +1,17 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.scientificcms.publications.PublicationWithPublisher; +import org.scientificcms.publications.contenttypes.PublicationWithPublisherItem; + +/** + * + * @author Jens Pelzetter + * @param Subclass of {@link PublicationWithPublisherItem} + * @param

Subclass of {@link PublicationWithPublisher} + */ +public abstract class AbstractPublicationWithPublisherItemCreateStep, P extends PublicationWithPublisher> +extends AbstractPublicationItemCreateStep { + + + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationWithPublisherPropertiesStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationWithPublisherPropertiesStep.java new file mode 100644 index 0000000..998f70c --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/AbstractPublicationWithPublisherPropertiesStep.java @@ -0,0 +1,16 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.contenttypes.PublicationItem; + +/** + * + * @author Jens Pelzetter + * @param Subtype of {@link PublicationWithPublisherItem} + * @param

Subtype of {@link PublicationWithPublisher}. + */ +public abstract class AbstractPublicationWithPublisherPropertiesStep, P extends Publication> + extends AbstractMvcAuthoringStep { + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/EditionStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/EditionStepModel.java new file mode 100644 index 0000000..bab3034 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/EditionStepModel.java @@ -0,0 +1,72 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.librecms.ui.contentsections.documents.CmsEditorLocaleVariantRow; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsEditionStepModel") +public class EditionStepModel { + + private boolean canEdit; + + private Map editionValues; + + private List variants; + + private List unusedLocales; + + private String selectedLocale; + + public Map getEditionValues() { + return Collections.unmodifiableMap(editionValues); + } + + protected void setEditionValues(final Map editionValues) { + this.editionValues = new HashMap<>(editionValues); + } + + public List getVariants() { + return Collections.unmodifiableList(variants); + } + + protected void setVariants(final List variants) { + this.variants = new ArrayList<>(variants); + } + + public List getUnusedLocales() { + return Collections.unmodifiableList(unusedLocales); + } + + protected void setUnusedLocales(final List unusedLocales) { + this.unusedLocales = new ArrayList<>(unusedLocales); + } + + public String getSelectedLocale() { + return selectedLocale; + } + + protected void setSelectedLocale(final String selectedLocale) { + this.selectedLocale = selectedLocale; + } + + public boolean getCanEdit() { + return canEdit; + } + + protected void setCanEdit(final boolean canEdit) { + this.canEdit = canEdit; + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographItemCreateStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographItemCreateStep.java new file mode 100644 index 0000000..2ed9568 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographItemCreateStep.java @@ -0,0 +1,51 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.libreccm.l10n.GlobalizationHelper; +import org.scientificcms.publications.Monograph; +import org.scientificcms.publications.contenttypes.MonographItem; + +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +public class MonographItemCreateStep extends AbstractPublicationItemCreateStep { + + @Inject + private GlobalizationHelper globalizationHelper; + + @Override + public String getDocumentType() { + return MonographItem.class.getName(); + } + + @Override + public String getDescription() { + return globalizationHelper + .getLocalizedTextsUtil(getBundle()) + .getText("monographitem.createstep.description"); + } + + @Override + public String showCreateStep() { + return "org/scientificccms/contenttypes/ui/monograph/create-monograph.xhtml"; + } + + @Override + public Class getPublicationItemClass() { + return MonographItem.class; + } + + @Override + public Monograph createPublication() { + return new Monograph(); + } + + @Override + protected String getEditStepName() { + return "monograph-basicproperties"; + } + + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographPropertiesStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographPropertiesStep.java new file mode 100644 index 0000000..f2b981d --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographPropertiesStep.java @@ -0,0 +1,37 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.librecms.contenttypes.Event; +import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef; +import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; +import org.librecms.ui.contenttypes.event.EventStepsConstants; +import org.scientificcms.publications.Monograph; +import org.scientificcms.publications.contenttypes.MonographItem; + +import javax.enterprise.context.RequestScoped; +import javax.mvc.Controller; +import javax.ws.rs.Path; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Path(MvcAuthoringSteps.PATH_PREFIX + "monograph-basicproperties") +@Controller +@MvcAuthoringStepDef( + bundle = EventStepsConstants.BUNDLE, + descriptionKey = "monograph.authoringsteps.basicproperties.description", + labelKey = "monograph.authoringsteps.basicproperties.label", + supportedDocumentType = MonographItem.class +) + +public class MonographPropertiesStep extends AbstractPublicationWithPublisherPropertiesStep{ + + @Override + public Class getStepClass() { + return MonographPropertiesStep.class; + } + + + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographPropertiesStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographPropertiesStepModel.java new file mode 100644 index 0000000..a75805f --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/MonographPropertiesStepModel.java @@ -0,0 +1,24 @@ +package org.scientificcms.publications.ui.contenttypes; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsMonographPropertiesStepModel") +public class MonographPropertiesStepModel { + + private boolean reviewed; + + public boolean isReviewed() { + return reviewed; + } + + public void setReviewed(final boolean reviewed) { + this.reviewed = reviewed; + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationAbstractStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationAbstractStepModel.java new file mode 100644 index 0000000..a8d7618 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationAbstractStepModel.java @@ -0,0 +1,72 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.librecms.ui.contentsections.documents.CmsEditorLocaleVariantRow; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsPublicationAbstractStepModel") +public class PublicationAbstractStepModel { + + private boolean canEdit; + + private Map abstractValues; + + private List variants; + + private List unusedLocales; + + private String selectedLocale; + + public Map getAbstractValues() { + return Collections.unmodifiableMap(abstractValues); + } + + protected void setAbstractValues(final Map abstractValues) { + this.abstractValues = new HashMap<>(abstractValues); + } + + public List getVariants() { + return Collections.unmodifiableList(variants); + } + + protected void setVariants(final List variants) { + this.variants = new ArrayList<>(variants); + } + + public List getUnusedLocales() { + return Collections.unmodifiableList(unusedLocales); + } + + protected void setUnusedLocales(final List unusedLocales) { + this.unusedLocales = new ArrayList<>(unusedLocales); + } + + public String getSelectedLocales() { + return selectedLocale; + } + + protected void setSelectedLocale(final String selectedLocale) { + this.selectedLocale = selectedLocale; + } + + public boolean getCanEdit() { + return canEdit; + } + + protected void setCanEdit(final boolean canEdit) { + this.canEdit = canEdit; + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationAbstractStepResources.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationAbstractStepResources.java new file mode 100644 index 0000000..d333cc8 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationAbstractStepResources.java @@ -0,0 +1,132 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.librecms.contentsection.ContentItem; +import org.librecms.contentsection.ContentItemRepository; +import org.librecms.contentsection.ContentSection; +import org.librecms.ui.contentsections.ContentSectionsUi; +import org.librecms.ui.contentsections.ItemPermissionChecker; +import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.contenttypes.PublicationItem; + +import java.util.Locale; +import java.util.StringTokenizer; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; +import javax.ws.rs.ForbiddenException; +import javax.ws.rs.GET; +import javax.ws.rs.NotFoundException; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Path(MvcAuthoringSteps.PATH_PREFIX + "publication-abstract-resources") +public class PublicationAbstractStepResources { + + @Inject + private ContentItemRepository itemRepo; + + @Inject + private ContentSectionsUi sectionsUi; + + @Inject + private ItemPermissionChecker itemPermissionChecker; + + @GET + @Path("/variants/wordcount/{locale}") + @Produces(MediaType.TEXT_HTML) + @Transactional(Transactional.TxType.REQUIRED) + public String getWordCount( + @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) + final String sectionIdentifier, + @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME) + final String documentPathParam, + @PathParam("locale") final String localeParam + ) { + final ContentSection contentSection = sectionsUi + .findContentSection(sectionIdentifier) + .orElseThrow( + () -> new NotFoundException() + ); + + final ContentItem document = itemRepo + .findByPath(contentSection, documentPathParam) + .orElseThrow( + () -> new NotFoundException() + ); + + if (!(document instanceof PublicationItem)) { + throw new NotFoundException(); + } + + final PublicationItem item = (PublicationItem) document; + if (itemPermissionChecker.canEditItem(item)) { + final Publication publication = item.getPublication(); + + final String text = publication + .getPublicationAbstract() + .getValue(new Locale(localeParam)); + final Document jsoupDoc = Jsoup.parseBodyFragment(text); + final long result = new StringTokenizer( + jsoupDoc.body().text() + ).countTokens(); + return Long.toString(result); + } else { + throw new ForbiddenException(); + } + } + + @GET + @Path("/variants/{locale}") + @Produces(MediaType.TEXT_HTML) + @Transactional(Transactional.TxType.REQUIRED) + public String viewAbstractValue( + @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) + final String sectionIdentifier, + @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME) + final String documentPathParam, + @PathParam("locale") final String localeParam + ) { + final ContentSection contentSection = sectionsUi + .findContentSection(sectionIdentifier) + .orElseThrow( + () -> new NotFoundException() + ); + + final ContentItem document = itemRepo + .findByPath(contentSection, documentPathParam) + .orElseThrow( + () -> new NotFoundException() + ); + + if (!(document instanceof PublicationItem)) { + throw new NotFoundException(); + } + + if (!(document instanceof PublicationItem)) { + throw new NotFoundException(); + } + + final PublicationItem item = (PublicationItem) document; + if (itemPermissionChecker.canEditItem(item)) { + final Publication publication = item.getPublication(); + + return publication + .getPublicationAbstract() + .getValue(new Locale(localeParam)); + } else { + throw new ForbiddenException(); + } + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationExtendedPropertiesStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationExtendedPropertiesStepModel.java new file mode 100644 index 0000000..32e3f9a --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationExtendedPropertiesStepModel.java @@ -0,0 +1,58 @@ +package org.scientificcms.publications.ui.contenttypes; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsPublicationExtendedPropertiesStepModel") +public class PublicationExtendedPropertiesStepModel { + + private boolean peerReviewed; + + private int yearFirstPublished; + + private String languageOfPublication; + + private List volumeInSeries; + + public boolean isPeerReviewed() { + return peerReviewed; + } + + public void setPeerReviewed(final boolean peerReviewed) { + this.peerReviewed = peerReviewed; + } + + public int getYearFirstPublished() { + return yearFirstPublished; + } + + public void setYearFirstPublished(final int yearFirstPublished) { + this.yearFirstPublished = yearFirstPublished; + } + + public String getLanguageOfPublication() { + return languageOfPublication; + } + + public void setLanguageOfPublication(final String languageOfPublication) { + this.languageOfPublication = languageOfPublication; + } + + public List getVolumeInSeries() { + return Collections.unmodifiableList(volumeInSeries); + } + + public void setVolumeInSeries(final List volumeInSeries) { + this.volumeInSeries = new ArrayList<>(volumeInSeries); + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationMiscStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationMiscStepModel.java new file mode 100644 index 0000000..0fed410 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationMiscStepModel.java @@ -0,0 +1,71 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.librecms.ui.contentsections.documents.CmsEditorLocaleVariantRow; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsPublicationMiscStepModel") +public class PublicationMiscStepModel { + + private boolean canEdit; + + private Map miscValues; + + private List variants; + + private List unusedLocales; + + private String selectedLocale; + + public Map getMiscValues() { + return Collections.unmodifiableMap(miscValues); + } + + protected void setMiscValues(final Map miscValues) { + this.miscValues = miscValues; + } + + public List getVariants() { + return Collections.unmodifiableList(variants); + } + + protected void setVariants(final List variants) { + this.variants = variants; + } + + public List getUnusedLocales() { + return Collections.unmodifiableList(unusedLocales); + } + + protected void setUnusedLocales(final List unusedLocales) { + this.unusedLocales = new ArrayList<>(unusedLocales); + } + + public String getSelectedLocale() { + return selectedLocale; + } + + protected void setSelectedLocale(final String selectedLocale) { + this.selectedLocale = selectedLocale; + } + + public boolean getCanEdit() { + return canEdit; + } + + protected void setCanEdit(final boolean canEdit) { + this.canEdit = canEdit; + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationMiscStepResources.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationMiscStepResources.java new file mode 100644 index 0000000..0812041 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationMiscStepResources.java @@ -0,0 +1,124 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.librecms.contentsection.ContentItem; +import org.librecms.contentsection.ContentItemRepository; +import org.librecms.contentsection.ContentSection; +import org.librecms.ui.contentsections.ContentSectionsUi; +import org.librecms.ui.contentsections.ItemPermissionChecker; +import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; +import org.scientificcms.publications.Publication; +import org.scientificcms.publications.contenttypes.PublicationItem; + +import java.util.Locale; +import java.util.StringTokenizer; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; +import javax.ws.rs.ForbiddenException; +import javax.ws.rs.GET; +import javax.ws.rs.NotFoundException; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Path(MvcAuthoringSteps.PATH_PREFIX + "publication-misc-resources") +public class PublicationMiscStepResources { + + @Inject + private ContentItemRepository itemRepo; + + @Inject + private ContentSectionsUi sectionsUi; + + @Inject + private ItemPermissionChecker itemPermissionChecker; + + @GET + @Path("/variants/wordcount/{locale}") + @Produces(MediaType.TEXT_HTML) + @Transactional(Transactional.TxType.REQUIRED) + public String getWordCount( + @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) + final String sectionIdentifier, + @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME) + final String documentPathParam, + @PathParam("locale") final String localeParam + ) { + final ContentSection contentSection = sectionsUi + .findContentSection(sectionIdentifier) + .orElseThrow( + () -> new NotFoundException() + ); + + final ContentItem document = itemRepo + .findByPath(contentSection, documentPathParam) + .orElseThrow( + () -> new NotFoundException() + ); + + if (!(document instanceof PublicationItem)) { + throw new NotFoundException(); + } + + final PublicationItem item = (PublicationItem) document; + if (itemPermissionChecker.canEditItem(item)) { + final Publication publication = item.getPublication(); + final String misc = publication + .getMisc() + .getValue(new Locale(localeParam)); + final Document jsoupDoc = Jsoup.parseBodyFragment(misc); + final long result = new StringTokenizer( + jsoupDoc.body().text() + ).countTokens(); + return Long.toString(result); + } else { + throw new ForbiddenException(); + } + } + + @GET + @Path("/variants/{locale}") + @Produces(MediaType.TEXT_HTML) + @Transactional(Transactional.TxType.REQUIRED) + public String viewTextValue( + @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM) + final String sectionIdentifier, + @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME) + final String documentPathParam, + @PathParam("locale") final String localeParam + ) { + final ContentSection contentSection = sectionsUi + .findContentSection(sectionIdentifier) + .orElseThrow( + () -> new NotFoundException() + ); + + final ContentItem document = itemRepo + .findByPath(contentSection, documentPathParam) + .orElseThrow( + () -> new NotFoundException() + ); + + if (!(document instanceof PublicationItem)) { + throw new NotFoundException(); + } + + final PublicationItem item = (PublicationItem) document; + if (itemPermissionChecker.canEditItem(item)) { + final Publication publication = item.getPublication(); + return publication.getMisc().getValue(new Locale(localeParam)); + } else { + throw new ForbiddenException(); + } + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationPropertiesStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationPropertiesStepModel.java new file mode 100644 index 0000000..3621683 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationPropertiesStepModel.java @@ -0,0 +1,88 @@ +package org.scientificcms.publications.ui.contenttypes; + +import org.scientificcms.publications.ui.AuthorsTableRow; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsPublicationPropertiesStepModel") +public class PublicationPropertiesStepModel { + + private String name; + + private Map titleValues; + + private List unusedTitleLocales; + + private Map shortDecriptionValues; + + private List unusedShortDescriptionLocales; + + private List authors; + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public Map getTitleValues() { + return Collections.unmodifiableMap(titleValues); + } + + public void setTitleValues(final Map titleValues) { + this.titleValues = new HashMap<>(titleValues); + } + + public List getUnusedTitleLocales() { + return Collections.unmodifiableList(unusedTitleLocales); + } + + public void setUnusedTitleLocales(final List unusedTitleLocales) { + this.unusedTitleLocales = new ArrayList<>(unusedTitleLocales); + } + + public Map getShortDecriptionValues() { + return Collections.unmodifiableMap(shortDecriptionValues); + } + + public void setShortDecriptionValues( + final Map shortDecriptionValues + ) { + this.shortDecriptionValues = new HashMap<>(shortDecriptionValues); + } + + public List getUnusedShortDescriptionLocales() { + return Collections.unmodifiableList(unusedShortDescriptionLocales); + } + + public void setUnusedShortDescriptionLocales( + final List unusedShortDescriptionLocales + ) { + this.unusedShortDescriptionLocales = new ArrayList<>( + unusedShortDescriptionLocales + ); + } + + public List getAuthors() { + return Collections.unmodifiableList(authors); + } + + public void setAuthors(final List authors) { + this.authors = new ArrayList<>(authors); + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationWithPublisherExtentedPropertiesStep.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationWithPublisherExtentedPropertiesStep.java new file mode 100644 index 0000000..0f4e80c --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationWithPublisherExtentedPropertiesStep.java @@ -0,0 +1,64 @@ +package org.scientificcms.publications.ui.contenttypes; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsPublicationWithPublisherExtendedPropertiesStep") +public class PublicationWithPublisherExtentedPropertiesStep { + + private String isbn10; + + private String isbn13; + + private int volume; + + private int numberOfVolumes; + + private int numberOfPages; + + public String getIsbn10() { + return isbn10; + } + + public void setIsbn10(final String isbn10) { + this.isbn10 = isbn10; + } + + public String getIsbn13() { + return isbn13; + } + + public void setIsbn13(final String isbn13) { + this.isbn13 = isbn13; + } + + public int getVolume() { + return volume; + } + + public void setVolume(final int volume) { + this.volume = volume; + } + + public int getNumberOfVolumes() { + return numberOfVolumes; + } + + public void setNumberOfVolumes(final int numberOfVolumes) { + this.numberOfVolumes = numberOfVolumes; + } + + public int getNumberOfPages() { + return numberOfPages; + } + + public void setNumberOfPages(final int numberOfPages) { + this.numberOfPages = numberOfPages; + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationWithPublisherPropertiesStepModel.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationWithPublisherPropertiesStepModel.java new file mode 100644 index 0000000..6e274a9 --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/PublicationWithPublisherPropertiesStepModel.java @@ -0,0 +1,44 @@ +package org.scientificcms.publications.ui.contenttypes; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("SciCmsPublicationWithPublisherPropertiesStepModel") +public class PublicationWithPublisherPropertiesStepModel { + + private String publisherUuid; + + private String publisherName; + + private String publisherPlace; + + public String getPublisherUuid() { + return publisherUuid; + } + + public void setPublisherUuid(final String publisherUuid) { + this.publisherUuid = publisherUuid; + } + + public String getPublisherName() { + return publisherName; + } + + public void setPublisherName(final String publisherName) { + this.publisherName = publisherName; + } + + public String getPublisherPlace() { + return publisherPlace; + } + + public void setPublisherPlace(final String publisherPlace) { + this.publisherPlace = publisherPlace; + } + +} diff --git a/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/VolumeInSeriesRow.java b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/VolumeInSeriesRow.java new file mode 100644 index 0000000..920287b --- /dev/null +++ b/sci-publications/src/main/java/org/scientificcms/publications/ui/contenttypes/VolumeInSeriesRow.java @@ -0,0 +1,49 @@ +package org.scientificcms.publications.ui.contenttypes; + +/** + * + * @author Jens Pelzetter + */ +public class VolumeInSeriesRow { + + private String volumeInSeriesUuid; + + private String seriesUuid; + + private String volumeInSeries; + + private String seriesTitle; + + public String getVolumeInSeriesUuid() { + return volumeInSeriesUuid; + } + + public void setVolumeInSeriesUuid(final String volumeInSeriesUuid) { + this.volumeInSeriesUuid = volumeInSeriesUuid; + } + + public String getSeriesUuid() { + return seriesUuid; + } + + public void setSeriesUuid(final String seriesUuid) { + this.seriesUuid = seriesUuid; + } + + public String getVolumeInSeries() { + return volumeInSeries; + } + + public void setVolumeInSeries(final String volumeInSeries) { + this.volumeInSeries = volumeInSeries; + } + + public String getSeriesTitle() { + return seriesTitle; + } + + public void setSeriesTitle(final String seriesTitle) { + this.seriesTitle = seriesTitle; + } + +} diff --git a/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle.properties b/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle.properties index c91d00c..e6fdd29 100644 --- a/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle.properties +++ b/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle.properties @@ -253,3 +253,4 @@ proceedings.editstep.shortdescription.remove.text=Are you sure to remove the fol proceedings.editstep.shortdescription.remove.title=Confirm removal of localized description proceedings.editstep.shortdescription.title=Description proceedings.editstep.properties.edit.submit=Save +monographitem.createstep.description=Create new monograph item. diff --git a/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle_de.properties b/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle_de.properties index 2de251d..aeaf5df 100644 --- a/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle_de.properties +++ b/sci-publications/src/main/resources/org/scientificcms/publications/ui/SciPublicationsBundle_de.properties @@ -253,3 +253,4 @@ proceedings.editstep.shortdescription.remove.text=Sind Sie sicher, dass Sie die proceedings.editstep.shortdescription.remove.title=Entfernen einer lokalisierten Beschreibung best\u00e4tigen proceedings.editstep.shortdescription.title=Beschreibung proceedings.editstep.properties.edit.submit=Speichern +monographitem.createstep.description=Legt ein neues Item f\u00fcr eine Monographie an.