From 30a01f2df307a8675dfab6571746c845c8503387 Mon Sep 17 00:00:00 2001
From: Jens Pelzetter
Date: Tue, 28 Jun 2022 20:42:55 +0200
Subject: [PATCH] Bugfixes for editing publications
---
.../publications/PublicationRepository.java | 28 +-
.../contenttypes/PublicationItem.java | 20 +-
.../AbstractPublicationPropertiesStep.java | 60 ++--
...ublicationWithPublisherPropertiesStep.java | 25 +-
.../MonographExtendedPropertiesStep.java | 4 +-
.../contenttypes/MonographItemCreateStep.java | 2 +-
.../contenttypes/MonographPropertiesStep.java | 273 +++++++++++++++++-
.../PublicationPropertiesStepModel.java | 18 +-
...ationWithPublisherPropertiesStepModel.java | 8 +
.../contenttypes/ui/create-publication.xhtml | 3 +-
.../ui/edit-publication-with-publisher.xhtml | 56 ++--
.../contenttypes/ui/edit-publication.xhtml | 30 +-
.../contenttypes/Monograph.properties | 2 +-
.../contenttypes/Monograph_de.properties | 2 +
14 files changed, 405 insertions(+), 126 deletions(-)
create mode 100644 sci-publications/src/main/resources/org/scientificcms/publications/contenttypes/Monograph_de.properties
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java b/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java
index a6f2bda..c8827a2 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/PublicationRepository.java
@@ -11,9 +11,14 @@ import org.librecms.assets.Person;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
+import java.util.stream.Stream;
import javax.enterprise.context.RequestScoped;
import javax.persistence.NoResultException;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
/**
@@ -56,14 +61,21 @@ public class PublicationRepository
public Optional findByIdAndType(
final long publicationId, final Class type
) {
+ final CriteriaBuilder criteriaBuilder = getEntityManager()
+ .getCriteriaBuilder();
+ final CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(type);
+ final Root from = criteriaQuery.from(type);
+
+ criteriaQuery.where(
+ criteriaBuilder.equal(from.get("publicationId"), publicationId)
+ );
+
+ final TypedQuery query = getEntityManager().createQuery(
+ criteriaQuery
+ );
+
try {
- return Optional.of(
- getEntityManager()
- .createNamedQuery("Publication.findByIdAndType", type)
- .setParameter("publicationId", publicationId)
- .setParameter("type", type)
- .getSingleResult()
- );
+ return Optional.of(query.getSingleResult());
} catch (NoResultException ex) {
return Optional.empty();
}
@@ -109,7 +121,7 @@ public class PublicationRepository
.setParameter("title", title)
.getResultList();
}
-
+
public List findByType(final Class type) {
return getEntityManager()
.createNamedQuery("Publication.findByType", type)
diff --git a/sci-publications/src/main/java/org/scientificcms/publications/contenttypes/PublicationItem.java b/sci-publications/src/main/java/org/scientificcms/publications/contenttypes/PublicationItem.java
index 6d59eb6..77b7a43 100644
--- a/sci-publications/src/main/java/org/scientificcms/publications/contenttypes/PublicationItem.java
+++ b/sci-publications/src/main/java/org/scientificcms/publications/contenttypes/PublicationItem.java
@@ -21,7 +21,7 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
/**
* Base Item for Publications.
- *
+ *
* @author Jens Pelzetter
* @param
*/
@@ -31,19 +31,23 @@ import static org.scientificcms.publications.SciPublicationsConstants.*;
@NamedQueries({
@NamedQuery(
name = "PublicationItem.findForPublication",
- query = "SELECT i FROM PublicationItem i WHERE i.publication = :publication"
+ query
+ = "SELECT i FROM PublicationItem i WHERE i.publication = :publication"
)
})
public class PublicationItem extends ContentItem {
private static final long serialVersionUID = 1L;
- @OneToOne(cascade = {CascadeType.DETACH,
- CascadeType.MERGE,
- CascadeType.PERSIST,
- CascadeType.REFRESH},
- fetch = FetchType.LAZY,
- targetEntity = Publication.class
+ @OneToOne(
+ cascade = {
+ CascadeType.DETACH,
+ CascadeType.MERGE,
+ CascadeType.PERSIST,
+ CascadeType.REFRESH
+ },
+ fetch = FetchType.LAZY,
+ targetEntity = Publication.class
)
private T publication;
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
index f0cbbd9..5e1aebf 100644
--- 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
@@ -97,8 +97,23 @@ public abstract class AbstractPublicationPropertiesStep getPublicationClass();
+
protected P getPublication() {
- return getPublicationItem().getPublication();
+ final long publicationId = getPublicationItem()
+ .getPublication()
+ .getPublicationId();
+
+ return publicationRepo
+ .findByIdAndType(publicationId, getPublicationClass())
+ .orElseThrow(
+ () -> new IllegalArgumentException(
+ String.format(
+ "PublicationItem %s has no associated publication",
+ getPublicationItem().getUuid()
+ )
+ )
+ );
}
@Override
@@ -156,7 +171,7 @@ public abstract class AbstractPublicationPropertiesStep param.isBlank())
+ .filter(param -> !param.isBlank())
.filter(param -> param.matches("\\d*"))
.map(param -> Integer.parseInt(param))
.orElse(null);
@@ -324,9 +330,6 @@ public abstract class AbstractPublicationPropertiesStep publisherResult = Optional.ofNullable(
+ publication.getPublisher()
+ );
propertiesStepModel.setPublisherUuid(publication.getUuid());
- propertiesStepModel.setPublisherName(publisher.getName());
- propertiesStepModel.setPublisherPlace(publisher.getPlace());
+
+ publisherResult.ifPresent(
+ publisher -> propertiesStepModel.setPublisherName(
+ publisher.getName()
+ )
+ );
+ publisherResult.ifPresent(
+ publisher -> propertiesStepModel.setPublisherPlace(
+ publisher.getPlace()
+ )
+ );
}
+ @Transactional(Transactional.TxType.REQUIRED)
public String setPublisher(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@@ -150,6 +164,7 @@ public abstract class AbstractPublicationWithPublisherPropertiesStep getStepClass() {
return MonographPropertiesStep.class;
}
-
+
@Override
protected String getEditStepUrlFragment() {
return "monograph-basicproperties";
}
+ @Override
+ public Class getPublicationClass() {
+ return Monograph.class;
+ }
+
@Override
@Transactional(Transactional.TxType.REQUIRED)
protected void init() throws ContentSectionNotFoundException,
@@ -67,13 +75,262 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
super.init();
propertiesStepModel.setReviewed(
- getPublication().getReviewed()
+ Optional
+ .ofNullable(getPublication().getReviewed())
+ .orElse(false)
);
}
+ @GET
+ @Path("/")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String showStep(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath
+ ) {
+ return super.showStep(sectionIdentifier, documentPath);
+ }
+
+ @POST
+ @Path("/name")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String updateName(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @FormParam("name") @DefaultValue("")
+ final String name
+ ) {
+ return super.updateName(sectionIdentifier, documentPath, name);
+ }
+
+
+
+ @POST
+ @Path("/title/@add")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String addTitle(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @FormParam("locale") final String localeParam,
+ @FormParam("value") final String value
+ ) {
+ return super.addTitle(
+ sectionIdentifier,
+ documentPath,
+ localeParam,
+ value
+ );
+ }
+
+ @POST
+ @Path("/title/@edit/{locale}")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String editTitle(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @PathParam("locale") final String localeParam,
+ @FormParam("value") final String value
+ ) {
+ return super.editTitle(
+ sectionIdentifier,
+ documentPath,
+ localeParam,
+ value
+ );
+ }
+
+ @POST
+ @Path("/title/@remove/{locale}")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String removeTitle(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @PathParam("locale") final String localeParam
+ ) {
+ return super.removeTitle(sectionIdentifier, documentPath, localeParam);
+ }
+
+ @POST
+ @Path("/shortdescription/@add")
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String addShortDescription(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @FormParam("locale") final String localeParam,
+ @FormParam("value") final String value
+ ) {
+ return super.addShortDescription(
+ sectionIdentifier,
+ documentPath,
+ localeParam,
+ value
+ );
+ }
+
+ @POST
+ @Path("/shortdescription/@edit/{locale}")
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String editShortDescription(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @PathParam("locale") final String localeParam,
+ @FormParam("value") final String value
+ ) {
+ return super.editShortDescription(
+ sectionIdentifier,
+ documentPath,
+ localeParam,
+ value
+ );
+ }
+
+ @POST
+ @Path("/shortdescription/@remove/{locale}")
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String removeShortDescription(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @PathParam("locale") final String localeParam
+ ) {
+ return super.removeShortDescription(
+ sectionIdentifier,
+ documentPath,
+ localeParam
+ );
+ }
+
+ @POST
+ @Path("/authors")
+ @AuthorizationRequired
+ @Transactional
+ @Override
+ public String addAuthor(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @FormParam("authorIdentifier")
+ final String authorIdentifier,
+ @FormParam("editor")
+ final String editorParam
+ ) {
+ return super.addAuthor(
+ sectionIdentifier,
+ documentPath,
+ authorIdentifier,
+ editorParam
+ );
+ }
+
+ @POST
+ @Path("/authors/{authorshipUuid}")
+ @AuthorizationRequired
+ @Transactional
+ @Override
+ public String editAuthorship(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @PathParam("authorshipUuid")
+ final String authorshipUuid,
+ @FormParam("editor")
+ final String editorParam
+ ) {
+ return super.editAuthorship(
+ sectionIdentifier,
+ documentPath,
+ authorshipUuid,
+ editorParam
+ );
+ }
+
+ @POST
+ @Path("/authors/{authorshipUuid}/remove")
+ @AuthorizationRequired
+ @Transactional
+ @Override
+ public String removeAuthorship(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @PathParam("authorshipUuid")
+ final String authorshipUuid
+ ) {
+ return super.removeAuthorship(
+ sectionIdentifier,
+ documentPath,
+ authorshipUuid
+ );
+ }
+
+ @POST
+ @Path("/publisher")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String setPublisher(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath,
+ @FormParam("publisherIdentifier")
+ final String publisherIdentifier
+ ) {
+ return super.setPublisher(
+ sectionIdentifier,
+ documentPath,
+ publisherIdentifier
+ );
+ }
+
+ @POST
+ @Path("/publisher/@remove")
+ @AuthorizationRequired
+ @Transactional(Transactional.TxType.REQUIRED)
+ @Override
+ public String removePublisher(
+ @PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
+ final String sectionIdentifier,
+ @PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
+ final String documentPath
+ ) {
+ return super.removePublisher(sectionIdentifier, documentPath);
+ }
+
@Override
protected String getStepTemplatePath() {
- return "/org/scientificcms/contenttypes/monograph/ui/edit-monograph.xhtml";
+ return "org/scientificcms/contenttypes/ui/monograph/edit-monograph.xhtml";
}
@POST()
@@ -107,11 +364,11 @@ public class MonographPropertiesStep extends AbstractPublicationWithPublisherPro
getPublication().setReviewed(
Optional
- .ofNullable(reviewedParam)
- .map(param -> "true".equals(param) || "on".equals("param"))
- .orElse(false)
+ .ofNullable(reviewedParam)
+ .map(param -> "true".equals(param) || "on".equals(param))
+ .orElse(false)
);
-
+
return buildRedirectPathForStep();
} else {
return documentUi.showAccessDenied(
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
index bc00411..b515c99 100644
--- 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
@@ -27,9 +27,9 @@ public class PublicationPropertiesStepModel {
private List unusedTitleLocales;
- private int yearOfPublication;
+ private Integer yearOfPublication;
- private Map shortDecriptionValues;
+ private Map shortDescriptionValues;
private List unusedShortDescriptionLocales;
@@ -69,22 +69,22 @@ public class PublicationPropertiesStepModel {
this.unusedTitleLocales = new ArrayList<>(unusedTitleLocales);
}
- public int getYearOfPublication() {
+ public Integer getYearOfPublication() {
return yearOfPublication;
}
- public void setYearOfPublication(final int yearOfPublication) {
+ public void setYearOfPublication(final Integer yearOfPublication) {
this.yearOfPublication = yearOfPublication;
}
- public Map getShortDecriptionValues() {
- return Collections.unmodifiableMap(shortDecriptionValues);
+ public Map getShortDescriptionValues() {
+ return Collections.unmodifiableMap(shortDescriptionValues);
}
- public void setShortDecriptionValues(
- final Map shortDecriptionValues
+ public void setShortDescriptionValues(
+ final Map shortDescriptionValues
) {
- this.shortDecriptionValues = new HashMap<>(shortDecriptionValues);
+ this.shortDescriptionValues = new HashMap<>(shortDescriptionValues);
}
public List getUnusedShortDescriptionLocales() {
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
index 6e274a9..d809752 100644
--- 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
@@ -1,5 +1,7 @@
package org.scientificcms.publications.ui.contenttypes;
+import org.scientificcms.publications.assets.PublisherAsset;
+
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@@ -16,6 +18,8 @@ public class PublicationWithPublisherPropertiesStepModel {
private String publisherName;
private String publisherPlace;
+
+
public String getPublisherUuid() {
return publisherUuid;
@@ -40,5 +44,9 @@ public class PublicationWithPublisherPropertiesStepModel {
public void setPublisherPlace(final String publisherPlace) {
this.publisherPlace = publisherPlace;
}
+
+ public String getPublisherType() {
+ return PublisherAsset.class.getName();
+ }
}
diff --git a/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/create-publication.xhtml b/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/create-publication.xhtml
index 77b07f6..4ba6fe0 100644
--- a/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/create-publication.xhtml
+++ b/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/create-publication.xhtml
@@ -19,8 +19,7 @@
-
+
diff --git a/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication.xhtml b/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication.xhtml
index ed87891..953ce08 100644
--- a/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication.xhtml
+++ b/sci-publications/src/main/resources/WEB-INF/views/org/scientificcms/contenttypes/ui/edit-publication.xhtml
@@ -63,7 +63,7 @@
id="name-edit-dialog"
tabindex="-1">
-