- URIResolver for XSLT Themes now works (and with that xsl:import etc. in the XSL files)
- Fixed ambiguous URL patterns in Images


git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5261 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2018-02-08 13:41:00 +00:00
parent fb88f19840
commit 96a67c2978
5 changed files with 44 additions and 17 deletions

View File

@ -80,6 +80,9 @@
<Logger name="org.libreccm.security.Shiro" <Logger name="org.libreccm.security.Shiro"
level="debug"> level="debug">
</Logger> </Logger>
<Logger name="org.libreccm.theming.xslt.CcmUriResolver"
level="debug">
</Logger>
<Logger name="org.libreccm.ui.admin.usersgroupsroles.RolesController" <Logger name="org.libreccm.ui.admin.usersgroupsroles.RolesController"
level="debug"> level="debug">
</Logger> </Logger>

View File

@ -161,7 +161,7 @@ public class Images {
* @return A {@link Response} containing the scaled image or an error value. * @return A {@link Response} containing the scaled image or an error value.
*/ */
@GET @GET
@Path("/{path:.+}") @Path("/{path:^(?!uuid).+$}")
public Response getImage( public Response getImage(
@PathParam("content-section") @PathParam("content-section")
final String sectionName, final String sectionName,
@ -220,7 +220,7 @@ public class Images {
* image. * image.
*/ */
@GET @GET
@Path("/{path:.*}/properties") @Path("/{path:^(?!uuid).+$}/properties")
public Response getImageProperties( public Response getImageProperties(
@PathParam("content-section") final String sectionName, @PathParam("content-section") final String sectionName,
@PathParam("path") final String path) { @PathParam("path") final String path) {

View File

@ -18,12 +18,13 @@
*/ */
package org.libreccm.theming.xslt; package org.libreccm.theming.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.theming.ThemeProvider; import org.libreccm.theming.ThemeProvider;
import org.libreccm.theming.ThemeVersion; import org.libreccm.theming.ThemeVersion;
import java.io.InputStream; import java.io.InputStream;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import javax.xml.transform.Source; import javax.xml.transform.Source;
import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerException;
@ -36,6 +37,9 @@ import javax.xml.transform.stream.StreamSource;
*/ */
class CcmUriResolver implements URIResolver { class CcmUriResolver implements URIResolver {
private static final Logger LOGGER = LogManager
.getLogger(CcmUriResolver.class);
private final String theme; private final String theme;
private final ThemeVersion version; private final ThemeVersion version;
private final ThemeProvider themeProvider; private final ThemeProvider themeProvider;
@ -48,6 +52,13 @@ class CcmUriResolver implements URIResolver {
Objects.requireNonNull(version); Objects.requireNonNull(version);
Objects.requireNonNull(themeProvider); Objects.requireNonNull(themeProvider);
LOGGER.debug("Creating new instance of {} with these parameters:",
getClass().getName());
LOGGER.debug("\ttheme = {}", theme);
LOGGER.debug("\tversion = {}", Objects.toString(version));
LOGGER.debug("\tthemeProvider = {}",
themeProvider.getClass().getName());
this.theme = theme; this.theme = theme;
this.version = version; this.version = version;
this.themeProvider = themeProvider; this.themeProvider = themeProvider;
@ -57,12 +68,17 @@ class CcmUriResolver implements URIResolver {
public Source resolve(final String href, public Source resolve(final String href,
final String base) throws TransformerException { final String base) throws TransformerException {
LOGGER.debug("Resolving href = \"{}\" using base = \"{}\"...",
href,
base);
final String path; final String path;
if (base == null) { if (base == null) {
path = href; path = href;
} else { } else {
path = String.join("/", href, base); path = String.join("/", base, href);
} }
LOGGER.debug("Using path \"{}\"...", path);
final InputStream inputStream = themeProvider final InputStream inputStream = themeProvider
.getThemeFileAsStream(theme, version, path) .getThemeFileAsStream(theme, version, path)
@ -76,6 +92,9 @@ class CcmUriResolver implements URIResolver {
version, version,
themeProvider.getClass().getName()))); themeProvider.getClass().getName())));
LOGGER.debug("Resolved href = \"{}\" with base \"{}\" successfully.",
href,
path);
return new StreamSource(inputStream); return new StreamSource(inputStream);
} }

View File

@ -201,6 +201,9 @@ public class XsltThemeProcessor implements ThemeProcessor {
final TransformerFactory transformerFactory = TransformerFactory final TransformerFactory transformerFactory = TransformerFactory
.newInstance(TransformerFactoryImpl.class.getName(), .newInstance(TransformerFactoryImpl.class.getName(),
getClass().getClassLoader()); getClass().getClassLoader());
transformerFactory.setURIResolver(new CcmUriResolver(theme.getName(),
theme.getVersion(),
themeProvider));
final TransformerFactoryImpl transformerFactoryImpl final TransformerFactoryImpl transformerFactoryImpl
= (TransformerFactoryImpl) transformerFactory; = (TransformerFactoryImpl) transformerFactory;
final Configuration configuration = transformerFactoryImpl final Configuration configuration = transformerFactoryImpl
@ -215,9 +218,9 @@ public class XsltThemeProcessor implements ThemeProcessor {
final Transformer transformer; final Transformer transformer;
try { try {
transformer = transformerFactory.newTransformer(xslFileStreamSource); transformer = transformerFactory.newTransformer(xslFileStreamSource);
transformer.setURIResolver(new CcmUriResolver(theme.getName(), // transformer.setURIResolver(new CcmUriResolver(theme.getName(),
theme.getVersion(), // theme.getVersion(),
themeProvider)); // themeProvider));
transformer.setErrorListener(new ErrorListener() { transformer.setErrorListener(new ErrorListener() {
@Override @Override

View File

@ -4,6 +4,8 @@
xmlns:ccm="http://xmlns.libreccm.org" xmlns:ccm="http://xmlns.libreccm.org"
exclude-result-prefixes="ccm xsl"> exclude-result-prefixes="ccm xsl">
<xsl:import href="footer.xsl" />
<xsl:output method="html" <xsl:output method="html"
doctype-system="about:legacy-compat" doctype-system="about:legacy-compat"
indent="yes" indent="yes"
@ -51,7 +53,8 @@
</div> </div>
<!--<xsl:apply-templates select="greetingItem" />--> <!--<xsl:apply-templates select="greetingItem" />-->
</main> </main>
<footer> <xsl:call-template name="footer" />
<!--<footer>
<ul> <ul>
<li> <li>
<a href="/impressum">Impressum</a> <a href="/impressum">Impressum</a>
@ -60,8 +63,7 @@
<a href="/privacy">Privacy</a> <a href="/privacy">Privacy</a>
</li> </li>
</ul> </ul>
</footer> </footer>-->
</body> </body>
</html> </html>
</xsl:template> </xsl:template>