Category System Edit

Former-commit-id: ecc0fae017
pull/7/head
Jens Pelzetter 2020-11-14 11:46:05 +01:00
parent c2ef4f67a0
commit e88f99155d
9 changed files with 96 additions and 25 deletions

View File

@ -42,12 +42,10 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.libreccm.imexport.Exportable; import org.libreccm.imexport.Exportable;
import java.text.DateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; 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.Objects; import java.util.Objects;
@ -66,8 +64,6 @@ import javax.persistence.NamedQuery;
import javax.persistence.NamedSubgraph; import javax.persistence.NamedSubgraph;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
/** /**
@ -191,7 +187,6 @@ public class Domain extends CcmObject implements Serializable, Exportable {
* A version string for the {@code Domain}. * A version string for the {@code Domain}.
*/ */
@Column(name = "VERSION", nullable = true) @Column(name = "VERSION", nullable = true)
@NotBlank
@XmlElement(name = "version", namespace = CAT_XML_NS) @XmlElement(name = "version", namespace = CAT_XML_NS)
private String version; private String version;
@ -199,7 +194,6 @@ public class Domain extends CcmObject implements Serializable, Exportable {
* A timestamp for the release date of the {@code Domain}. * A timestamp for the release date of the {@code Domain}.
*/ */
@Column(name = "RELEASED") @Column(name = "RELEASED")
// @Temporal(TemporalType.TIMESTAMP)
@XmlElement(name = "released", namespace = CAT_XML_NS) @XmlElement(name = "released", namespace = CAT_XML_NS)
private LocalDate released; private LocalDate released;

View File

@ -181,7 +181,7 @@ public class CategorySystemDetailsModel {
if (domain.getReleased() == null) { if (domain.getReleased() == null) {
released = ""; released = "";
} else { } else {
released = DateTimeFormatter.ISO_DATE_TIME released = DateTimeFormatter.ISO_DATE
.withZone(ZoneOffset.systemDefault()) .withZone(ZoneOffset.systemDefault())
.format(domain.getReleased()); .format(domain.getReleased());
} }

View File

@ -98,7 +98,7 @@ public class CategorySystemFormController {
categorySystemDetailsModel.addMessage( categorySystemDetailsModel.addMessage(
new Message( new Message(
adminMessages.get("categorysystems.form.errors.uri_invalid"), adminMessages.get("categorysystems.form.errors.uri_invalid"),
MessageType.PRIMARY) MessageType.DANGER)
); );
categorySystemDetailsModel.addInvalidField("uri"); categorySystemDetailsModel.addInvalidField("uri");
return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml";
@ -157,7 +157,7 @@ public class CategorySystemFormController {
new Message( new Message(
adminMessages.get( adminMessages.get(
"categorysystems.form.errors.uri_invalid"), "categorysystems.form.errors.uri_invalid"),
MessageType.PRIMARY) MessageType.DANGER)
); );
categorySystemDetailsModel.addInvalidField("uri"); categorySystemDetailsModel.addInvalidField("uri");
return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml"; return "org/libreccm/ui/admin/categories/categorysystem-form.xhtml";

View File

@ -24,6 +24,7 @@ import org.libreccm.core.CoreConstants;
import org.libreccm.security.AuthorizationRequired; import org.libreccm.security.AuthorizationRequired;
import org.libreccm.security.RequiresPrivilege; import org.libreccm.security.RequiresPrivilege;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -65,9 +66,9 @@ public class CategorySystemsTableModel {
row.setVersion(domain.getVersion()); row.setVersion(domain.getVersion());
if (domain.getReleased() != null) { if (domain.getReleased() != null) {
row.setReleased( row.setReleased(
DateTimeFormatter.ISO_DATE_TIME.format( DateTimeFormatter.ISO_DATE
domain.getReleased() .withZone(ZoneId.systemDefault())
) .format(domain.getReleased())
); );
} }
row.setTitle( row.setTitle(

View File

@ -49,7 +49,7 @@
#{AdminMessages['categorysystems.form.domainKey.label']} #{AdminMessages['categorysystems.form.domainKey.label']}
</label> </label>
<input aria-describedby="domainKey-help" <input aria-describedby="domainKey-help"
class="form-control" class="form-control #{CategorySystemDetailsModel.invalidFields.contains('domainKey') ? 'is-invalid' : ''}"
name="domainKey" name="domainKey"
required="true" required="true"
type="text" type="text"
@ -64,7 +64,7 @@
#{AdminMessages['categorysystems.form.uri.label']} #{AdminMessages['categorysystems.form.uri.label']}
</label> </label>
<input aria-describedby="uri-help" <input aria-describedby="uri-help"
class="form-control" class="form-control #{CategorySystemDetailsModel.invalidFields.contains('uri') ? 'is-invalid' : ''}"
name="uri" name="uri"
type="text" type="text"
value="#{CategorySystemDetailsModel.uri}" value="#{CategorySystemDetailsModel.uri}"
@ -79,7 +79,7 @@
#{AdminMessages['categorysystems.form.version.label']} #{AdminMessages['categorysystems.form.version.label']}
</label> </label>
<input aria-describedby="version-help" <input aria-describedby="version-help"
class="form-control" class="form-control #{CategorySystemDetailsModel.invalidFields.contains('version') ? 'is-invalid' : ''}"
name="version" name="version"
type="text" type="text"
value="#{CategorySystemDetailsModel.version}" value="#{CategorySystemDetailsModel.version}"
@ -94,7 +94,7 @@
#{AdminMessages['categorysystems.form.released.label']} #{AdminMessages['categorysystems.form.released.label']}
</label> </label>
<input aria-describedby="released-help" <input aria-describedby="released-help"
class="form-control" class="form-control #{CategorySystemDetailsModel.invalidFields.contains('released') ? 'is-invalid' : ''}"
name="released" name="released"
type="date" type="date"
value="#{CategorySystemDetailsModel.released}" value="#{CategorySystemDetailsModel.released}"

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html [<!ENTITY times '&#215;'>]>
<html xmlns="http://www.w3.org/1999/xhtml" <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:h="http://xmlns.jcp.org/jsf/html"
@ -32,7 +32,7 @@
width="1em" width="1em"
height="1em" height="1em"
fill="currentColor"> fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#circle-plus" /> <use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#plus-circle" />
</svg> </svg>
<span>#{AdminMessages['categorysystems.add']}</span> <span>#{AdminMessages['categorysystems.add']}</span>
</a> </a>
@ -44,20 +44,83 @@
<th>#{AdminMessages['categorysystems.table.headers.uri']}</th> <th>#{AdminMessages['categorysystems.table.headers.uri']}</th>
<th>#{AdminMessages['categorysystems.table.headers.version']}</th> <th>#{AdminMessages['categorysystems.table.headers.version']}</th>
<th>#{AdminMessages['categorysystems.table.headers.released']}</th> <th>#{AdminMessages['categorysystems.table.headers.released']}</th>
<th class="text-center" colspan="2">
#{AdminMessages['categorysystems.table.headers.actions']}
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<c:forEach items="#{CategorySystemsTableModel.categorySystems}" <c:forEach items="#{CategorySystemsTableModel.categorySystems}"
var="categorySystem"> var="categorySystem">
<tr> <tr>
<td> <td>#{categorySystem.domainKey}</td>
<a href="#{mvc.uri('CategorySystemsController#getCategorySystemDetails', { 'categorySystemIdentifier': categorySystem.identifier })}">
#{categorySystem.domainKey}
</a>
</td>
<td>#{categorySystem.uri}</td> <td>#{categorySystem.uri}</td>
<td>#{categorySystem.version}</td> <td>#{categorySystem.version}</td>
<td>#{categorySystem.released}</td> <td>#{categorySystem.released}</td>
<td>
<a class="btn btn-info"
href="#{mvc.uri('CategorySystemsController#getCategorySystemDetails', { 'categorySystemIdentifier': categorySystem.identifier })}">
<svg class="bi"
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#pen" />
</svg>
#{AdminMessages['categorysystems.table.actions.edit']}
</a>
</td>
<td>
<button class="btn btn-danger"
data-target="#confirm-delete-#{categorySystem.identifier}"
data-toggle="modal"
type="button">
<svg class="bi"
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#x-circle" />
</svg>
#{AdminMessages['categorysystems.table.actions.delete']}
</button>
<div class="modal"
id="confirm-delete-#{categorySystem.identifier}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri('CategorySystemsController#deleteCategorySystem', {'categorySystemIdentifier': categorySystem.identifier })}"
class="modal-content"
method="post">
<div class="modal-header">
<h3 class="modal-title">
#{AdminMessages['categorysystems.delete.confirm.title']}
</h3>
<button aria-label="#{AdminMessages['usersgroupsroles.groups.delete.confirm.cancel']}"
class="close"
data-dismiss="modal"
type="button">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
#{AdminMessages.getMessage('categorysystems.delete.confirm.message', [categorySystem.identifier])}
<input name="confirmed"
type="hidden"
value="true" />
</div>
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button">
#{AdminMessages['categorysystems.delete.confirm.cancel']}
</button>
<button class="btn btn-danger"
type="submit">
#{AdminMessages['categorysystems.delete.confirm.yes']}
</button>
</div>
</form>
</div>
</div>
</td>
</tr> </tr>
</c:forEach> </c:forEach>
</tbody> </tbody>

View File

@ -67,8 +67,7 @@
<td class="text-center action-col"> <td class="text-center action-col">
<button class="btn btn-danger" <button class="btn btn-danger"
data-toggle="modal" data-toggle="modal"
data-target="#confirm-delete-#{group.name}" data-target="#confirm-delete-#{group.name}">
href="#">
<svg class="bi" <svg class="bi"
width="1em" width="1em"
height="1em" height="1em"

View File

@ -294,3 +294,10 @@ categorysystems.form.released.label=Released
categorysystems.details.version=Version categorysystems.details.version=Version
categorysystems.details.released=Released categorysystems.details.released=Released
categorysystems.form.errors.uri_invalid=URI is invalid categorysystems.form.errors.uri_invalid=URI is invalid
categorysystems.table.headers.actions=Actions
categorysystems.table.actions.delete=Delete
categorysystems.table.actions.edit=Edit
categorysystems.delete.confirm.title=Confirm Delete
categorysystems.delete.confirm.message=Are you sure to delete the category system {0} and all its categories?
categorysystems.delete.confirm.cancel=Cancel
categorysystems.delete.confirm.yes=Delete Category System

View File

@ -294,3 +294,10 @@ categorysystems.form.released.label=Released
categorysystems.details.version=Version categorysystems.details.version=Version
categorysystems.details.released=Freigegeben categorysystems.details.released=Freigegeben
categorysystems.form.errors.uri_invalid=URI ist nicht valide categorysystems.form.errors.uri_invalid=URI ist nicht valide
categorysystems.table.headers.actions=Aktionen
categorysystems.table.actions.delete=L\u00f6schen
categorysystems.table.actions.edit=Bearbeiten
categorysystems.delete.confirm.title=L\u00f6schen best\u00e4tigen
categorysystems.delete.confirm.message=Sind Sie sicher, dass Sie das Kategoriensystem {0} mit allen seinen Kategorien l\u00f6schen wollen?
categorysystems.delete.confirm.cancel=Abbrechen
categorysystems.delete.confirm.yes=Kategoriensystem l\u00f6schen