Configurations list

Jens Pelzetter 2020-10-23 18:29:17 +02:00
parent 1b0962bbfb
commit 7798852543
6 changed files with 180 additions and 6 deletions

View File

@ -21,7 +21,15 @@ package org.libreccm.configuration;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.*; import java.util.Collections;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.NavigableMap;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.TreeMap;
/** /**
* Describes a configuration. Useful for generating user interfaces. * Describes a configuration. Useful for generating user interfaces.

View File

@ -18,12 +18,22 @@
*/ */
package org.libreccm.ui.admin.configuration; package org.libreccm.ui.admin.configuration;
import org.libreccm.configuration.ConfigurationInfo;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.core.CoreConstants; import org.libreccm.core.CoreConstants;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.l10n.LocalizedTextsUtil;
import org.libreccm.security.AuthorizationRequired; import org.libreccm.security.AuthorizationRequired;
import org.libreccm.security.RequiresPrivilege; import org.libreccm.security.RequiresPrivilege;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.mvc.Controller; import javax.mvc.Controller;
import javax.mvc.Models;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
@ -35,12 +45,46 @@ import javax.ws.rs.Path;
@Controller @Controller
@Path("/configuration") @Path("/configuration")
public class ConfigurationController { public class ConfigurationController {
@Inject
private ConfigurationManager confManager;
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private Models models;
@GET @GET
@Path("/") @Path("/")
@AuthorizationRequired @AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
public String getSettings() { public String getSettings() {
final List<ConfigurationTableEntry> configurationClasses = confManager
.findAllConfigurations()
.stream()
.map(confManager::getConfigurationInfo)
.map(this::buildTableEntry)
.sorted()
.collect(Collectors.toList());
models.put("configurationClasses", configurationClasses);
return "org/libreccm/ui/admin/configuration.xhtml"; return "org/libreccm/ui/admin/configuration.xhtml";
} }
private ConfigurationTableEntry buildTableEntry(
final ConfigurationInfo confInfo
) {
Objects.requireNonNull(confInfo);
final ConfigurationTableEntry entry = new ConfigurationTableEntry();
entry.setName(confInfo.getName());
final LocalizedTextsUtil util = globalizationHelper
.getLocalizedTextsUtil(confInfo.getDescBundle());
entry.setTitle(util.getText(confInfo.getTitleKey()));
entry.setDescription(util.getText(confInfo.getDescKey()));
return entry;
}
} }

View File

@ -0,0 +1,77 @@
/*
* Copyright (C) 2020 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.libreccm.ui.admin.configuration;
import java.util.Objects;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class ConfigurationTableEntry
implements Comparable<ConfigurationTableEntry> {
private String name;
private String title;
private String description;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(final String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
@Override
public int compareTo(final ConfigurationTableEntry other) {
int result = Objects.compare(
title,
Objects.requireNonNull(other).getTitle(),
String::compareTo
);
if (result == 0) {
result = Objects.compare(
name,
Objects.requireNonNull(other).getName(),
String::compareTo
);
}
return result;
}
}

View File

@ -4,22 +4,63 @@
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/libreccm/ui/admin/ccm-admin.xhtml"> <ui:composition template="/WEB-INF/views/org/libreccm/ui/admin/ccm-admin.xhtml">
<ui:param name="activePage" value="configuration" /> <ui:param name="activePage" value="configuration" />
<ui:param name="title" value="#{AdminMessages['configuration.label']}" /> <ui:param name="title" value="#{AdminMessages['configuration.label']}" />
<ui:define name="breadcrumb"> <ui:define name="breadcrumb">
<li class="breadcrumb-item active"> <li class="breadcrumb-item active">
#{AdminMessages['configuration.label']} #{AdminMessages['configuration.label']}
</li> </li>
</ui:define> </ui:define>
<ui:define name="main"> <ui:define name="main">
<div class="container"> <div class="container">
<h1>#{AdminMessages['configuration.label']}</h1> <h1>#{AdminMessages['configuration.label']}</h1>
<p>Placeholder</p> <c:forEach items="#{configurationClasses}"
var="confClass">
<div class="list-group">
<a href="#"
class="list-group-item list-group-item-action">
<div class="d-flex w-100 justify-content-between">
<h2 class="mb-1">
#{confClass.title}
</h2>
</div>
<p class="mb-1">
#{confClass.description}
</p>
</a>
</div>
</c:forEach>
<!-- <table class="table">
<thead>
<th scope="col">
#{AdminMessages['configuration.table.headings.title']}
</th>
<th scope="col">
#{AdminMessages['configuration.table.headings.description']}
</th>
</thead>
<tbody>
<c:forEach items="#{configurationClasses}"
var="confClass">
<tr>
<td>
<a href="#">
#{confClass.title}
</a>
</td>
<td>
#{confClass.description}
</td>
</tr>
</c:forEach>
</tbody>-->
<!-- </table>-->
</div> </div>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</html> </html>

View File

@ -206,3 +206,5 @@ usersgroupsroles.users.form.errors.username.empty=The username of a user can't b
usersgroupsroles.users.form.errors.username.invalid=The username may only contain the characters a to z, A to Z, 0 to 9, the dash (-) and the underscore (_) usersgroupsroles.users.form.errors.username.invalid=The username may only contain the characters a to z, A to Z, 0 to 9, the dash (-) and the underscore (_)
usersgroupsroles.users.form.errors.primary_email.empty=The primary email address of a user can't b be empty usersgroupsroles.users.form.errors.primary_email.empty=The primary email address of a user can't b be empty
usersgroupsroles.users.form.errors.primary_email.invalid=The primary email address of a user must be a valid email address usersgroupsroles.users.form.errors.primary_email.invalid=The primary email address of a user must be a valid email address
configuration.table.headings.title=Configuration
configuration.table.headings.description=Description

View File

@ -206,3 +206,5 @@ usersgroupsroles.users.form.errors.username.empty=Der Benutzername eines Benutze
usersgroupsroles.users.form.errors.username.invalid=Der Benutzername eines Benutzers darf nur die Zeichen a bis z, A bis Z, 0 bis 9, den Bindestrich (-) und den Unterstrich (_) enthalten usersgroupsroles.users.form.errors.username.invalid=Der Benutzername eines Benutzers darf nur die Zeichen a bis z, A bis Z, 0 bis 9, den Bindestrich (-) und den Unterstrich (_) enthalten
usersgroupsroles.users.form.errors.primary_email.empty=Die prim\u00e4re E-Mail-Addresse eines Benutzers darf nicht leer sein. usersgroupsroles.users.form.errors.primary_email.empty=Die prim\u00e4re E-Mail-Addresse eines Benutzers darf nicht leer sein.
usersgroupsroles.users.form.errors.primary_email.invalid=Die prim\u00e4re E-Mail-Addresse eines Benutzers muss eine valide E-Mail-Addresse sein usersgroupsroles.users.form.errors.primary_email.invalid=Die prim\u00e4re E-Mail-Addresse eines Benutzers muss eine valide E-Mail-Addresse sein
configuration.table.headings.title=Konfiguration
configuration.table.headings.description=Beschreibung