Initial checking for FreemarkerPresentationManager

git-svn-id: https://svn.libreccm.org/ccm/trunk@5819 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2019-01-31 16:47:20 +00:00
parent bcae65f56b
commit 979c04af88
3 changed files with 172 additions and 4 deletions

View File

@ -2,13 +2,13 @@
<requires> <requires>
<table name="inits"/> <table name="inits"/>
<table name="acs_objects"/> <table name="acs_objects"/>
<initializer class="com.arsdigita.core.Initializer" /> <!--<initializer class="com.arsdigita.core.Initializer" />-->
</requires> </requires>
<provides> <!--<provides>
<initializer class="org.librecms.pages.Initializer" /> <initializer class="org.librecms.pages.Initializer" />
</provides> </provides>
<scripts> <scripts>
<schema directory="ccm-pages" /> <schema directory="ccm-pages" />
<data class="org.librecms.pages.Loader" /> <data class="org.librecms.pages.Loader" />
</scripts> </scripts>-->
</load> </load>

View File

@ -0,0 +1,168 @@
package org.libreccm.theming;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.subsite.Site;
import com.arsdigita.templating.PresentationManager;
import com.arsdigita.themedirector.ThemeDirector;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.web.Web;
import com.arsdigita.xml.Document;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import org.w3c.dom.Node;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class FreeMarkerPresentationManager implements PresentationManager {
@Override
public void servePage(final Document document,
final HttpServletRequest request,
final HttpServletResponse response) {
final org.w3c.dom.Document w3cDocument = document.getInternalDocument();
final Node root = w3cDocument.getDocumentElement();
final String currentSiteName = Web.getConfig().getSiteName();
Site subSite;
try {
subSite = Site.findByHostname(currentSiteName);
} catch (DataObjectNotFoundException ex) {
subSite = null;
}
final boolean isSubSite = subSite != null;
final String defaultTheme;
if (subSite == null) {
defaultTheme = ThemeDirector.getThemeDirector().getDefaultTheme()
.getURL();
} else {
defaultTheme = subSite.getStyleDirectory();
}
final String selectedTheme;
if (request.getParameter("theme") == null) {
selectedTheme = defaultTheme;
} else {
selectedTheme = request.getParameter("theme");
}
final String previewParam = request.getParameter("preview-theme");
boolean preview = previewParam != null
&& ("true".equalsIgnoreCase(previewParam)
|| "yes".equalsIgnoreCase(previewParam));
final StringBuilder themePathBuilder = new StringBuilder(
"/themes/");
if (preview) {
themePathBuilder.append("devel-themedir/");
} else {
themePathBuilder.append("published-themedir/");
}
themePathBuilder.append(selectedTheme).append("/");
final String themePath = themePathBuilder.toString();
final String themeManifestPath = String.format("%stheme-manifest.json",
themePath);
final ServletContext servletContext = Web.getServletContext();
// final String themeManifest = "";
final String themeManifest = new BufferedReader(
new InputStreamReader(
servletContext.getResourceAsStream(themeManifestPath),
StandardCharsets.UTF_8))
.lines()
.collect(Collectors.joining(System.lineSeparator()));
String name = "???";
final JsonFactory jsonFactory = new JsonFactory();
try {
final JsonParser parser = jsonFactory.createParser(servletContext
.getResourceAsStream(themeManifestPath));
while (!parser.isClosed()) {
final JsonToken token = parser.nextToken();
if (JsonToken.FIELD_NAME.equals(token)) {
final String fieldName = parser.getCurrentName();
if ("name".equals(fieldName)) {
final JsonToken valueToken = parser.nextToken();
final String value = parser.getValueAsString();
name = value;
}
}
}
} catch (IOException ex) {
throw new UncheckedWrapperException(ex);
}
// ToDo
// Parse theme manifest
// Get Freemarker templates by File API or by HTTP?
// Or via getResourceAsStream?
response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
response.setContentType("text/plain");
try (PrintWriter writer = response.getWriter()) {
writer.append("Data:\n");
writer
.append("Current Site Name: ")
.append(currentSiteName).append("\n");
writer
.append("isSubSite: ")
.append(Boolean.toString(isSubSite))
.append("\n");
writer
.append("default theme: ")
.append(defaultTheme)
.append("\n");
writer
.append("selected theme: ")
.append(selectedTheme)
.append("\n");
writer
.append("preview theme? ")
.append(Boolean.toString(preview))
.append("\n");
writer
.append("themePath: ")
.append(themePath)
.append("\n");
writer
.append("themeManifestPath: ")
.append(themeManifestPath)
.append("\n");
writer
.append("themeManifest: ")
.append(themeManifest)
.append("\n");
writer
.append("theme name: ")
.append(name)
.append("\n");
} catch (IOException ex) {
throw new UncheckedWrapperException(ex);
}
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}

View File

@ -3,7 +3,7 @@
<table name="inits"/> <table name="inits"/>
<table name="acs_objects"/> <table name="acs_objects"/>
<table name="cms_items"/> <table name="cms_items"/>
<table name="ct_publications"/> <!--<table name="ct_publications"/>-->
<initializer class="com.arsdigita.cms.Initializer"/> <initializer class="com.arsdigita.cms.Initializer"/>
<initializer class="com.arsdigita.navigation.Initializer"/> <initializer class="com.arsdigita.navigation.Initializer"/>
<initializer class="com.arsdigita.cms.contenttypes.SciMemberInitializer"/> <initializer class="com.arsdigita.cms.contenttypes.SciMemberInitializer"/>