Compare commits

...

4 Commits

Author SHA1 Message Date
Jens Pelzetter 28695756f0 Navbar for ccm-admin
Former-commit-id: 7ca0385666
2020-09-02 21:28:43 +02:00
Jens Pelzetter 348a2c635b Collect admin pages via CDI
Former-commit-id: 29ac4dcf84
2020-09-01 18:52:36 +02:00
Jens Pelzetter 37ad0cdaf4 More work on admin UI with Wicket
Former-commit-id: 69c7bcd092
2020-08-31 21:07:30 +02:00
Jens Pelzetter bad299d974 Integreted Apache Wicket
Former-commit-id: a6b20a34bf
2020-08-30 12:37:32 +02:00
61 changed files with 10425 additions and 1045 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@ node
node_modules node_modules
runtime runtime
target target
.cache
.classpath .classpath
.factorypath .factorypath
.project .project

File diff suppressed because it is too large Load Diff

View File

@ -84,8 +84,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<source>1.8</source> <source>11</source>
<target>1.8</target> <target>11</target>
<optimize>true</optimize> <optimize>true</optimize>
<debug>true</debug> <debug>true</debug>
<encoding>${project.build.sourceEncoding}</encoding> <encoding>${project.build.sourceEncoding}</encoding>
@ -107,7 +107,7 @@
<goal>install-node-and-npm</goal> <goal>install-node-and-npm</goal>
</goals> </goals>
<configuration> <configuration>
<nodeVersion>v8.11.4</nodeVersion> <nodeVersion>v12.18.3</nodeVersion>
</configuration> </configuration>
</execution> </execution>
<!-- <execution> <!-- <execution>
@ -244,6 +244,13 @@
<configuration> <configuration>
<skip>false</skip> <skip>false</skip>
<propertiesFile>${project.basedir}/wildfly.properties</propertiesFile> <propertiesFile>${project.basedir}/wildfly.properties</propertiesFile>
<env>
<wicket.configuration>development</wicket.configuration>
</env>
<java-opts>
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
</java-opts>
</configuration> </configuration>
</plugin> </plugin>

View File

@ -86,6 +86,11 @@
<Logger name="org.libreccm.ui.admin.usersgroupsroles.RolesController" <Logger name="org.libreccm.ui.admin.usersgroupsroles.RolesController"
level="debug"> level="debug">
</Logger> </Logger>
<Logger
name="org.libreccm.ui.admin.CcmAdmin"
level="debug"
>
</Logger>
<Logger name="org.librecms.contentsection.AssetRepository" <Logger name="org.librecms.contentsection.AssetRepository"
level="debug"> level="debug">
</Logger> </Logger>

6974
ccm-core/package-lock.json generated 100644

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
{
"name": "ccm-core",
"version": "7.0.0",
"description": "JavaScript stuff for ccm-core",
"main": "index.js",
"scripts": {
"build": "npm-run-all build:*:*",
"build:ccm-admin:js": "parcel build --out-dir target/generated-resources/org/libreccm/ui/admin src/main/typescript/ccm-admin/ccm-admin.ts",
"build:ccm-admin:css": "sass src/main/scss/ccm-admin/ccm-admin.scss target/generated-resources/org/libreccm/ui/admin/ccm-admin.css"
},
"author": "Jens Pelzetter",
"license": "LGPL-3.0-or-later",
"devDependencies": {
"npm-run-all": "^4.1.5",
"parcel-bundler": "^1.12.4",
"sass": "^1.26.10",
"typescript": "^4.0.2"
},
"dependencies": {
"bootstrap": "^4.5.2",
"jquery": "^3.5.1",
"popper.js": "^1.16.1"
}
}

View File

@ -250,6 +250,15 @@
<artifactId>Saxon-HE</artifactId> <artifactId>Saxon-HE</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-cdi</artifactId>
</dependency>
<!-- Export Import Libraries --> <!-- Export Import Libraries -->
<dependency> <dependency>
@ -292,6 +301,9 @@
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
<resource>
<directory>./target/generated-resources</directory>
</resource>
</resources> </resources>
<testResources> <testResources>
@ -315,6 +327,40 @@
<encoding>${project.build.sourceEncoding}</encoding> <encoding>${project.build.sourceEncoding}</encoding>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<configuration>
<installDirectory>../node</installDirectory>
</configuration>
<executions>
<execution>
<id>Install node.js and NPM</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v12.18.3</nodeVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
</execution>
<execution>
<id>build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
@ -381,7 +427,7 @@
</build> </build>
<reporting> <reporting>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
@ -416,6 +462,7 @@
<!--<additionalparam>-Xdoclint:none</additionalparam>--> <!--<additionalparam>-Xdoclint:none</additionalparam>-->
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId> <artifactId>maven-jxr-plugin</artifactId>

