CategorySystem edit form

Former-commit-id: a995c66ab3
pull/7/head
Jens Pelzetter 2020-11-12 21:06:43 +01:00
parent cb0461aadc
commit 04d3c3bcc4
9 changed files with 221 additions and 13 deletions

View File

@ -152,6 +152,10 @@
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
</dependency>
<dependency>
<groupId>oro</groupId>

View File

@ -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<String, String> title;
private Map<String, String> 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);
}
@ -73,14 +87,55 @@ public class CategorySystemDetailsModel {
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<String, String> getTitle() {
return Collections.unmodifiableMap(title);
}
@ -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()

View File

@ -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;
@ -72,6 +84,12 @@ public class CategorySystemFormController {
@FormParam("uri")
private String uri;
@FormParam("version")
private String version;
@FormParam("released")
private String released;
@POST
@Path("/new")
@AuthorizationRequired
@ -81,7 +99,26 @@ public class CategorySystemFormController {
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);
}
}

View File

@ -57,6 +57,22 @@
#{CategorySystemDetailsModel.uri}
</dd>
</div>
<div>
<dt>
#{AdminMessages['categorysystems.details.version']}
</dt>
<dd>
#{CategorySystemDetailsModel.version}
</dd>
</div>
<div>
<dt>
#{AdminMessages['categorysystems.details.released']}
</dt>
<dd>
#{CategorySystemDetailsModel.released}
</dd>
</div>
</dl>
<div class="mb-4">
<a class="btn btn-primary"

View File

@ -36,7 +36,7 @@
<div class="container">
<h1>#{CategorySystemDetailsModel.new ? AdminMessages['categorysystems.new.label'] : AdminMessages.getMessage('categorysystems.edit.label', [CategorySystemDetailsModel.domainKey])}</h1>
<form action="#{CategorySystemDetailsModel.new ? mvc.uri('CategorySystemFormController#createCategorySystem') : mvc.uri('CategorySystemFormController#updateCategorySystem', {'categorySystemIdentifier': CategoryDetailsModel.domainKey })}"
<form action="#{CategorySystemDetailsModel.new ? mvc.uri('CategorySystemFormController#createCategorySystem') : mvc.uri('CategorySystemFormController#updateCategorySystem', {'categorySystemIdentifier': CategorySystemDetailsModel.domainKey })}"
method="post">
<div class="form-group">
<label for="domainKey">
@ -45,6 +45,7 @@
<input aria-describedby="domainKey-help"
class="form-control"
name="domainKey"
required="true"
type="text"
value="#{CategorySystemDetailsModel.domainKey}" />
<small class="form-text text-muted"
@ -58,7 +59,7 @@
</label>
<input aria-describedby="uri-help"
class="form-control"
name="domainKey"
name="uri"
type="text"
value="#{CategorySystemDetailsModel.uri}"
/>
@ -67,13 +68,43 @@
#{AdminMessages['categorysystems.form.uri.help']}
</small>
</div>
<div class="form-group">
<label for="version">
#{AdminMessages['categorysystems.form.version.label']}
</label>
<input aria-describedby="version-help"
class="form-control"
name="version"
type="text"
value="#{CategorySystemDetailsModel.version}"
/>
<small class="form-text text-muted"
id="version-help">
#{AdminMessages['categorysystems.form.version.help']}
</small>
</div>
<div class="form-group">
<label for="released">
#{AdminMessages['categorysystems.form.released.label']}
</label>
<input aria-describedby="released-help"
class="form-control"
name="released"
type="date"
value="#{CategorySystemDetailsModel.released}"
/>
<small class="form-text text-muted"
id="version-help">
#{AdminMessages['categorysystems.form.relased.help']}
</small>
</div>
<a class="btn btn-warning"
href="#{mvc.uri('CategorySystemsController#getCategorySystems')}">
#{AdminMessages['categorysystems.form.buttons.cancel']}
</a>
<button class="btn btn-success" type="submit">
<c:choose>
<c:when test="#{UserDetailsModel.newUser}">
<c:when test="#{CategorySystemDetailsModel.new}">
#{AdminMessages['categorysystems.form.buttons.create']}
</c:when>
<c:otherwise>

View File

@ -262,7 +262,7 @@ categorysystems.details.title=Categorysystem {0} Details
categorysystems.details.id=ID
categorysystems.details.uuid=UUID
categorysystems.details.domainKey=Domain Key
categorysystems.details.uri=URI Stub
categorysystems.details.uri=URI
categorysystems.details.title.heading=Localized Title
categorysystems.details.title.table.headings.locale=Language
categorysystems.details.title.table.headings.value=Localized Title
@ -287,3 +287,10 @@ categorysystems.details.owners.context=Context
categorysystems.details.owners.heading=Used by
categorysystems.details.owners.none=Not in use by any application
categorysystems.details.edit=Edit
categorysystems.form.version.label=Version
categorysystems.form.version.help=Version of the category system
categorysystems.form.relased.help=Date of release
categorysystems.form.released.label=Released
categorysystems.details.version=Version
categorysystems.details.released=Released
categorysystems.form.errors.uri_invalid=URI is invalid

View File

@ -262,7 +262,7 @@ categorysystems.details.title=Kategoriensystem {0} Details
categorysystems.details.id=ID
categorysystems.details.uuid=UUID
categorysystems.details.domainKey=Domain Key
categorysystems.details.uri=URI Stub
categorysystems.details.uri=URI
categorysystems.details.title.heading=Lokalisierter Titel
categorysystems.details.title.table.headings.locale=Sprache
categorysystems.details.title.table.headings.value=Lokalisierter Titel
@ -287,3 +287,10 @@ categorysystems.details.owners.context=Context
categorysystems.details.owners.heading=Verwendet von
categorysystems.details.owners.none=Wird von keiner Anwendung verwendet
categorysystems.details.edit=Bearbeiten
categorysystems.form.version.label=Version
categorysystems.form.version.help=Version des Kategoriensystems
categorysystems.form.relased.help=Datum der Freigabe
categorysystems.form.released.label=Released
categorysystems.details.version=Version
categorysystems.details.released=Freigegeben
categorysystems.form.errors.uri_invalid=URI ist nicht valide

View File

@ -693,6 +693,11 @@
<artifactId>commons-primitives</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.7</version>
</dependency>
<!-- Apache Commons libraries end -->
<!--<dependency>

View File

@ -34,7 +34,7 @@
<skin>
<groupId>org.apache.maven.skins</groupId>
<artifactId>maven-fluido-skin</artifactId>
<version>1.5</version>
<version>1.9</version>
</skin>
</project>