parent
cb0461aadc
commit
04d3c3bcc4
|
|
@ -152,6 +152,10 @@
|
||||||
<groupId>commons-lang</groupId>
|
<groupId>commons-lang</groupId>
|
||||||
<artifactId>commons-lang</artifactId>
|
<artifactId>commons-lang</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-validator</groupId>
|
||||||
|
<artifactId>commons-validator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>oro</groupId>
|
<groupId>oro</groupId>
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,14 @@ import org.libreccm.categorization.Domain;
|
||||||
import org.libreccm.categorization.DomainOwnership;
|
import org.libreccm.categorization.DomainOwnership;
|
||||||
import org.libreccm.ui.Message;
|
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.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
@ -49,6 +55,10 @@ public class CategorySystemDetailsModel {
|
||||||
|
|
||||||
private String uri;
|
private String uri;
|
||||||
|
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
private String released;
|
||||||
|
|
||||||
private Map<String, String> title;
|
private Map<String, String> title;
|
||||||
|
|
||||||
private Map<String, String> description;
|
private Map<String, String> description;
|
||||||
|
|
@ -65,6 +75,10 @@ public class CategorySystemDetailsModel {
|
||||||
return categorySystemId;
|
return categorySystemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setCategorySystemId(final long categorySystemId) {
|
||||||
|
this.categorySystemId = categorySystemId;
|
||||||
|
}
|
||||||
|
|
||||||
public String getIdentifier() {
|
public String getIdentifier() {
|
||||||
return String.format("ID-%d", categorySystemId);
|
return String.format("ID-%d", categorySystemId);
|
||||||
}
|
}
|
||||||
|
|
@ -73,14 +87,55 @@ public class CategorySystemDetailsModel {
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setUuid(final String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
public String getDomainKey() {
|
public String getDomainKey() {
|
||||||
return domainKey;
|
return domainKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setDomainKey(final String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
public String getUri() {
|
public String getUri() {
|
||||||
return uri;
|
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() {
|
public Map<String, String> getTitle() {
|
||||||
return Collections.unmodifiableMap(title);
|
return Collections.unmodifiableMap(title);
|
||||||
}
|
}
|
||||||
|
|
@ -113,6 +168,17 @@ public class CategorySystemDetailsModel {
|
||||||
uuid = domain.getUuid();
|
uuid = domain.getUuid();
|
||||||
domainKey = domain.getDomainKey();
|
domainKey = domain.getDomainKey();
|
||||||
uri = domain.getUri();
|
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
|
title = domain
|
||||||
.getTitle()
|
.getTitle()
|
||||||
.getValues()
|
.getValues()
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
package org.libreccm.ui.admin.categories;
|
package org.libreccm.ui.admin.categories;
|
||||||
|
|
||||||
|
import org.apache.commons.validator.routines.UrlValidator;
|
||||||
import org.libreccm.api.Identifier;
|
import org.libreccm.api.Identifier;
|
||||||
import org.libreccm.api.IdentifierParser;
|
import org.libreccm.api.IdentifierParser;
|
||||||
import org.libreccm.categorization.Domain;
|
import org.libreccm.categorization.Domain;
|
||||||
|
|
@ -30,7 +31,18 @@ import org.libreccm.ui.Message;
|
||||||
import org.libreccm.ui.MessageType;
|
import org.libreccm.ui.MessageType;
|
||||||
import org.libreccm.ui.admin.AdminMessages;
|
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.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
|
@ -72,6 +84,12 @@ public class CategorySystemFormController {
|
||||||
@FormParam("uri")
|
@FormParam("uri")
|
||||||
private String uri;
|
private String uri;
|
||||||
|
|
||||||
|
@FormParam("version")
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
@FormParam("released")
|
||||||
|
private String released;
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/new")
|
@Path("/new")
|
||||||
@AuthorizationRequired
|
@AuthorizationRequired
|
||||||
|
|
@ -81,7 +99,26 @@ public class CategorySystemFormController {
|
||||||
|
|
||||||
final Domain domain = domainManager.createDomain(domainKey, domainKey);
|
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.setUri(uri);
|
||||||
|
domain.setVersion(version);
|
||||||
|
if (released == null) {
|
||||||
|
domain.setReleased(null);
|
||||||
|
} else {
|
||||||
|
domain.setReleased(convertReleased());
|
||||||
|
}
|
||||||
domainRepository.save(domain);
|
domainRepository.save(domain);
|
||||||
|
|
||||||
return "redirect:/categorymanager/categorysystems";
|
return "redirect:/categorymanager/categorysystems";
|
||||||
|
|
@ -117,13 +154,34 @@ public class CategorySystemFormController {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.isPresent()) {
|
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();
|
final Domain domain = result.get();
|
||||||
domain.setDomainKey(domainKey);
|
domain.setDomainKey(domainKey);
|
||||||
domain.setUri(uri);
|
domain.setUri(uri);
|
||||||
|
domain.setVersion(version);
|
||||||
|
if (released == null) {
|
||||||
|
domain.setReleased(null);
|
||||||
|
} else {
|
||||||
|
domain.setReleased(convertReleased());
|
||||||
|
}
|
||||||
domainRepository.save(domain);
|
domainRepository.save(domain);
|
||||||
|
|
||||||
categorySystemDetailsModel.setCategorySystem(domain);
|
return String.format(
|
||||||
return "org/libreccm/ui/admin/categories/categorysystem-details.xhtml";
|
"redirect:/categorymanager/categorysystems/ID-%d/details",
|
||||||
|
domain.getObjectId()
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
categorySystemDetailsModel.addMessage(
|
categorySystemDetailsModel.addMessage(
|
||||||
new Message(
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,22 @@
|
||||||
#{CategorySystemDetailsModel.uri}
|
#{CategorySystemDetailsModel.uri}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</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>
|
</dl>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<a class="btn btn-primary"
|
<a class="btn btn-primary"
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>#{CategorySystemDetailsModel.new ? AdminMessages['categorysystems.new.label'] : AdminMessages.getMessage('categorysystems.edit.label', [CategorySystemDetailsModel.domainKey])}</h1>
|
<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">
|
method="post">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="domainKey">
|
<label for="domainKey">
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
<input aria-describedby="domainKey-help"
|
<input aria-describedby="domainKey-help"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="domainKey"
|
name="domainKey"
|
||||||
|
required="true"
|
||||||
type="text"
|
type="text"
|
||||||
value="#{CategorySystemDetailsModel.domainKey}" />
|
value="#{CategorySystemDetailsModel.domainKey}" />
|
||||||
<small class="form-text text-muted"
|
<small class="form-text text-muted"
|
||||||
|
|
@ -58,7 +59,7 @@
|
||||||
</label>
|
</label>
|
||||||
<input aria-describedby="uri-help"
|
<input aria-describedby="uri-help"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="domainKey"
|
name="uri"
|
||||||
type="text"
|
type="text"
|
||||||
value="#{CategorySystemDetailsModel.uri}"
|
value="#{CategorySystemDetailsModel.uri}"
|
||||||
/>
|
/>
|
||||||
|
|
@ -67,13 +68,43 @@
|
||||||
#{AdminMessages['categorysystems.form.uri.help']}
|
#{AdminMessages['categorysystems.form.uri.help']}
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</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"
|
<a class="btn btn-warning"
|
||||||
href="#{mvc.uri('CategorySystemsController#getCategorySystems')}">
|
href="#{mvc.uri('CategorySystemsController#getCategorySystems')}">
|
||||||
#{AdminMessages['categorysystems.form.buttons.cancel']}
|
#{AdminMessages['categorysystems.form.buttons.cancel']}
|
||||||
</a>
|
</a>
|
||||||
<button class="btn btn-success" type="submit">
|
<button class="btn btn-success" type="submit">
|
||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="#{UserDetailsModel.newUser}">
|
<c:when test="#{CategorySystemDetailsModel.new}">
|
||||||
#{AdminMessages['categorysystems.form.buttons.create']}
|
#{AdminMessages['categorysystems.form.buttons.create']}
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ categorysystems.details.title=Categorysystem {0} Details
|
||||||
categorysystems.details.id=ID
|
categorysystems.details.id=ID
|
||||||
categorysystems.details.uuid=UUID
|
categorysystems.details.uuid=UUID
|
||||||
categorysystems.details.domainKey=Domain Key
|
categorysystems.details.domainKey=Domain Key
|
||||||
categorysystems.details.uri=URI Stub
|
categorysystems.details.uri=URI
|
||||||
categorysystems.details.title.heading=Localized Title
|
categorysystems.details.title.heading=Localized Title
|
||||||
categorysystems.details.title.table.headings.locale=Language
|
categorysystems.details.title.table.headings.locale=Language
|
||||||
categorysystems.details.title.table.headings.value=Localized Title
|
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.heading=Used by
|
||||||
categorysystems.details.owners.none=Not in use by any application
|
categorysystems.details.owners.none=Not in use by any application
|
||||||
categorysystems.details.edit=Edit
|
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
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ categorysystems.details.title=Kategoriensystem {0} Details
|
||||||
categorysystems.details.id=ID
|
categorysystems.details.id=ID
|
||||||
categorysystems.details.uuid=UUID
|
categorysystems.details.uuid=UUID
|
||||||
categorysystems.details.domainKey=Domain Key
|
categorysystems.details.domainKey=Domain Key
|
||||||
categorysystems.details.uri=URI Stub
|
categorysystems.details.uri=URI
|
||||||
categorysystems.details.title.heading=Lokalisierter Titel
|
categorysystems.details.title.heading=Lokalisierter Titel
|
||||||
categorysystems.details.title.table.headings.locale=Sprache
|
categorysystems.details.title.table.headings.locale=Sprache
|
||||||
categorysystems.details.title.table.headings.value=Lokalisierter Titel
|
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.heading=Verwendet von
|
||||||
categorysystems.details.owners.none=Wird von keiner Anwendung verwendet
|
categorysystems.details.owners.none=Wird von keiner Anwendung verwendet
|
||||||
categorysystems.details.edit=Bearbeiten
|
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
|
||||||
|
|
|
||||||
5
pom.xml
5
pom.xml
|
|
@ -693,6 +693,11 @@
|
||||||
<artifactId>commons-primitives</artifactId>
|
<artifactId>commons-primitives</artifactId>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-validator</groupId>
|
||||||
|
<artifactId>commons-validator</artifactId>
|
||||||
|
<version>1.7</version>
|
||||||
|
</dependency>
|
||||||
<!-- Apache Commons libraries end -->
|
<!-- Apache Commons libraries end -->
|
||||||
|
|
||||||
<!--<dependency>
|
<!--<dependency>
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
<skin>
|
<skin>
|
||||||
<groupId>org.apache.maven.skins</groupId>
|
<groupId>org.apache.maven.skins</groupId>
|
||||||
<artifactId>maven-fluido-skin</artifactId>
|
<artifactId>maven-fluido-skin</artifactId>
|
||||||
<version>1.5</version>
|
<version>1.9</version>
|
||||||
</skin>
|
</skin>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue