diff --git a/ccm-bundle-devel-wildfly/pom.xml b/ccm-bundle-devel-wildfly/pom.xml
index aeea4098c..0fc49e301 100644
--- a/ccm-bundle-devel-wildfly/pom.xml
+++ b/ccm-bundle-devel-wildfly/pom.xml
@@ -244,9 +244,13 @@
false
${project.basedir}/wildfly.properties
+
development
+
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787
+
diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml
index 82ae07062..ae238e11e 100644
--- a/ccm-core/pom.xml
+++ b/ccm-core/pom.xml
@@ -253,7 +253,10 @@
org.apache.wicket
wicket-core
- 9.0.0
+
+
+ org.apache.wicket
+ wicket-cdi
diff --git a/ccm-core/src/main/java/org/libreccm/ui/CcmAdminFilter.java b/ccm-core/src/main/java/org/libreccm/ui/CcmAdminFilter.java
index fc8587b12..860b5e6f1 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/CcmAdminFilter.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/CcmAdminFilter.java
@@ -24,8 +24,6 @@ import org.libreccm.security.PermissionChecker;
import org.libreccm.security.Shiro;
import java.io.IOException;
-import java.net.URL;
-import java.net.http.HttpRequest;
import javax.inject.Inject;
import javax.servlet.FilterChain;
@@ -43,7 +41,7 @@ import javax.servlet.http.HttpServletResponse;
* @author Jens Pelzetter
*/
@WebFilter(
- value = "/@admin/",
+ value = "/@admin/*",
initParams = {
@WebInitParam(
name = "applicationClassName",
diff --git a/ccm-core/src/main/java/org/libreccm/ui/MissingPageDataException.java b/ccm-core/src/main/java/org/libreccm/ui/MissingPageDataException.java
new file mode 100644
index 000000000..683832f10
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/MissingPageDataException.java
@@ -0,0 +1,67 @@
+/*
+ * 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;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class MissingPageDataException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new instance of MissingPageDataException without detail message.
+ */
+ public MissingPageDataException() {
+ super();
+ }
+
+
+ /**
+ * Constructs an instance of MissingPageDataException with the specified detail message.
+ *
+ * @param msg The detail message.
+ */
+ public MissingPageDataException(final String msg) {
+ super(msg);
+ }
+
+ /**
+ * Constructs an instance of MissingPageDataException which wraps the
+ * specified exception.
+ *
+ * @param exception The exception to wrap.
+ */
+ public MissingPageDataException(final Exception exception) {
+ super(exception);
+ }
+
+ /**
+ * Constructs an instance of MissingPageDataException with the specified message which also wraps the
+ * specified exception.
+ *
+ * @param msg The detail message.
+ * @param exception The exception to wrap.
+ */
+ public MissingPageDataException(final String msg, final Exception exception) {
+ super(msg, exception);
+ }
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPage.java
index f2f6b2846..55595990d 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPage.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPage.java
@@ -19,13 +19,49 @@
package org.libreccm.ui.admin;
import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.RepeatingView;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
/**
*
* @author Jens Pelzetter
*/
public class AdminPage extends WebPage {
-
+
private static final long serialVersionUID = 1L;
-
+
+ @Inject
+ private Instance adminPages;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public AdminPage() {
+ super();
+
+ final List adminPagesData = adminPages
+ .stream()
+ .map(AdminPagesProvider::getAdminPagesData)
+ .flatMap(Collection::stream)
+ .sorted(
+ (page1, page2) -> Integer.compare(
+ page1.getPosition(), page2.getPosition()
+ )
+ )
+ .collect(Collectors.toList());
+
+ final RepeatingView adminPagesView = new RepeatingView("adminPages");
+ for (final AdminPageData adminPageData : adminPagesData) {
+ adminPagesView.add(
+ new Label(adminPagesView.newChildId(), adminPageData.getLabel())
+ );
+ }
+ add(adminPagesView);
+ }
+
}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPageData.java b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPageData.java
new file mode 100644
index 000000000..b36cbd6b2
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPageData.java
@@ -0,0 +1,143 @@
+/*
+ * 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;
+
+import java.util.Objects;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class AdminPageData {
+
+ private final String path;
+
+ private final Class extends AdminPage> pageClass;
+
+ private final int position;
+
+ private final String label;
+
+ private final String description;
+
+ AdminPageData(
+ final String path,
+ final Class extends AdminPage> pageClass,
+ final int position,
+ final String label,
+ final String description
+ ) {
+ this.path = path;
+ this.pageClass = pageClass;
+ this.position = position;
+ this.label = label;
+ this.description = description;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public Class extends AdminPage> getPageClass() {
+ return pageClass;
+ }
+
+ public int getPosition() {
+ return position;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 3;
+ hash = 59 * hash + Objects.hashCode(path);
+ hash = 59 * hash + Objects.hashCode(pageClass);
+ hash = 59 * hash + position;
+ hash = 59 * hash + Objects.hashCode(label);
+ hash = 59 * hash + Objects.hashCode(description);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if ((obj instanceof AdminPageData)) {
+ return false;
+ }
+ final AdminPageData other = (AdminPageData) obj;
+ if (other.canEqual(this)) {
+ return false;
+ }
+ if (!Objects.equals(path, other.getPath())) {
+ return false;
+ }
+ if (!Objects.equals(pageClass, other.getPageClass())) {
+ return false;
+ }
+ if (position != other.getPosition()) {
+ return false;
+ }
+ if (!Objects.equals(label, other.getLabel())) {
+ return false;
+ }
+ return Objects.equals(description, other.getDescription());
+ }
+
+ public boolean canEqual(final Object obj) {
+ return obj instanceof AdminPageData;
+ }
+
+ @Override
+ public final String toString() {
+ return toString("");
+ }
+
+ public String toString(final String data) {
+ return String.format("%s{"
+ + "path = %s, "
+ + "pageClass = %s, "
+ + "order = %d, "
+ + "label = %s, "
+ + "description = %s%s"
+ + "}",
+ super.toString(),
+ path,
+ pageClass.getName(),
+ position,
+ label,
+ description,
+ data
+ );
+ }
+
+
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPageDataBuilder.java b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPageDataBuilder.java
new file mode 100644
index 000000000..3bf41cd74
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPageDataBuilder.java
@@ -0,0 +1,139 @@
+/*
+ * 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;
+
+import org.libreccm.ui.MissingPageDataException;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class AdminPageDataBuilder {
+
+ private String path;
+
+ private final Class extends AdminPage> pageClass;
+
+ private Integer position;
+
+ private ResourceBundle labelBundle;
+
+ private String labelKey;
+
+ private ResourceBundle descriptionBundle;
+
+ private String descriptionKey;
+
+ private AdminPageDataBuilder(final Class extends AdminPage> pageClass) {
+ this.pageClass = pageClass;
+ }
+
+ public AdminPageDataBuilder mountedTo(final String path) {
+ this.path = path;
+ return this;
+ }
+
+ public static AdminPageDataBuilder forPage(
+ final Class extends AdminPage> pageClass
+ ) {
+ return new AdminPageDataBuilder(pageClass);
+ }
+
+ public AdminPageDataBuilder atPosition(final int position) {
+ this.position = position;
+ return this;
+ }
+
+ public AdminPageDataBuilder withLabel(
+ final ResourceBundle labelBundle, final String labelKey
+ ) {
+ this.labelBundle = labelBundle;
+ this.labelKey = labelKey;
+ return this;
+ }
+
+ public AdminPageDataBuilder withDescription(
+ final ResourceBundle descriptionBundle, final String descriptionKey
+ ) {
+ this.descriptionBundle = descriptionBundle;
+ this.descriptionKey = descriptionKey;
+ return this;
+ }
+
+ public AdminPageData build() {
+ if (path == null || path.isBlank()) {
+ throw new MissingPageDataException("Missing path for page.");
+ }
+
+ if (pageClass == null) {
+ throw new MissingPageDataException("Missing class for page.");
+ }
+
+ if (position == null) {
+ throw new MissingPageDataException("Missing position for page.");
+ }
+
+ if (labelBundle == null) {
+ throw new MissingPageDataException(
+ "Missing label bundle for page."
+ );
+ }
+
+ if (labelKey == null || labelKey.isBlank()) {
+ throw new MissingPageDataException("Missing label key for page.");
+ }
+
+ if (descriptionBundle == null) {
+ throw new MissingPageDataException(
+ "Missing description bundle for page."
+ );
+ }
+
+ if (descriptionKey == null || descriptionKey.isBlank()) {
+ throw new MissingPageDataException(
+ "Missing description key for page."
+ );
+ }
+
+ final String label = getLabelFromBundle();
+ final String description = getDescriptionFromBundle();
+
+
+ return new AdminPageData(path, pageClass, position, label, description);
+ }
+
+ private String getLabelFromBundle() {
+ try {
+ return labelBundle.getString(labelKey);
+ } catch(MissingResourceException ex) {
+ return labelKey;
+ }
+ }
+
+ private String getDescriptionFromBundle() {
+ try {
+ return descriptionBundle.getString(descriptionKey);
+ } catch(MissingResourceException ex) {
+ return descriptionKey;
+ }
+ }
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPagesProvider.java b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPagesProvider.java
new file mode 100644
index 000000000..387fda4a5
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/AdminPagesProvider.java
@@ -0,0 +1,31 @@
+/*
+ * 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;
+
+import java.util.Set;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public interface AdminPagesProvider {
+
+ Set getAdminPagesData();
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/ApplicationsPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/ApplicationsPage.java
new file mode 100644
index 000000000..774cc31b4
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/ApplicationsPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.applications.ApplicationsPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ApplicationsPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public ApplicationsPage() {
+ super();
+ add(new ApplicationsPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/CategoriesPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/CategoriesPage.java
new file mode 100644
index 000000000..cb5474c0d
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/CategoriesPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.categories.CategoriesPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class CategoriesPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public CategoriesPage() {
+ super();
+ add(new CategoriesPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/CcmAdmin.java b/ccm-core/src/main/java/org/libreccm/ui/admin/CcmAdmin.java
index b5b64ff74..fe02ba3c4 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/admin/CcmAdmin.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/CcmAdmin.java
@@ -18,15 +18,26 @@
*/
package org.libreccm.ui.admin;
+import org.apache.wicket.cdi.CdiConfiguration;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;
+import java.util.Collection;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
/**
*
* @author Jens Pelzetter
*/
public class CcmAdmin extends WebApplication {
+ @Inject
+ private Instance adminPages;
+
@Override
public Class extends WebPage> getHomePage() {
return DashboardPage.class;
@@ -36,6 +47,30 @@ public class CcmAdmin extends WebApplication {
public void init() {
super.init();
// setConfigurationType(RuntimeConfigurationType.DEPLOYMENT);
+
+ final CdiConfiguration cdiConfiguration = new CdiConfiguration();
+ cdiConfiguration.configure(this);
+
+ final Set adminPagesData = adminPages
+ .stream()
+ .map(AdminPagesProvider::getAdminPagesData)
+ .flatMap(Collection::stream)
+ .collect(Collectors.toSet());
+
+ for (final AdminPageData adminPageData : adminPagesData) {
+ mountPage(adminPageData.getPath(), adminPageData.getPageClass());
+ }
+
+// mountPage("applications", ApplicationsPage.class);
+// mountPage("categories", CategoriesPage.class);
+// mountPage("configuration", ConfigurationPage.class);
+// mountPage("imexport", ImExportPage.class);
+// mountPage("pagemodels", PageModelsPage.class);
+// mountPage("sites", SitesPage.class);
+// mountPage("systeminformation", SystemInformationPage.class);
+// mountPage("users-groups-roles/groups", GroupsPage.class);
+// mountPage("users-groups-roles/roles", RolesPage.class);
+// mountPage("users-groups-roles/users", UsersPage.class);
}
}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/CcmCoreAdminPages.java b/ccm-core/src/main/java/org/libreccm/ui/admin/CcmCoreAdminPages.java
new file mode 100644
index 000000000..4214d0fed
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/CcmCoreAdminPages.java
@@ -0,0 +1,136 @@
+/*
+ * 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;
+
+import org.libreccm.l10n.GlobalizationHelper;
+import org.libreccm.ui.admin.usersgroupsroles.GroupsPage;
+import org.libreccm.ui.admin.usersgroupsroles.RolesPage;
+import org.libreccm.ui.admin.usersgroupsroles.UsersPage;
+
+import java.util.ResourceBundle;
+import java.util.Set;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@ApplicationScoped
+public class CcmCoreAdminPages implements AdminPagesProvider {
+
+ @Inject
+ private GlobalizationHelper globalizationHelper;
+
+ @Override
+ public Set getAdminPagesData() {
+ final ResourceBundle adminBundle = ResourceBundle.getBundle(
+ "org.libreccm.ui.admin.AdminBundle",
+ globalizationHelper.getNegotiatedLocale()
+ );
+
+ return Set.of(
+ AdminPageDataBuilder
+ .forPage(ApplicationsPage.class)
+ .mountedTo("applications")
+ .atPosition(10)
+ .withLabel(adminBundle, "applications.label")
+ .withDescription(adminBundle, "applications.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(CategoriesPage.class)
+ .mountedTo("categories")
+ .atPosition(20)
+ .withLabel(adminBundle, "categories.label")
+ .withDescription(adminBundle, "categories.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(ConfigurationPage.class)
+ .mountedTo("configuration")
+ .atPosition(30)
+ .withLabel(adminBundle, "configuration.label")
+ .withDescription(adminBundle, "configuration.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(ImExportPage.class)
+ .mountedTo("imexport")
+ .atPosition(40)
+ .withLabel(adminBundle, "imexport.label")
+ .withDescription(adminBundle, "imexport.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(ConfigurationPage.class)
+ .mountedTo("pagemodels")
+ .atPosition(50)
+ .withLabel(adminBundle, "pagemodels.label")
+ .withDescription(adminBundle, "pagemodels.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(SitesPage.class)
+ .mountedTo("sites")
+ .atPosition(60)
+ .withLabel(adminBundle, "sites.label")
+ .withDescription(adminBundle, "sites.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(SystemInformationPage.class)
+ .mountedTo("systeminformation")
+ .atPosition(70)
+ .withLabel(adminBundle, "systeminformation.label")
+ .withDescription(adminBundle, "systeminformation.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(UsersGroupsRolesPage.class)
+ .mountedTo("users-groups-roles")
+ .atPosition(80)
+ .withLabel(adminBundle, "usersGroupsRoles.label")
+ .withDescription(adminBundle, "usersGroupsRoles.description")
+ .build(),
+ AdminPageDataBuilder
+ .forPage(GroupsPage.class)
+ .mountedTo("users-groups-roles/groups")
+ .atPosition(90)
+ .withLabel(adminBundle, "usersGroupsRoles.groups.label")
+ .withDescription(
+ adminBundle, "usersGroupsRoles.groups.description"
+ )
+ .build(),
+ AdminPageDataBuilder
+ .forPage(RolesPage.class)
+ .mountedTo("users-groups-roles/roles")
+ .atPosition(100)
+ .withLabel(adminBundle, "usersGroupsRoles.roles.label")
+ .withDescription(
+ adminBundle, "usersGroupsRoles.roles.description"
+ )
+ .build(),
+ AdminPageDataBuilder
+ .forPage(UsersPage.class)
+ .mountedTo("users-groups-roles/users")
+ .atPosition(110)
+ .withLabel(adminBundle, "usersGroupsRoles.users.label")
+ .withDescription(
+ adminBundle, "usersGroupsRoles.users.description"
+ )
+ .build()
+ );
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/ConfigurationPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/ConfigurationPage.java
new file mode 100644
index 000000000..b5a0e0351
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/ConfigurationPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.configuration.ConfigurationPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ConfigurationPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public ConfigurationPage() {
+ super();
+ add(new ConfigurationPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPage.java
index 0da217545..4f3d865b6 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPage.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPage.java
@@ -18,18 +18,21 @@
*/
package org.libreccm.ui.admin;
+import org.libreccm.ui.admin.dashboard.DashboardPanel;
+
/**
*
* @author Jens Pelzetter
*/
public class DashboardPage extends AdminPage {
-
+
private static final long serialVersionUID = 1L;
-
+
@SuppressWarnings("OverridableMethodCallInConstructor")
public DashboardPage() {
+ super();
// add(new Label("dashboardLabel", "CCM Admin Dashboard"));
- add(new DashboardPanel("adminPanel"));
+ add(new DashboardPanel("adminPanel"));
}
-
+
}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/ImExportPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/ImExportPage.java
new file mode 100644
index 000000000..2ef879d1e
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/ImExportPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.imexport.ImExportPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ImExportPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public ImExportPage() {
+ super();
+ add(new ImExportPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/PageModelsPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/PageModelsPage.java
new file mode 100644
index 000000000..dc0060712
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/PageModelsPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.pagemodels.PageModelsPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class PageModelsPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public PageModelsPage() {
+ super();
+ add(new PageModelsPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/SitesPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/SitesPage.java
new file mode 100644
index 000000000..6b12a5551
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/SitesPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.sites.SitesPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class SitesPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public SitesPage() {
+ super();
+ add(new SitesPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/SystemInformationPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/SystemInformationPage.java
new file mode 100644
index 000000000..5ec7d7fe4
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/SystemInformationPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.systeminformation.SystemInformationPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class SystemInformationPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public SystemInformationPage() {
+ super();
+ add(new SystemInformationPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/UsersGroupsRolesPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/UsersGroupsRolesPage.java
new file mode 100644
index 000000000..e82141f47
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/UsersGroupsRolesPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import org.libreccm.ui.admin.usersgroupsroles.UsersGroupsRolesPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UsersGroupsRolesPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public UsersGroupsRolesPage() {
+ super();
+ add(new UsersGroupsRolesPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/applications/ApplicationsPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/applications/ApplicationsPanel.java
new file mode 100644
index 000000000..429fab549
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/applications/ApplicationsPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.applications;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ApplicationsPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public ApplicationsPanel(final String id) {
+ super(id);
+ add(new Label("applicationsLabel", "Applications Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategoriesPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategoriesPanel.java
new file mode 100644
index 000000000..43d614a0a
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/categories/CategoriesPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.categories;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class CategoriesPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public CategoriesPanel(final String id) {
+ super(id);
+ add(new Label("categoriesLabel", "Categories Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/configuration/ConfigurationPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/configuration/ConfigurationPanel.java
new file mode 100644
index 000000000..73ef4e5a2
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/configuration/ConfigurationPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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 org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ConfigurationPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public ConfigurationPanel(final String id) {
+ super(id);
+ add(new Label("configurationLabel", "Configuration Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/dashboard/DashboardPanel.java
similarity index 96%
rename from ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPanel.java
rename to ccm-core/src/main/java/org/libreccm/ui/admin/dashboard/DashboardPanel.java
index 8b412b851..c9618dc6a 100644
--- a/ccm-core/src/main/java/org/libreccm/ui/admin/DashboardPanel.java
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/dashboard/DashboardPanel.java
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
-package org.libreccm.ui.admin;
+package org.libreccm.ui.admin.dashboard;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportPanel.java
new file mode 100644
index 000000000..0d56997df
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/ImExportPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.imexport;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ImExportPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public ImExportPanel(final String id) {
+ super(id);
+ add(new Label("imexportLabel", "Import/Export Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/pagemodels/PageModelsPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/pagemodels/PageModelsPanel.java
new file mode 100644
index 000000000..1ffbf9cdb
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/pagemodels/PageModelsPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.pagemodels;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class PageModelsPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public PageModelsPanel(final String id) {
+ super(id);
+ add(new Label("pageModelsLabel", "PageModel Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/sites/SitesPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/sites/SitesPanel.java
new file mode 100644
index 000000000..5fef01f78
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/sites/SitesPanel.java
@@ -0,0 +1,39 @@
+/*
+ * 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.sites;
+
+import org.libreccm.ui.admin.configuration.*;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class SitesPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public SitesPanel(final String id) {
+ super(id);
+ add(new Label("sitesLabel", "Sites Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationPanel.java
new file mode 100644
index 000000000..4b6a3f26a
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/systeminformation/SystemInformationPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.systeminformation;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class SystemInformationPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public SystemInformationPanel(final String id) {
+ super(id);
+ add(new Label("systemInformationLabel", "Systeminformation Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/GroupsPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/GroupsPage.java
new file mode 100644
index 000000000..2bc791dd8
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/GroupsPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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.usersgroupsroles;
+
+import org.libreccm.ui.admin.AdminPage;
+import org.libreccm.ui.admin.usersgroupsroles.groups.GroupsPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class GroupsPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public GroupsPage() {
+ add(new GroupsPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/RolesPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/RolesPage.java
new file mode 100644
index 000000000..40e9af0fa
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/RolesPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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.usersgroupsroles;
+
+import org.libreccm.ui.admin.AdminPage;
+import org.libreccm.ui.admin.usersgroupsroles.roles.RolesPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class RolesPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public RolesPage() {
+ add(new RolesPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/UsersGroupsRolesPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/UsersGroupsRolesPanel.java
new file mode 100644
index 000000000..99e89be4e
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/UsersGroupsRolesPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.usersgroupsroles;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UsersGroupsRolesPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public UsersGroupsRolesPanel(final String id) {
+ super(id);
+ add(new Label("usersGroupsRolesLabel", "Users/Groups/Roles Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/UsersPage.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/UsersPage.java
new file mode 100644
index 000000000..9c6c3d9a0
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/UsersPage.java
@@ -0,0 +1,37 @@
+/*
+ * 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.usersgroupsroles;
+
+import org.libreccm.ui.admin.AdminPage;
+import org.libreccm.ui.admin.usersgroupsroles.users.UsersPanel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UsersPage extends AdminPage {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public UsersPage() {
+ add(new UsersPanel("adminPanel"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/groups/GroupsPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/groups/GroupsPanel.java
new file mode 100644
index 000000000..0621209b4
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/groups/GroupsPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.usersgroupsroles.groups;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class GroupsPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public GroupsPanel(final String id) {
+ super(id);
+ add(new Label("groupsLabel", "Groups Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/roles/RolesPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/roles/RolesPanel.java
new file mode 100644
index 000000000..e18b301da
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/roles/RolesPanel.java
@@ -0,0 +1,39 @@
+/*
+ * 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.usersgroupsroles.roles;
+
+import org.libreccm.ui.admin.configuration.*;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class RolesPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public RolesPanel(final String id) {
+ super(id);
+ add(new Label("rolesLabel", "Roles Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/users/UsersPanel.java b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/users/UsersPanel.java
new file mode 100644
index 000000000..851e9f35e
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/ui/admin/usersgroupsroles/users/UsersPanel.java
@@ -0,0 +1,38 @@
+/*
+ * 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.usersgroupsroles.users;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UsersPanel extends Panel {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("OverridableMethodCallInConstructor")
+ public UsersPanel(final String id) {
+ super(id);
+ add(new Label("usersLabel", "Users Placeholder"));
+ }
+
+}
diff --git a/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminBundle.properties b/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminBundle.properties
new file mode 100644
index 000000000..268a2c87d
--- /dev/null
+++ b/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminBundle.properties
@@ -0,0 +1,41 @@
+# 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
+
+applications.label=Applications
+applications.description=Manage application instances
+categories.label=Categories
+categories.description=Manage categories
+configuration.label=Configuration
+configuration.description=Manage settings
+dashboard.label=Dashboard
+dashboard.description=Provides an overview of all available admin pages
+imexport.label=Export/Import
+imexport.description=Export and import entities
+pagemodels.label=Page Models
+pagemodels.description=Manage page models
+sites.label=Sites
+sites.description=Manage sites
+usersGroupsRoles.label=Users/Groups/Roles
+usersGroupsRoles.description=Manage users, groups and roles
+usersGroupsRoles.groups.label=Groups
+usersGroupsRoles.groups.description=Manage groups
+usersGroupsRoles.roles.label=Roles
+usersGroupsRoles.roles.description=Manage roles
+usersGroupsRoles.users.label=Users
+usersGroupsRoles.users.description=Manage users
+systeminformation.label=System Information
+systeminformation.description=Shows several informations about this CCM instance and its environment
diff --git a/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminBundle_de.properties b/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminBundle_de.properties
new file mode 100644
index 000000000..db1a6632d
--- /dev/null
+++ b/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminBundle_de.properties
@@ -0,0 +1,41 @@
+# 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
+
+applications.label=Applikationen
+applications.description=Verwalten der Instanzen der Applikationen
+categories.label=Kategorien
+categories.description=Verwaltung der Kategorien
+configuration.label=Konfiguration
+configuration.description=Konfiguration bearbeiten
+dashboard.label=Dashboard
+dashboard.description=\u00dcberblick \u00fcber alle Administrations-Seiten
+imexport.label=Export/Import
+imexport.description=Daten exportieren und importieren
+pagemodels.label=Page Models
+pagemodels.description=Verwalten der Page Models
+sites.label=Sites
+sites.description=Verwalten der Sites
+usersGroupsRoles.label=Benutzer*innen/Gruppen/Rollen
+usersGroupsRoles.description=Benutzer*innen, Gruppen und Rollen verwalten
+usersGroupsRoles.groups.label=Gruppen
+usersGroupsRoles.groups.description=Gruppen verwalten
+usersGroupsRoles.roles.label=Rollen
+usersGroupsRoles.roles.description=Rollen verwalten
+usersGroupsRoles.users.label=Benutzer*innen
+usersGroupsRoles.users.description=Benutzer*innen verwalten
+systeminformation.label=System Information
+systeminformation.description=Zeigt verschiedene Informationen \u00fcber diese CCM Instanz und ihre Umgebung
diff --git a/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminPage.html b/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminPage.html
index f8358e4b4..3b503234a 100644
--- a/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminPage.html
+++ b/ccm-core/src/main/resources/org/libreccm/ui/admin/AdminPage.html
@@ -5,6 +5,9 @@
LibreCCM Admin
+
[admin panel]