View File

@ -0,0 +1,97 @@
/*
* 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;
import org.apache.wicket.protocol.http.WicketFilter;
import org.libreccm.core.CoreConstants;
import org.libreccm.security.PermissionChecker;
import org.libreccm.security.Shiro;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@WebFilter(
value = "/@admin/*",
initParams = {
@WebInitParam(
name = "applicationClassName",
value = "org.libreccm.ui.admin.CcmAdmin"
),
@WebInitParam(name = "filterMappingUrlPattern", value = "/@admin/*")
}
)
public class CcmAdminFilter extends WicketFilter {
@Inject
private Shiro shiro;
@Inject
private PermissionChecker permissionChecker;
@Inject
private ServletContext servletContext;
@Override
public void doFilter(
final ServletRequest request,
final ServletResponse response,
final FilterChain chain
) throws IOException, ServletException {
if (permissionChecker.isPermitted(CoreConstants.PRIVILEGE_ADMIN)) {
super.doFilter(request, response, chain);
} else if (shiro.getSubject().isAuthenticated()) {
final HttpServletResponse httpResponse
= (HttpServletResponse) response;
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
} else {
final HttpServletRequest httpRequest = (HttpServletRequest) request;
final HttpServletResponse httpResponse
= (HttpServletResponse) response;
final String returnUrl = String.format(
"%s%s",
httpRequest.getContextPath(),
httpRequest.getServletPath()
);
httpResponse.sendRedirect(
String.format(
"%s/ccm/register?return_url=%s",
servletContext.getContextPath(),
returnUrl
)
);
}
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class MissingPageDataException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* Creates a new instance of <code>MissingPageDataException</code> without detail message.
*/
public MissingPageDataException() {
super();
}
/**
* Constructs an instance of <code>MissingPageDataException</code> with the specified detail message.
*
* @param msg The detail message.
*/
public MissingPageDataException(final String msg) {
super(msg);
}
/**
* Constructs an instance of <code>MissingPageDataException</code> which wraps the
* specified exception.
*
* @param exception The exception to wrap.
*/
public MissingPageDataException(final Exception exception) {
super(exception);
}
/**
* Constructs an instance of <code>MissingPageDataException</code> 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);
}
}

View File

@ -0,0 +1,33 @@
/*
* 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;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class AdminConstants {
private AdminConstants() {
// Nothing
}
public static final String ADMIN_BUNDLE = "org.libreccm.ui.admin.AdminBundle";
}

View File

@ -0,0 +1,98 @@
/*
* 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.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.filter.HeaderResponseContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.libreccm.ui.bootstrap.NavItem;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class AdminPage extends WebPage {
private static final long serialVersionUID = 1L;
@Inject
private Instance<AdminPagesProvider> adminPages;
@SuppressWarnings("OverridableMethodCallInConstructor")
public AdminPage() {
super();
add(
new HeaderResponseContainer(
"scripts-container", "scripts-container"
)
);
final List<AdminPageData> adminPagesData = adminPages
.stream()
.map(AdminPagesProvider::getAdminPagesData)
.flatMap(Collection::stream)
.filter(page -> page.getGroup().equals(""))
.sorted(
(page1, page2) -> Integer.compare(
page1.getPosition(), page2.getPosition()
)
)
.collect(Collectors.toList());
final RepeatingView adminPagesView = new RepeatingView("admin-pages");
for (final AdminPageData adminPageData : adminPagesData) {
final NavItem navItem = new NavItem(
adminPagesView.newChildId(),
adminPageData.getLabel(),
adminPageData.getPageClass()
);
navItem.setRenderBodyOnly(true);
adminPagesView.add(navItem);
}
add(adminPagesView);
}
@Override
public void renderHead(final IHeaderResponse response) {
response.render(
CssHeaderItem.forReference(
new PackageResourceReference(AdminPage.class, "ccm-admin.css")
)
);
response.render(
JavaScriptHeaderItem.forReference(
new PackageResourceReference(AdminPage.class, "ccm-admin.js")
)
);
}
}

View File

@ -0,0 +1,156 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class AdminPageData {
private final String path;
private final Class<? extends AdminPage> pageClass;
private final String group;
private final int position;
private final String label;
private final String description;
AdminPageData(
final String path,
final Class<? extends AdminPage> pageClass,
final String group,
final int position,
final String label,
final String description
) {
this.path = path;
this.pageClass = pageClass;
this.group = group;
this.position = position;
this.label = label;
this.description = description;
}
public String getPath() {
return path;
}
public Class<? extends AdminPage> getPageClass() {
return pageClass;
}
public String getGroup() {
return group;
}
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 + Objects.hashCode(group);
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 (!Objects.equals(group, other.getGroup())) {
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, "
+ "group = %s, "
+ "order = %d, "
+ "label = %s, "
+ "description = %s%s"
+ "}",
super.toString(),
path,
pageClass.getName(),
group,
position,
label,
description,
data
);
}
}

View File

@ -0,0 +1,45 @@
/*
* 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.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface AdminPageDescriptor {
String path();
int position();
Class<? extends AdminPage> subPageOf() default AdminPage.class;
String labelBundle();
String labelKey();
String descriptionBundle();
String descriptionKey();
}

View File

@ -0,0 +1,144 @@
/*
* 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.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.l10n.GlobalizationHelper;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public abstract class AdminPagesProvider {
private static final Logger LOGGER = LogManager.getLogger(
AdminPagesProvider.class
);
@Inject
private GlobalizationHelper globalizationHelper;
public abstract Set<Class<? extends AdminPage>> getClasses();
protected Set<AdminPageData> getAdminPagesData() {
return getClasses()
.stream()
.map(this::buildAdminPageData)
.collect(Collectors.toSet());
}
private AdminPageData buildAdminPageData(
final Class<? extends AdminPage> clazz
) {
final AdminPageDescriptor descriptor = clazz.getAnnotation(
AdminPageDescriptor.class
);
final String path = buildPath(descriptor);
final int position = descriptor.position();
final String labelBundle = descriptor.labelBundle();
final String labelKey = descriptor.labelKey();
final String descriptionBundle = descriptor.descriptionBundle();
final String descriptionKey = descriptor.descriptionKey();
final String group;
if (descriptor.subPageOf().equals(AdminPage.class)) {
group = "";
} else {
final AdminPageDescriptor parentDescriptor = descriptor
.subPageOf()
.getAnnotation(AdminPageDescriptor.class);
if (parentDescriptor == null) {
throw new IllegalArgumentException(
String.format(
"Parent page class %s of page class %s has no "
+ "AdminPageDescriptor annotation.",
descriptor.subPageOf().getName(),
clazz.getName())
);
}
group = parentDescriptor.path();
}
final AdminPageData data = new AdminPageData(
path,
clazz,
group,
position,
findString(labelBundle, labelKey),
findString(descriptionBundle, descriptionKey)
);
return data;
}
private String findString(final String bundleName, final String key) {
final ResourceBundle bundle;
try {
bundle = ResourceBundle.getBundle(
bundleName, globalizationHelper.getNegotiatedLocale()
);
} catch (MissingResourceException ex) {
LOGGER.warn("Resource Bundle {} not found.", bundleName);
LOGGER.warn(ex);
return key;
}
try {
return bundle.getString(key);
} catch (MissingResourceException ex) {
LOGGER.warn("Key {} not found.", key);
return key;
}
}
private String buildPath(final AdminPageDescriptor descriptor) {
if (descriptor.subPageOf().equals(AdminPage.class)) {
return descriptor.path();
} else {
final Class<? extends AdminPage> parent = descriptor.subPageOf();
final AdminPageDescriptor parentDescriptor = parent.getAnnotation(
AdminPageDescriptor.class
);
if (parentDescriptor == null) {
throw new IllegalArgumentException(
String.format(
"Parent page class %s of page class %s has no "
+ "AdminPageDescriptor annotation.",
descriptor.subPageOf().getName(),
parent.getName())
);
}
return String.join(
"/",
buildPath(parentDescriptor),
descriptor.path()
);
}
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "applications",
position = 10,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "applications.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "applications.description"
)
public class ApplicationsPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public ApplicationsPage() {
super();
add(new ApplicationsPanel("adminPanel"));
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "categories",
position = 20,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "categories.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "categories.description"
)
public class CategoriesPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public CategoriesPage() {
super();
add(new CategoriesPanel("adminPanel"));
}
}

View File

@ -0,0 +1,97 @@
/*
* 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.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.wicket.cdi.CdiConfiguration;
import org.apache.wicket.markup.head.filter.JavaScriptFilteredIntoFooterHeaderResponse;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.libreccm.l10n.GlobalizationHelper;
import java.util.Collection;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.stream.Collectors;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class CcmAdmin extends WebApplication {
private static final Logger LOGGER = LogManager.getLogger(CcmAdmin.class);
@Inject
private Instance<AdminPagesProvider> adminPages;
@Override
public Class<? extends WebPage> getHomePage() {
return DashboardPage.class;
}
@Override
public void init() {
super.init();
// setConfigurationType(RuntimeConfigurationType.DEPLOYMENT);
final CdiConfiguration cdiConfiguration = new CdiConfiguration();
cdiConfiguration.configure(this);
getCspSettings().blocking().disabled();
getMarkupSettings().setStripWicketTags(true);
getHeaderResponseDecorators().add(
response -> new JavaScriptFilteredIntoFooterHeaderResponse(
response, "scripts-container"
));
final Set<AdminPageData> adminPagesData = adminPages
.stream()
.map(AdminPagesProvider::getAdminPagesData)
.flatMap(Collection::stream)
.collect(Collectors.toSet());
for (final AdminPageData adminPageData : adminPagesData) {
LOGGER.debug(
"Mounting page {} to path {}",
adminPageData.getPageClass().getName(),
adminPageData.getPath()
);
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);
}
}

View File

@ -0,0 +1,52 @@
/*
* 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.GroupsPage;
import org.libreccm.ui.admin.usersgroupsroles.RolesPage;
import org.libreccm.ui.admin.usersgroupsroles.UsersPage;
import java.util.Set;
import javax.enterprise.context.ApplicationScoped;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@ApplicationScoped
public class CcmCoreAdminPages extends AdminPagesProvider {
@Override
public Set<Class<? extends AdminPage>> getClasses() {
return Set.of(
ApplicationsPage.class,
CategoriesPage.class,
ConfigurationPage.class,
ImExportPage.class,
PageModelsPage.class,
SitesPage.class,
SystemInformationPage.class,
UsersGroupsRolesPage.class,
GroupsPage.class,
RolesPage.class,
UsersPage.class
);
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "configuration",
position = 30,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "configuration.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "configuration.description"
)
public class ConfigurationPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public ConfigurationPage() {
super();
add(new ConfigurationPanel("adminPanel"));
}
}

View File

@ -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;
import org.libreccm.ui.admin.dashboard.DashboardPanel;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "imexport",
position = 40,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "imexport.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "imexport.description"
)
public class ImExportPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public ImExportPage() {
super();
add(new ImExportPanel("adminPanel"));
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "pagemodels",
position = 50,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "pagemodels.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "pagemodels.description"
)
public class PageModelsPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public PageModelsPage() {
super();
add(new PageModelsPanel("adminPanel"));
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "sites",
position = 60,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "sites.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "sites.description"
)
public class SitesPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public SitesPage() {
super();
add(new SitesPanel("adminPanel"));
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "systeminformation",
position = 70,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "systeminformation.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "systeminformation.description"
)
public class SystemInformationPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public SystemInformationPage() {
super();
add(new SystemInformationPanel("adminPanel"));
}
}

View File

@ -0,0 +1,45 @@
/*
* 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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "users-groups-roles",
position = 80,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "usersGroupsRoles.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "usersGroupsRoles.description"
)
public class UsersGroupsRolesPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public UsersGroupsRolesPage() {
super();
add(new UsersGroupsRolesPanel("adminPanel"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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.dashboard;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class DashboardPanel extends Panel {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public DashboardPanel(String id) {
super(id);
add(new Label("dashboardLabel", "CCM Admin Dashboard"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -0,0 +1,49 @@
/*
* 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.AdminConstants;
import org.libreccm.ui.admin.AdminPage;
import org.libreccm.ui.admin.AdminPageDescriptor;
import org.libreccm.ui.admin.UsersGroupsRolesPage;
import org.libreccm.ui.admin.usersgroupsroles.groups.GroupsPanel;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "groups",
position = 20,
subPageOf = UsersGroupsRolesPage.class,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "usersGroupsRoles.groups.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "usersGroupsRoles.groups.description"
)
public class GroupsPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public GroupsPage() {
add(new GroupsPanel("adminPanel"));
}
}

View File

@ -0,0 +1,50 @@
/*
* 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.AdminConstants;
import org.libreccm.ui.admin.AdminPage;
import org.libreccm.ui.admin.AdminPageDescriptor;
import org.libreccm.ui.admin.UsersGroupsRolesPage;
import org.libreccm.ui.admin.usersgroupsroles.roles.RolesPanel;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "roles",
position = 30,
subPageOf = UsersGroupsRolesPage.class,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "usersGroupsRoles.roles.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "usersGroupsRoles.roles.description"
)
public class RolesPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public RolesPage() {
add(new RolesPanel("adminPanel"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -0,0 +1,50 @@
/*
* 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.AdminConstants;
import org.libreccm.ui.admin.AdminPage;
import org.libreccm.ui.admin.AdminPageDescriptor;
import org.libreccm.ui.admin.UsersGroupsRolesPage;
import org.libreccm.ui.admin.usersgroupsroles.users.UsersPanel;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@AdminPageDescriptor(
path = "users",
position = 10,
subPageOf = UsersGroupsRolesPage.class,
labelBundle = AdminConstants.ADMIN_BUNDLE,
labelKey = "usersGroupsRoles.users.label",
descriptionBundle = AdminConstants.ADMIN_BUNDLE,
descriptionKey = "usersGroupsRoles.users.description"
)
public class UsersPage extends AdminPage {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public UsersPage() {
add(new UsersPanel("adminPanel"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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"));
}
}

View File

@ -0,0 +1,54 @@
/*
* 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.bootstrap;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class NavItem extends Panel {
private static final long serialVersionUID = 1L;
@SuppressWarnings("OverridableMethodCallInConstructor")
public NavItem(
final String id,
final String label,
final Class<? extends WebPage> targetPage
) {
super(id);
final Link<Void> link = new Link<Void>("link") {
@Override
public void onClick() {
setResponsePage(targetPage);
}
};
link.add(new Label("link-label", label));
add(link);
}
}

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>LibreCCM Admin</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-primary">
<a class="navbar-brand" href="#">Navbar</a>
<button
class="navbar-toggler"
type="button"
data-toggle="collapse"
data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item" wicket:id="admin-pages"></li>
</ul>
</div>
</nav>
<div class="container">
<div wicket:id="adminPanel">[admin panel]</div>
</div>
<wicket:container wicket:id="scripts-container"></wicket:container>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Dashboard - LibreCCM Admin</title>
</head>
<body>
<div wicket:id="dashboardLabel">
[Label's message goes here]
</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="applicationsLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="categoriesLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="configurationLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="dashboardLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="imexportLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="pageModelsLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="sitesLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="systemInformationLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="usersGroupsRolesLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="groupsLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="rolesLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="usersLabel">
[Label's message goes here]
</div>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<wicket:panel>
<li class="nav-item">
<a
class="nav-link"
href="[targetpage]"
wicket:id="link"
>
<span wicket:id="link-label">[Link Label]</span>
</a>
</li>
</wicket:panel>
</body>
</html>

View File

@ -0,0 +1 @@
@import "../../../../node_modules/bootstrap/scss/bootstrap";

View File

@ -0,0 +1 @@
import "bootstrap";

15
pom.xml
View File

@ -164,8 +164,8 @@
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version> <version>3.8.1</version>
<configuration> <configuration>
<source>1.8</source> <source>11</source>
<target>1.8</target> <target>11</target>
<optimize>true</optimize> <optimize>true</optimize>
<debug>true</debug> <debug>true</debug>
<encoding>${project.build.sourceEncoding}</encoding> <encoding>${project.build.sourceEncoding}</encoding>
@ -556,6 +556,17 @@
<version>0.11.2</version> <version>0.11.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>9.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-cdi</artifactId>
<version>9.0.0</version>
</dependency>
<!-- <!--
********************* *********************
Libraries used by CCM Libraries used by CCM