Improved implementation of script/stylesheet object wrapping to make them writable.
This commit is contained in:
parent
4c3259163b
commit
1aa4bb00d6
3 changed files with 16 additions and 20 deletions
|
@ -6,10 +6,8 @@ import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
@ -38,11 +36,12 @@ import freemarker.cache.ClassTemplateLoader;
|
||||||
import freemarker.cache.FileTemplateLoader;
|
import freemarker.cache.FileTemplateLoader;
|
||||||
import freemarker.cache.MultiTemplateLoader;
|
import freemarker.cache.MultiTemplateLoader;
|
||||||
import freemarker.cache.TemplateLoader;
|
import freemarker.cache.TemplateLoader;
|
||||||
|
import freemarker.ext.beans.BeansWrapper;
|
||||||
import freemarker.template.Configuration;
|
import freemarker.template.Configuration;
|
||||||
import freemarker.template.DefaultObjectWrapper;
|
import freemarker.template.DefaultObjectWrapper;
|
||||||
import freemarker.template.ObjectWrapper;
|
|
||||||
import freemarker.template.Template;
|
import freemarker.template.Template;
|
||||||
import freemarker.template.TemplateException;
|
import freemarker.template.TemplateException;
|
||||||
|
import freemarker.template.TemplateModel;
|
||||||
import freemarker.template.TemplateModelException;
|
import freemarker.template.TemplateModelException;
|
||||||
|
|
||||||
public class FreeMarkerHttpServlet extends VitroHttpServlet {
|
public class FreeMarkerHttpServlet extends VitroHttpServlet {
|
||||||
|
@ -137,18 +136,20 @@ public class FreeMarkerHttpServlet extends VitroHttpServlet {
|
||||||
|
|
||||||
private void setScriptAndStylesheetObjects(String themeDir) {
|
private void setScriptAndStylesheetObjects(String themeDir) {
|
||||||
|
|
||||||
// Temporarily switch to an object wrapper that exposes write methods.
|
// Use an object wrapper that exposes write methods, instead of the
|
||||||
// The templates can add files to the script and stylesheet lists
|
// configuration's object wrapper, which doesn't, so the templates can
|
||||||
// by calling the add() method.
|
// add stylesheets and scripts to the lists by calling their add() methods.
|
||||||
ObjectWrapper defaultWrapper = config.getObjectWrapper();
|
BeansWrapper wrapper = new DefaultObjectWrapper();
|
||||||
config.setObjectWrapper(new DefaultObjectWrapper());
|
try {
|
||||||
|
|
||||||
// Here themeDir SHOULD NOT have the context path already added to it.
|
// Here themeDir SHOULD NOT have the context path already added to it.
|
||||||
setSharedVariable("stylesheets", new StylesheetList(themeDir));
|
TemplateModel stylesheets = wrapper.wrap(new StylesheetList(themeDir));
|
||||||
setSharedVariable("scripts", new ScriptList());
|
setSharedVariable("stylesheets", stylesheets);
|
||||||
|
|
||||||
config.setObjectWrapper(defaultWrapper);
|
|
||||||
|
|
||||||
|
TemplateModel scripts = wrapper.wrap(new ScriptList());
|
||||||
|
setSharedVariable("scripts", scripts);
|
||||||
|
} catch (TemplateModelException e) {
|
||||||
|
log.error("Error creating stylesheet and script TemplateModels");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define template locations. Template loader will look first in the theme-specific
|
// Define template locations. Template loader will look first in the theme-specific
|
||||||
|
|
|
@ -70,9 +70,6 @@ public class IndividualView extends ViewObject {
|
||||||
return primaryLink;
|
return primaryLink;
|
||||||
}
|
}
|
||||||
|
|
||||||
// RY Here we really want to return List<LinkView> objects. Instead of writing the LinkView class by hand,
|
|
||||||
// it would be better to use an alternate FreeMarker BeanWrapper that creates a read-only template data object.
|
|
||||||
// That would also be used to return the lists of object properties and data properties of the individual.
|
|
||||||
public List<Link> getLinks() {
|
public List<Link> getLinks() {
|
||||||
List<Link> additionalLinks = individual.getLinksList();
|
List<Link> additionalLinks = individual.getLinksList();
|
||||||
List<Link> links = new ArrayList<Link>(additionalLinks.size()+1);
|
List<Link> links = new ArrayList<Link>(additionalLinks.size()+1);
|
||||||
|
|
|
@ -44,8 +44,6 @@ public class VClassGroupView extends ViewObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<VClassView> getClasses() {
|
public List<VClassView> getClasses() {
|
||||||
// Do we need to store the classes as an instance member? Would we ever access this method more than once per template?
|
|
||||||
// Don't do this in the constructor, since we might not need it.
|
|
||||||
if (classes == null) {
|
if (classes == null) {
|
||||||
List<VClass> classList = vClassGroup.getVitroClassList();
|
List<VClass> classList = vClassGroup.getVitroClassList();
|
||||||
classes = new ArrayList<VClassView>();
|
classes = new ArrayList<VClassView>();
|
||||||
|
|
Loading…
Add table
Reference in a new issue