From 6c0a262408e8a786219d553b823316a3660058e2 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Thu, 12 Nov 2020 21:06:43 +0100 Subject: [PATCH] CategorySystem edit form --- ccm-core/pom.xml | 6 +- .../CategorySystemDetailsModel.java | 68 ++++++++++++++- .../CategorySystemFormController.java | 82 +++++++++++++++++-- .../categories/categorysystem-details.xhtml | 16 ++++ .../categories/categorysystem-form.xhtml | 37 ++++++++- .../org/libreccm/ui/AdminBundle.properties | 9 +- .../org/libreccm/ui/AdminBundle_de.properties | 9 +- pom.xml | 5 ++ src/site/site.xml | 2 +- 9 files changed, 221 insertions(+), 13 deletions(-) diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index 833befc35..76d8f3c02 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -1,6 +1,6 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 @@ -152,6 +152,10 @@ commons-lang commons-lang + + commons-validator + commons-validator + oro diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java index 1f26274ba..bdd3615e9 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemDetailsModel.java @@ -22,8 +22,14 @@ import org.libreccm.categorization.Domain; import org.libreccm.categorization.DomainOwnership; import org.libreccm.ui.Message; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; @@ -49,6 +55,10 @@ public class CategorySystemDetailsModel { private String uri; + private String version; + + private String released; + private Map title; private Map description; @@ -65,6 +75,10 @@ public class CategorySystemDetailsModel { return categorySystemId; } + protected void setCategorySystemId(final long categorySystemId) { + this.categorySystemId = categorySystemId; + } + public String getIdentifier() { return String.format("ID-%d", categorySystemId); } @@ -72,14 +86,55 @@ public class CategorySystemDetailsModel { public String getUuid() { return uuid; } + + protected void setUuid(final String uuid) { + this.uuid = uuid; + } public String getDomainKey() { return domainKey; } + + protected void setDomainKey(final String uuid) { + this.uuid = uuid; + } public String getUri() { return uri; } + + protected void setUri(final String uri) { + this.uri = uri; + } + + public String getVersion() { + return version; + } + + protected void setVersion(final String version) { + this.version = version; + } + + public String getReleased() { + return released; + } + + protected void setReleased(final String released) { + this.released = released; + } + + protected void setReleased(final Date released) { + if (released == null) { + this.released = ""; + } else { + this.released = DateTimeFormatter.ISO_DATE.format( + LocalDateTime.ofInstant( + Instant.ofEpochMilli(released.getTime()), + ZoneOffset.UTC + ) + ); + } + } public Map getTitle() { return Collections.unmodifiableMap(title); @@ -96,7 +151,7 @@ public class CategorySystemDetailsModel { public boolean isNew() { return categorySystemId == 0; } - + public List getMessages() { return Collections.unmodifiableList(messages); } @@ -113,6 +168,17 @@ public class CategorySystemDetailsModel { uuid = domain.getUuid(); domainKey = domain.getDomainKey(); uri = domain.getUri(); + version = domain.getVersion(); + if (domain.getReleased() == null) { + released = ""; + } else { + released = DateTimeFormatter.ISO_DATE_TIME.format( + LocalDateTime.ofInstant( + Instant.ofEpochMilli(domain.getReleased().getTime()), + ZoneOffset.UTC + ) + ); + } title = domain .getTitle() .getValues() diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemFormController.java b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemFormController.java index 42130136a..8d3a88758 100644 --- a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemFormController.java +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategorySystemFormController.java @@ -18,6 +18,7 @@ */ package org.libreccm.ui.admin.categories; +import org.apache.commons.validator.routines.UrlValidator; import org.libreccm.api.Identifier; import org.libreccm.api.IdentifierParser; import org.libreccm.categorization.Domain; @@ -30,7 +31,18 @@ import org.libreccm.ui.Message; import org.libreccm.ui.MessageType; import org.libreccm.ui.admin.AdminMessages; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAccessor; import java.util.Arrays; +import java.util.Date; import java.util.Optional; import javax.enterprise.context.RequestScoped; @@ -59,7 +71,7 @@ public class CategorySystemFormController { @Inject private DomainManager domainManager; - + @Inject private DomainRepository domainRepository; @@ -72,16 +84,41 @@ public class CategorySystemFormController { @FormParam("uri") private String uri; + @FormParam("version") + private String version; + + @FormParam("released") + private String released; + @POST @Path("/new") @AuthorizationRequired @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) @Transactional(Transactional.TxType.REQUIRED) public String createCategorySystem() { - + final Domain domain = domainManager.createDomain(domainKey, domainKey); - + + if (!isValidUri(uri)) { + categorySystemDetailsModel.setDomainKey(domainKey); + categorySystemDetailsModel.setUri(uri); + categorySystemDetailsModel.setVersion(version); + categorySystemDetailsModel.setReleased(released); + + categorySystemDetailsModel.addMessage( + new Message( + adminMessages.get("categorysystems.form.errors.uri_invalid"), + MessageType.PRIMARY) + ); + } + domain.setUri(uri); + domain.setVersion(version); + if (released == null) { + domain.setReleased(null); + } else { + domain.setReleased(convertReleased()); + } domainRepository.save(domain); return "redirect:/categorymanager/categorysystems"; @@ -117,13 +154,34 @@ public class CategorySystemFormController { } if (result.isPresent()) { + if (!isValidUri(uri)) { + categorySystemDetailsModel.setDomainKey(domainKey); + categorySystemDetailsModel.setUri(uri); + categorySystemDetailsModel.setVersion(version); + categorySystemDetailsModel.setReleased(released); + + categorySystemDetailsModel.addMessage( + new Message( + adminMessages.get( + "categorysystems.form.errors.uri_invalid"), + MessageType.PRIMARY) + ); + } final Domain domain = result.get(); domain.setDomainKey(domainKey); domain.setUri(uri); + domain.setVersion(version); + if (released == null) { + domain.setReleased(null); + } else { + domain.setReleased(convertReleased()); + } domainRepository.save(domain); - categorySystemDetailsModel.setCategorySystem(domain); - return "org/libreccm/ui/admin/categories/categorysystem-details.xhtml"; + return String.format( + "redirect:/categorymanager/categorysystems/ID-%d/details", + domain.getObjectId() + ); } else { categorySystemDetailsModel.addMessage( new Message( @@ -138,4 +196,18 @@ public class CategorySystemFormController { } } + private Date convertReleased() { + final String param = String.format("%sT00:00:00", released); + return Date.from( + LocalDateTime + .parse(param, DateTimeFormatter.ISO_DATE_TIME) + .toInstant(ZoneOffset.UTC) + ); + } + + private boolean isValidUri(final String uriStr) { + final UrlValidator urlValidator = new UrlValidator(); + return urlValidator.isValid(uri); + } + } diff --git a/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml b/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml index 7746d35c7..b184986f6 100644 --- a/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml +++ b/ccm-core/src/main/resources/WEB-INF/views/org/libreccm/ui/admin/categories/categorysystem-details.xhtml @@ -57,6 +57,22 @@ #{CategorySystemDetailsModel.uri} +
+
+ #{AdminMessages['categorysystems.details.version']} +
+
+ #{CategorySystemDetailsModel.version} +
+
+
+
+ #{AdminMessages['categorysystems.details.released']} +
+
+ #{CategorySystemDetailsModel.released} +
+

#{CategorySystemDetailsModel.new ? AdminMessages['categorysystems.new.label'] : AdminMessages.getMessage('categorysystems.edit.label', [CategorySystemDetailsModel.domainKey])}

-
+
+ + + + #{AdminMessages['categorysystems.form.version.help']} + +
+
+ + + + #{AdminMessages['categorysystems.form.relased.help']} + +
#{AdminMessages['categorysystems.form.buttons.cancel']}