added the Velocity renderer (from the new venice-dynamo project) to

Venice; will be used for the post box soon
This commit is contained in:
Eric J. Bowersox 2004-07-26 05:04:27 +00:00
parent 899863578d
commit 7d3c167733
14 changed files with 859 additions and 181 deletions

View File

@ -65,3 +65,8 @@ jacl.base=/usr/local/java/jacl1.3.1
rhino.base=/usr/local/java/rhino1_5R4_1 rhino.base=/usr/local/java/rhino1_5R4_1
# rhino.lib=${rhino.base} # rhino.lib=${rhino.base}
# rhino.jarfile=js.jar # rhino.jarfile=js.jar
# [Location of Velocity 1.4]
velocity.base=/usr/local/java/velocity-1.4
# velocity.lib=${velocity.base}
# velocity.jarfile=velocity-1.4.jar

View File

@ -79,6 +79,11 @@
<property name="rhino.lib" value="${rhino.base}"/> <property name="rhino.lib" value="${rhino.base}"/>
<property name="rhino.jarfile" value="js.jar"/> <property name="rhino.jarfile" value="js.jar"/>
<!-- [Location of Velocity 1.4] -->
<property name="velocity.base" value="../velocity"/>
<property name="velocity.lib" value="${velocity.base}"/>
<property name="velocity.jarfile" value="velocity-1.4.jar"/>
<!-- ============================================================================ <!-- ============================================================================
Path references Path references
============================================================================ --> ============================================================================ -->
@ -90,6 +95,7 @@
<fileset dir="${regexp.lib}" includes="${regexp.jarfile}"/> <fileset dir="${regexp.lib}" includes="${regexp.jarfile}"/>
<fileset dir="${log4j.lib}" includes="${log4j.jarfile}"/> <fileset dir="${log4j.lib}" includes="${log4j.jarfile}"/>
<fileset dir="${bsf.lib}" includes="${bsf.jarfile}"/> <fileset dir="${bsf.lib}" includes="${bsf.jarfile}"/>
<fileset dir="${velocity.lib}" includes="${velocity.jarfile}"/>
</path> </path>
<!-- ============================================================================ <!-- ============================================================================
@ -136,6 +142,7 @@
<mkdir dir="${deploy.home}/WEB-INF"/> <mkdir dir="${deploy.home}/WEB-INF"/>
<mkdir dir="${deploy.home}/WEB-INF/scripts"/> <mkdir dir="${deploy.home}/WEB-INF/scripts"/>
<mkdir dir="${deploy.home}/WEB-INF/rpcscripts"/> <mkdir dir="${deploy.home}/WEB-INF/rpcscripts"/>
<mkdir dir="${deploy.home}/WEB-INF/templates"/>
</target> </target>
<!-- ============================================================================ <!-- ============================================================================
@ -153,6 +160,9 @@
<copy todir="${deploy.home}/WEB-INF/rpcscripts"> <!-- this copies all the RPC scripts --> <copy todir="${deploy.home}/WEB-INF/rpcscripts"> <!-- this copies all the RPC scripts -->
<fileset dir="rpcscripts"/> <fileset dir="rpcscripts"/>
</copy> </copy>
<copy todir="${deploy.home}/WEB-INF/templates"> <!-- this copies all the RPC scripts -->
<fileset dir="templates"/>
</copy>
</target> </target>
<!-- ============================================================================ <!-- ============================================================================
@ -176,6 +186,7 @@
<fileset dir="${regexp.lib}" includes="${regexp.jarfile}"/> <fileset dir="${regexp.lib}" includes="${regexp.jarfile}"/>
<fileset dir="${log4j.lib}" includes="${log4j.jarfile}"/> <fileset dir="${log4j.lib}" includes="${log4j.jarfile}"/>
<fileset dir="${bsf.lib}" includes="${bsf.jarfile}"/> <fileset dir="${bsf.lib}" includes="${bsf.jarfile}"/>
<fileset dir="${velocity.lib}" includes="${velocity.jarfile}"/>
<!-- <fileset dir="${jacl.lib}" includes="${jacl.jarfile}, ${jacl.tcljarfile}"/> --> <!-- <fileset dir="${jacl.lib}" includes="${jacl.jarfile}, ${jacl.tcljarfile}"/> -->
<fileset dir="${rhino.lib}" includes="${rhino.jarfile}"/> <fileset dir="${rhino.lib}" includes="${rhino.jarfile}"/>
<fileset dir="lib" includes="*.jar"/> <fileset dir="lib" includes="*.jar"/>

View File

@ -34,6 +34,9 @@
<!-- The temporary directory for script compilation, relative to the application root. --> <!-- The temporary directory for script compilation, relative to the application root. -->
<temp-dir>WEB-INF/temp</temp-dir> <temp-dir>WEB-INF/temp</temp-dir>
<!-- The directory for Velocity templates, relative to the application root. -->
<template-dir>WEB-INF/templates</template-dir>
</file-paths> </file-paths>
<!-- Paths of resources referred to by their URIs in the user interface. --> <!-- Paths of resources referred to by their URIs in the user interface. -->

View File

@ -49,24 +49,25 @@ public class RootConfig implements LinkTypes, ColorSelectors
private static Logger logger = Logger.getLogger(RootConfig.class); private static Logger logger = Logger.getLogger(RootConfig.class);
private static final Map link_types; private static final Map s_link_types;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Attributes * Attributes
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private String script_directory; // the scripts directory private String m_script_directory; // the scripts directory
private String rpc_script_directory; // the RPC scripts directory private String m_rpc_script_directory; // the RPC scripts directory
private String temp_directory; // the temporary directory private String m_temp_directory; // the temporary directory
private String image_path; // the images path private String m_template_directory; // the Velocity templates directory
private String static_path; // the static files path private String m_image_path; // the images path
private String external_static_path; // the external static files path private String m_static_path; // the static files path
private String format_path; // the JSP formatter path private String m_external_static_path; // the external static files path
private String blank_photo_path; // the "photo not available" path private String m_format_path; // the JSP formatter path
private Properties properties; // the property list private String m_blank_photo_path; // the "photo not available" path
private String frame_jsp_name; // the name of the frame JSP private Properties m_properties; // the property list
private String site_title; // the title for the site private String m_frame_jsp_name; // the name of the frame JSP
private String m_site_title; // the title for the site
private File stylesheet; // the stylesheet file reference private File stylesheet; // the stylesheet file reference
private long stylesheet_lastchange; // when was the stylesheet last changed? private long stylesheet_lastchange; // when was the stylesheet last changed?
private boolean smart_tags; // do we want to allow M$ IE6 Smart Tags? private boolean smart_tags; // do we want to allow M$ IE6 Smart Tags?
@ -74,23 +75,23 @@ public class RootConfig implements LinkTypes, ColorSelectors
private String site_logo_href = null; // the HREF to surround the site logo with private String site_logo_href = null; // the HREF to surround the site logo with
private int site_logo_href_type = -1; // the type of the above href private int site_logo_href_type = -1; // the type of the above href
private String venice_logo_tag; // the HTML snippet containing the Venice logo private String venice_logo_tag; // the HTML snippet containing the Venice logo
private String page_icon_tags = null; // the HTML snippet containing the page icons private String m_page_icon_tags = null; // the HTML snippet containing the page icons
private String font_face; // the default font face name private String m_font_face; // the default font face name
private String base_font; // the default <BASEFONT> tag private String m_base_font; // the default <BASEFONT> tag
private Map m_font_sizes; // the stock font sizes private Map m_font_sizes; // the stock font sizes
private ColorPalette colors; // all the colors private ColorPalette m_colors; // all the colors
private boolean html_comments; // do we want to embed HTML comments? private boolean html_comments; // do we want to embed HTML comments?
private ButtonHolder buttons; // the button definitions private ButtonHolder buttons; // the button definitions
private String[] content_hdr; // the content header parts private String[] content_hdr; // the content header parts
private Remapper remapper; // the URL remapper private Remapper remapper; // the URL remapper
private int rpc_timeout = 60; // RPC session timeout private int m_rpc_timeout = 60; // RPC session timeout
private List xmlrpc_methods; // the list of XML-RPC methods private List m_xmlrpc_methods; // the list of XML-RPC methods
private StockMessages stock_messages; // the stock messages private StockMessages m_stock_messages; // the stock messages
private Map menus; // the menus private Map m_menus; // the menus
private Map m_menu_templates; // the menu templates private Map m_menu_templates; // the menu templates
private DialogManager dialogs; // the dialog manager private DialogManager m_dialogs; // the dialog manager
private SideBoxManager sideboxes; // the sidebox manager private SideBoxManager m_sideboxes; // the sidebox manager
private CommunityMenuFactory comm_menu_fact; // the community menu factory private CommunityMenuFactory m_comm_menu_fact; // the community menu factory
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -120,84 +121,47 @@ public class RootConfig implements LinkTypes, ColorSelectors
services_config = root_file_path + services_config; services_config = root_file_path + services_config;
// Get the full pathname of the script directory. // Get the full pathname of the script directory.
script_directory = loader.configGetSubElementText(sect_h,"script-dir"); m_script_directory = getRelativeDirectory(sect_h,"script-dir",root_file_path,true);
if (!(script_directory.startsWith("/")))
script_directory = root_file_path + script_directory;
if (!(script_directory.endsWith("/")))
script_directory = script_directory + "/";
// Test to make sure the script directory exists.
File t_file = new File(script_directory);
if (!(t_file.isDirectory()))
{ // script directory does not exist - throw exception
logger.fatal("<script-dir/> directory \"" + script_directory + "\" is not a directory");
throw new ConfigException("specified <script-dir/> is not a directory",
sect_h.getSubElement("script-dir"));
} // end if
// Get the full pathname of the RPC script directory. // Get the full pathname of the RPC script directory.
rpc_script_directory = loader.configGetSubElementText(sect_h,"rpc-script-dir"); m_rpc_script_directory = getRelativeDirectory(sect_h,"rpc-script-dir",root_file_path,true);
if (!(rpc_script_directory.startsWith("/")))
rpc_script_directory = root_file_path + rpc_script_directory;
if (!(rpc_script_directory.endsWith("/")))
rpc_script_directory = rpc_script_directory + "/";
// Test to make sure the RPC script directory exists.
t_file = new File(rpc_script_directory);
if (!(t_file.isDirectory()))
{ // script directory does not exist - throw exception
logger.fatal("<rpc-script-dir/> directory \"" + rpc_script_directory + "\" is not a directory");
throw new ConfigException("specified <rpc-script-dir/> is not a directory",
sect_h.getSubElement("rpc-script-dir"));
} // end if
// Get the full pathname of the temporary directory. // Get the full pathname of the temporary directory.
temp_directory = loader.configGetSubElementText(sect_h,"temp-dir"); m_temp_directory = getRelativeDirectory(sect_h,"temp-dir",root_file_path,false);
if (!(temp_directory.startsWith("/")))
temp_directory = root_file_path + temp_directory;
// Test to make sure the temporary directory exists. // Get the full pathname of the Velocity template directory.
t_file = new File(temp_directory); m_template_directory = getRelativeDirectory(sect_h,"template-dir",root_file_path,false);
if (!(t_file.isDirectory()))
{ // temporary directory does not exist - throw exception
logger.fatal("<temp-dir/> directory \"" + temp_directory + "\" is not a directory");
throw new ConfigException("specified <temp-dir/> is not a directory",
sect_h.getSubElement("temp-dir"));
} // end if
// Get the <uri-paths/> section. // Get the <uri-paths/> section.
sect = loader.configGetSubSection(root_h,"uri-paths"); sect = loader.configGetSubSection(root_h,"uri-paths");
sect_h = new DOMElementHelper(sect); sect_h = new DOMElementHelper(sect);
// Get the images path. // Get the images path.
image_path = loader.configGetSubElementText(sect_h,"image"); m_image_path = loader.configGetSubElementText(sect_h,"image");
if (!(image_path.endsWith("/"))) if (!(m_image_path.endsWith("/")))
image_path = image_path + "/"; m_image_path = m_image_path + "/";
// Get the static path. // Get the static path.
static_path = loader.configGetSubElementText(sect_h,"static"); m_static_path = loader.configGetSubElementText(sect_h,"static");
if (!(static_path.endsWith("/"))) if (!(m_static_path.endsWith("/")))
static_path = static_path + "/"; m_static_path = m_static_path + "/";
// Get the external static path. // Get the external static path.
external_static_path = loader.configGetSubElementText(sect_h,"external-static"); m_external_static_path = loader.configGetSubElementText(sect_h,"external-static");
if (!(external_static_path.endsWith("/"))) if (!(m_external_static_path.endsWith("/")))
external_static_path = external_static_path + "/"; m_external_static_path = m_external_static_path + "/";
// Get the format JSP path. // Get the format JSP path.
format_path = loader.configGetSubElementText(sect_h,"format-jsp"); m_format_path = loader.configGetSubElementText(sect_h,"format-jsp");
if (!(format_path.endsWith("/"))) if (!(m_format_path.endsWith("/")))
format_path = format_path + "/"; m_format_path = m_format_path + "/";
// Get the pathname of the "photo not available" image. // Get the pathname of the "photo not available" image.
blank_photo_path = loader.configGetSubElementText(sect_h,"photo-not-avail"); m_blank_photo_path = loader.configGetSubElementText(sect_h,"photo-not-avail");
Element sect1 = sect_h.getSubElement("photo-not-avail"); Element sect1 = sect_h.getSubElement("photo-not-avail");
DOMElementHelper sect1_h = new DOMElementHelper(sect1); DOMElementHelper sect1_h = new DOMElementHelper(sect1);
if (sect1_h.hasAttribute("fixup")) if (sect1_h.hasAttribute("fixup"))
blank_photo_path = image_path + blank_photo_path; m_blank_photo_path = m_image_path + m_blank_photo_path;
// Load the default properties from the resources. // Load the default properties from the resources.
Properties defprops = new Properties(); Properties defprops = new Properties();
@ -212,7 +176,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
} // end catch } // end catch
properties = new Properties(defprops); // create the actual properties m_properties = new Properties(defprops); // create the actual properties
// Get the <properties/> section. // Get the <properties/> section.
sect = loader.configGetSubSection(root_h,"properties"); sect = loader.configGetSubSection(root_h,"properties");
@ -229,7 +193,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
if ((n.getNodeType()==Node.ELEMENT_NODE) && n.getNodeName().equals("property")) if ((n.getNodeType()==Node.ELEMENT_NODE) && n.getNodeName().equals("property"))
{ // add the property value to the map { // add the property value to the map
sect1 = (Element)n; sect1 = (Element)n;
properties.setProperty(loader.configGetAttribute(sect1,"name"),loader.configGetText(sect1)); m_properties.setProperty(loader.configGetAttribute(sect1,"name"),loader.configGetText(sect1));
} // end if } // end if
@ -243,10 +207,10 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Get the name of the frame JSP. // Get the name of the frame JSP.
String tmp = loader.configGetSubElementText(sect_h,"jsp-name"); String tmp = loader.configGetSubElementText(sect_h,"jsp-name");
frame_jsp_name = format_path + tmp; m_frame_jsp_name = m_format_path + tmp;
// Get the site title. // Get the site title.
site_title = sect_h.getSubElementText("site-title"); m_site_title = sect_h.getSubElementText("site-title");
// Get the base font size. // Get the base font size.
Integer bf_size = sect_h.getSubElementInt("basefont-size"); Integer bf_size = sect_h.getSubElementInt("basefont-size");
@ -285,7 +249,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
sect1 = loader.configGetSubSection(sect_h,"site-logo"); sect1 = loader.configGetSubSection(sect_h,"site-logo");
sect1_h = new DOMElementHelper(sect1); sect1_h = new DOMElementHelper(sect1);
StringBuffer tmpbuf = new StringBuffer("<img src=\""); StringBuffer tmpbuf = new StringBuffer("<img src=\"");
tmpbuf.append(loader.configGetText(sect1_h)).append("\" alt=\"").append(site_title).append("\" width=\""); tmpbuf.append(loader.configGetText(sect1_h)).append("\" alt=\"").append(m_site_title).append("\" width=\"");
// Get the logo width. // Get the logo width.
Integer itmp = sect1_h.getAttributeInt("width"); Integer itmp = sect1_h.getAttributeInt("width");
@ -318,7 +282,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
{ // save off the HREF, get the type of the link { // save off the HREF, get the type of the link
site_logo_href = tmp; site_logo_href = tmp;
tmp = loader.configGetAttribute(sect1,"type"); tmp = loader.configGetAttribute(sect1,"type");
itmp = (Integer)(link_types.get(tmp)); itmp = (Integer)(s_link_types.get(tmp));
if (itmp==null) if (itmp==null)
{ // this is not good! { // this is not good!
logger.fatal("<site-logo/> type=\"" + tmp + "\" is not a valid value"); logger.fatal("<site-logo/> type=\"" + tmp + "\" is not a valid value");
@ -336,7 +300,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
itmp = new Integer(100); itmp = new Integer(100);
int tmp_width = (VENICE_IMAGE_WIDTH * itmp.intValue()) / 100; int tmp_width = (VENICE_IMAGE_WIDTH * itmp.intValue()) / 100;
int tmp_height = (VENICE_IMAGE_HEIGHT * itmp.intValue()) / 100; int tmp_height = (VENICE_IMAGE_HEIGHT * itmp.intValue()) / 100;
venice_logo_tag = "<a href=\"" + VENICE_URL + "\" target=\"_blank\"><img src=\"" + image_path venice_logo_tag = "<a href=\"" + VENICE_URL + "\" target=\"_blank\"><img src=\"" + m_image_path
+ VENICE_IMAGE + "\" alt=\"" + VENICE_ALT + "\" width=\"" + tmp_width + "\" height=\"" + VENICE_IMAGE + "\" alt=\"" + VENICE_ALT + "\" width=\"" + tmp_width + "\" height=\""
+ tmp_height + "\" border=\"0\" hspace=\"0\" vspace=\"0\" /></a>"; + tmp_height + "\" border=\"0\" hspace=\"0\" vspace=\"0\" /></a>";
@ -362,17 +326,17 @@ public class RootConfig implements LinkTypes, ColorSelectors
} // end if } // end if
if (page_icon_1==null) if (page_icon_1==null)
page_icon_tags = page_icon_2; // just use "shortcut icon" m_page_icon_tags = page_icon_2; // just use "shortcut icon"
else else
page_icon_tags = page_icon_1 + page_icon_2; // use both tags m_page_icon_tags = page_icon_1 + page_icon_2; // use both tags
// Get the <rendering/> section. // Get the <rendering/> section.
sect = loader.configGetSubSection(root_h,"rendering"); sect = loader.configGetSubSection(root_h,"rendering");
sect_h = new DOMElementHelper(sect); sect_h = new DOMElementHelper(sect);
// Get the default font face name. // Get the default font face name.
font_face = loader.configGetSubElementText(sect_h,"font"); m_font_face = loader.configGetSubElementText(sect_h,"font");
base_font = "<basefont face=\"" + font_face + "\" size=\"" + bf_size.intValue() + "\" />"; m_base_font = "<basefont face=\"" + m_font_face + "\" size=\"" + bf_size.intValue() + "\" />";
// Load the stock font sizes. // Load the stock font sizes.
sect1 = sect_h.getSubElement("font-sizes"); sect1 = sect_h.getSubElement("font-sizes");
@ -404,7 +368,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
m_font_sizes = Collections.EMPTY_MAP; m_font_sizes = Collections.EMPTY_MAP;
// Load all the colors. // Load all the colors.
colors = new ColorPalette(loader.configGetSubSection(sect_h,"colors")); m_colors = new ColorPalette(loader.configGetSubSection(sect_h,"colors"));
// Set up the content header array. // Set up the content header array.
content_hdr = new String[5]; content_hdr = new String[5];
@ -419,7 +383,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Get the "Buttons" section and initialize it. // Get the "Buttons" section and initialize it.
sect1 = loader.configGetSubSection(sect_h,"buttons"); sect1 = loader.configGetSubSection(sect_h,"buttons");
buttons = new ButtonHolder(sect1,image_path); buttons = new ButtonHolder(sect1,m_image_path);
// Get the <remapper/> section. // Get the <remapper/> section.
sect = loader.configGetSubSection(root_h,"remapper"); sect = loader.configGetSubSection(root_h,"remapper");
@ -437,8 +401,8 @@ public class RootConfig implements LinkTypes, ColorSelectors
Integer xtmp = sect_h.getSubElementInt("session-timeout"); Integer xtmp = sect_h.getSubElementInt("session-timeout");
if (xtmp==null) if (xtmp==null)
throw new ConfigException("<session-timeout/> value is not an integer",sect); throw new ConfigException("<session-timeout/> value is not an integer",sect);
rpc_timeout = xtmp.intValue(); m_rpc_timeout = xtmp.intValue();
if (rpc_timeout<=0) if (m_rpc_timeout<=0)
throw new ConfigException("<session-timeout/> value is invalid",sect); throw new ConfigException("<session-timeout/> value is invalid",sect);
} // end if } // end if
@ -460,11 +424,11 @@ public class RootConfig implements LinkTypes, ColorSelectors
} // end for } // end for
if (tmp_alist.isEmpty()) if (tmp_alist.isEmpty())
xmlrpc_methods = Collections.EMPTY_LIST; m_xmlrpc_methods = Collections.EMPTY_LIST;
else else
{ // save off the methods list { // save off the methods list
tmp_alist.trimToSize(); tmp_alist.trimToSize();
xmlrpc_methods = Collections.unmodifiableList(tmp_alist); m_xmlrpc_methods = Collections.unmodifiableList(tmp_alist);
} // end else } // end else
@ -472,7 +436,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
sect = loader.configGetSubSection(root_h,"messages"); sect = loader.configGetSubSection(root_h,"messages");
// Initialize the stock messages list. // Initialize the stock messages list.
stock_messages = new StockMessages(sect); m_stock_messages = new StockMessages(sect);
// Get the <menu-definitions/> section. // Get the <menu-definitions/> section.
sect = loader.configGetSubSection(root_h,"menu-definitions"); sect = loader.configGetSubSection(root_h,"menu-definitions");
@ -495,9 +459,9 @@ public class RootConfig implements LinkTypes, ColorSelectors
} // end for } // end for
if (tmap.isEmpty()) if (tmap.isEmpty())
menus = Collections.EMPTY_MAP; m_menus = Collections.EMPTY_MAP;
else else
menus = Collections.unmodifiableMap(tmap); m_menus = Collections.unmodifiableMap(tmap);
// Get the <menu-template-definitions/> section. // Get the <menu-template-definitions/> section.
sect = loader.configGetSubSection(root_h,"menu-template-definitions"); sect = loader.configGetSubSection(root_h,"menu-template-definitions");
@ -528,7 +492,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
sect = loader.configGetSubSection(root_h,"dialog-definitions"); sect = loader.configGetSubSection(root_h,"dialog-definitions");
// Initialize the dialog manager. // Initialize the dialog manager.
dialogs = new DialogManager(this,sect); m_dialogs = new DialogManager(this,sect);
// done with the ui-config.xml file // done with the ui-config.xml file
// Load up the sidebox-config.xml file. // Load up the sidebox-config.xml file.
@ -536,7 +500,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
root = loader.configGetRootElement(doc,"sidebox-config"); root = loader.configGetRootElement(doc,"sidebox-config");
// Create the sidebox manager. // Create the sidebox manager.
sideboxes = new SideBoxManager(root); m_sideboxes = new SideBoxManager(root);
// done with the sidebox-config.xml file // done with the sidebox-config.xml file
// Load up the services-config.xml file. // Load up the services-config.xml file.
@ -545,7 +509,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
root_h = new DOMElementHelper(root); root_h = new DOMElementHelper(root);
// Get the community section and pass it to the CommunityMenuFactory. // Get the community section and pass it to the CommunityMenuFactory.
comm_menu_fact = new CommunityMenuFactory(root_h.getSubElement("community"),this); m_comm_menu_fact = new CommunityMenuFactory(root_h.getSubElement("community"),this);
} // end constructor } // end constructor
@ -554,6 +518,32 @@ public class RootConfig implements LinkTypes, ColorSelectors
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private static final String getRelativeDirectory(DOMElementHelper sect_h, String tagname, String root_file_path,
boolean addslash) throws ConfigException
{
XMLLoader loader = XMLLoader.get();
// Get the full pathname of the directory.
String rc = loader.configGetSubElementText(sect_h,tagname);
if (!(rc.startsWith("/")))
rc = root_file_path + rc;
if (addslash && !(rc.endsWith("/")))
rc += "/";
// Test to make sure the directory exists.
File tmp = new File(rc);
if (!(tmp.isDirectory()))
{ // directory does not exist, throw exception
logger.fatal("<" + tagname + "/> directory \"" + rc + "\" is not a directory");
throw new ConfigException("specified <" + tagname + "/> is not a directory",
sect_h.getSubElement(tagname));
} // end if
return rc;
} // end getRelativeDirectory
private final String mapFontSize(String sz) private final String mapFontSize(String sz)
{ {
String rc = (String)(m_font_sizes.get(sz)); String rc = (String)(m_font_sizes.get(sz));
@ -568,64 +558,70 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getTemporaryPath() public final String getTemporaryPath()
{ {
return temp_directory; return m_temp_directory;
} // end getTemporaryPath } // end getTemporaryPath
public final String getVelocityTemplateDirectory()
{
return m_template_directory;
} // end getVelocityTemplateDirectory
public final String getImagePath(String img) public final String getImagePath(String img)
{ {
return image_path + img; return m_image_path + img;
} // end getImagePath } // end getImagePath
public final String getStaticPath(String s) public final String getStaticPath(String s)
{ {
return static_path + s; return m_static_path + s;
} // end getImagePath } // end getImagePath
public final String getExternalStaticPath(String s) public final String getExternalStaticPath(String s)
{ {
return external_static_path + s; return m_external_static_path + s;
} // end getExternalStaticPath } // end getExternalStaticPath
public final String getFormatJSPPath(String jsp) public final String getFormatJSPPath(String jsp)
{ {
return format_path + jsp; return m_format_path + jsp;
} // end getFormatJSPPath } // end getFormatJSPPath
public final String getScriptPath(String sname) public final String getScriptPath(String sname)
{ {
return script_directory + sname; return m_script_directory + sname;
} // end getScriptPath } // end getScriptPath
public final String getRPCScriptPath(String sname) public final String getRPCScriptPath(String sname)
{ {
return rpc_script_directory + sname; return m_rpc_script_directory + sname;
} // end getRPCScriptPath } // end getRPCScriptPath
public final String getFrameJSPName() public final String getFrameJSPName()
{ {
return frame_jsp_name; return m_frame_jsp_name;
} // end getFrameJSPName } // end getFrameJSPName
public final String getPageTitle(String t) public final String getPageTitle(String t)
{ {
if (site_title==null) if (m_site_title==null)
return t; return t;
else else
return t + " - " + site_title; return t + " - " + m_site_title;
} // end getPageTitle } // end getPageTitle
public final String getBaseFontTag() public final String getBaseFontTag()
{ {
return base_font; return m_base_font;
} // end getBaseFontTag } // end getBaseFontTag
@ -659,36 +655,36 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Set up the replacements map to replace the various parameters. // Set up the replacements map to replace the various parameters.
HashMap vars = new HashMap(); HashMap vars = new HashMap();
vars.put("font",font_face); vars.put("font",m_font_face);
colors.fillParameterMap("color.",vars); m_colors.fillParameterMap("color.",vars);
return StringUtil.replaceAllVariables(raw_data.toString(),vars); return StringUtil.replaceAllVariables(raw_data.toString(),vars);
} // end loadStyleSheetData } // end loadStyleSheetData
public final String getColor(int selector) public final String getColor(int selector)
{ {
return colors.getColor(selector); return m_colors.getColor(selector);
} // end getColor } // end getColor
public final String getColor(String name) public final String getColor(String name)
{ {
return colors.getColor(name); return m_colors.getColor(name);
} // end getColor } // end getColor
public final String getFontTag(int colorsel, int size) public final String getFontTag(int colorsel, int size)
{ {
return "<font face=\"" + font_face + "\" color=\"" + colors.getColor(colorsel) + "\" size=\"" + size + "\">"; return "<font face=\"" + m_font_face + "\" color=\"" + m_colors.getColor(colorsel) + "\" size=\"" + size + "\">";
} // end getFontTag } // end getFontTag
public final String getFontTag(String color, int size) public final String getFontTag(String color, int size)
{ {
StringBuffer rc = new StringBuffer("<font face=\""); StringBuffer rc = new StringBuffer("<font face=\"");
rc.append(font_face).append("\" size=\"").append(size).append("\""); rc.append(m_font_face).append("\" size=\"").append(size).append("\"");
if (color!=null) if (color!=null)
rc.append(" color=\"").append(colors.getColor(color)).append("\""); rc.append(" color=\"").append(m_colors.getColor(color)).append("\"");
rc.append('>'); rc.append('>');
return rc.toString(); return rc.toString();
@ -697,7 +693,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getFontTag(int colorsel, String size) public final String getFontTag(int colorsel, String size)
{ {
StringBuffer rc = new StringBuffer("<font face=\""); StringBuffer rc = new StringBuffer("<font face=\"");
rc.append(font_face).append("\" color=\"").append(colors.getColor(colorsel)).append('\"'); rc.append(m_font_face).append("\" color=\"").append(m_colors.getColor(colorsel)).append('\"');
if (size!=null) if (size!=null)
rc.append(" size=\"").append(mapFontSize(size)).append('\"'); rc.append(" size=\"").append(mapFontSize(size)).append('\"');
rc.append('>'); rc.append('>');
@ -708,9 +704,9 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getFontTag(String color, String size) public final String getFontTag(String color, String size)
{ {
StringBuffer rc = new StringBuffer("<font face=\""); StringBuffer rc = new StringBuffer("<font face=\"");
rc.append(font_face).append("\""); rc.append(m_font_face).append("\"");
if (color!=null) if (color!=null)
rc.append(" color=\"").append(colors.getColor(color)).append("\""); rc.append(" color=\"").append(m_colors.getColor(color)).append("\"");
if (size!=null) if (size!=null)
rc.append(" size=\"").append(mapFontSize(size)).append('\"'); rc.append(" size=\"").append(mapFontSize(size)).append('\"');
rc.append('>'); rc.append('>');
@ -750,20 +746,20 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final int convertLinkType(String str) public final int convertLinkType(String str)
{ {
Integer tmp = (Integer)(link_types.get(str.trim().toLowerCase())); Integer tmp = (Integer)(s_link_types.get(str.trim().toLowerCase()));
return (tmp==null) ? -1 : tmp.intValue(); return (tmp==null) ? -1 : tmp.intValue();
} // end convertLinkType } // end convertLinkType
public final String getStockMessage(String key) public final String getStockMessage(String key)
{ {
return stock_messages.get(key); return m_stock_messages.get(key);
} // end getStockMessage } // end getStockMessage
public final String getStockMessage(String key, Map vars) public final String getStockMessage(String key, Map vars)
{ {
return stock_messages.getReplace(key,vars); return m_stock_messages.getReplace(key,vars);
} // end getStockMessage } // end getStockMessage
@ -781,7 +777,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getPageIconTags() public final String getPageIconTags()
{ {
return page_icon_tags; return m_page_icon_tags;
} // end getPageIconTags } // end getPageIconTags
@ -798,13 +794,13 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final MenuComponent getMenu(String name) public final MenuComponent getMenu(String name)
{ {
return (MenuComponent)(menus.get(name)); return (MenuComponent)(m_menus.get(name));
} // end getMenu } // end getMenu
public final MenuComponent getMenu(String name, Map vars) public final MenuComponent getMenu(String name, Map vars)
{ {
return new Menu((Menu)(menus.get(name)),vars); return new Menu((Menu)(m_menus.get(name)),vars);
} // end getMenu } // end getMenu
@ -828,63 +824,63 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final Dialog getDialog(String name) public final Dialog getDialog(String name)
{ {
return dialogs.getDialog(name); return m_dialogs.getDialog(name);
} // end getDialog } // end getDialog
public final SideBoxManager getSideBoxManager() public final SideBoxManager getSideBoxManager()
{ {
return sideboxes; return m_sideboxes;
} // end getSideBoxManager } // end getSideBoxManager
public final String getBlankPhoto() public final String getBlankPhoto()
{ {
return blank_photo_path; return m_blank_photo_path;
} // end getBlankPhoto } // end getBlankPhoto
public final String getProperty(String name) public final String getProperty(String name)
{ {
return properties.getProperty(name); return m_properties.getProperty(name);
} // end getProperty } // end getProperty
public final String getProperty(String name, String default_val) public final String getProperty(String name, String default_val)
{ {
return properties.getProperty(name,default_val); return m_properties.getProperty(name,default_val);
} // end getProperty } // end getProperty
public final CommunityMenu getCommunityMenu(CommunityContext comm) public final CommunityMenu getCommunityMenu(CommunityContext comm)
{ {
return comm_menu_fact.createMenu(comm); return m_comm_menu_fact.createMenu(comm);
} // end getCommunityMenu } // end getCommunityMenu
public final String getDefaultServletAddress(RequestInput inp, CommunityContext comm) public final String getDefaultServletAddress(RequestInput inp, CommunityContext comm)
{ {
return comm_menu_fact.getDefaultServletAddress(inp,comm); return m_comm_menu_fact.getDefaultServletAddress(inp,comm);
} // end getDefaultServletAddress } // end getDefaultServletAddress
public final int getRpcSessionTimeout() public final int getRpcSessionTimeout()
{ {
return rpc_timeout; return m_rpc_timeout;
} // end getRpcSessionTimeout } // end getRpcSessionTimeout
public final List getXmlRpcMethods() public final List getXmlRpcMethods()
{ {
return xmlrpc_methods; return m_xmlrpc_methods;
} // end getXmlRpcMethods } // end getXmlRpcMethods
public final void addFormatParams(Map map) public final void addFormatParams(Map map)
{ {
// add font and colors first // add font and colors first
map.put("font",font_face); map.put("font",m_font_face);
colors.fillParameterMap("color.",map); m_colors.fillParameterMap("color.",map);
// now add font sizes // now add font sizes
for (Iterator it=m_font_sizes.entrySet().iterator(); it.hasNext(); ) for (Iterator it=m_font_sizes.entrySet().iterator(); it.hasNext(); )
@ -908,7 +904,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
m.put("servlet",new Integer(SERVLET)); m.put("servlet",new Integer(SERVLET));
m.put("frame",new Integer(FRAME)); m.put("frame",new Integer(FRAME));
m.put("fullservlet",new Integer(FULLSERVLET)); m.put("fullservlet",new Integer(FULLSERVLET));
link_types = Collections.unmodifiableMap(m); s_link_types = Collections.unmodifiableMap(m);
} // end static initializer } // end static initializer

View File

@ -35,6 +35,8 @@ public interface HTMLRendering extends ColorSelectors, LinkTypes
public String formatURL(String url, int type); public String formatURL(String url, int type);
public String formatURL(String url, String type);
public String formatDate(Date date); public String formatDate(Date date);
public String getFontTag(int colorsel, int size); public String getFontTag(int colorsel, int size);

View File

@ -31,6 +31,7 @@ import com.silverwrist.venice.ui.helpers.ErrorBox;
import com.silverwrist.venice.ui.helpers.ThrowableContent; import com.silverwrist.venice.ui.helpers.ThrowableContent;
import com.silverwrist.venice.ui.script.ScriptingException; import com.silverwrist.venice.ui.script.ScriptingException;
import com.silverwrist.venice.ui.script.ScriptManagerContainer; import com.silverwrist.venice.ui.script.ScriptManagerContainer;
import com.silverwrist.venice.ui.velocity.VelocityRenderer;
public abstract class BaseServlet extends HttpServlet public abstract class BaseServlet extends HttpServlet
{ {
@ -415,6 +416,7 @@ public abstract class BaseServlet extends HttpServlet
} // end if } // end if
ScriptManagerContainer.initialize(rootconf,ctxt); // make sure container initialized ScriptManagerContainer.initialize(rootconf,ctxt); // make sure container initialized
VelocityRenderer.init(ctxt,rootconf); // initialize Velocity renderer
BrowserDatabase.get(ctxt); // initialize browser database BrowserDatabase.get(ctxt); // initialize browser database
} // end synchronized block } // end synchronized block

View File

@ -40,6 +40,7 @@ import com.silverwrist.venice.ui.menus.Menu;
import com.silverwrist.venice.ui.menus.MenuComponent; import com.silverwrist.venice.ui.menus.MenuComponent;
import com.silverwrist.venice.ui.menus.MenuTemplate; import com.silverwrist.venice.ui.menus.MenuTemplate;
import com.silverwrist.venice.ui.script.*; import com.silverwrist.venice.ui.script.*;
import com.silverwrist.venice.ui.velocity.*;
import com.silverwrist.venice.util.XMLLoader; import com.silverwrist.venice.util.XMLLoader;
public class RequestImpl implements RequestInput public class RequestImpl implements RequestInput
@ -212,6 +213,22 @@ public class RequestImpl implements RequestInput
} // end if } // end if
if (c instanceof ContentVelocity)
{ // render the object
VelocityRenderer vr = VelocityRenderer.get(ctxt);
vr.render((ContentVelocity)c,this,null);
return;
} // end if
if (c instanceof ContentVelocityOwnTemplate)
{ // render the object
VelocityRenderer vr = VelocityRenderer.get(ctxt);
vr.render((ContentVelocityOwnTemplate)c,this,null);
return;
} // end if
// if nothing else... // if nothing else...
this.write(c.toString()); this.write(c.toString());
@ -254,6 +271,22 @@ public class RequestImpl implements RequestInput
} // end if } // end if
if (c instanceof ContentVelocity)
{ // render the object
VelocityRenderer vr = VelocityRenderer.get(ctxt);
vr.render((ContentVelocity)c,this,out);
return;
} // end if
if (c instanceof ContentVelocityOwnTemplate)
{ // render the object
VelocityRenderer vr = VelocityRenderer.get(ctxt);
vr.render((ContentVelocityOwnTemplate)c,this,out);
return;
} // end if
this.output(c); // fall back in ContentJSP case this.output(c); // fall back in ContentJSP case
} // end output } // end output
@ -2046,10 +2079,10 @@ class HTMLRenderingImpl implements HTMLRendering
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private RequestImpl req; // request we're attached to private RequestImpl m_req; // request we're attached to
private RootConfig config; // configuration data private RootConfig m_config; // configuration data
private DateFormat display_date = null; // format to use for displaying dates private DateFormat m_display_date = null; // format to use for displaying dates
private DateFormat activity_time = null; // format to use for activity string times private DateFormat m_activity_time = null; // format to use for activity string times
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -2058,8 +2091,8 @@ class HTMLRenderingImpl implements HTMLRendering
HTMLRenderingImpl(RequestImpl req, RootConfig config) HTMLRenderingImpl(RequestImpl req, RootConfig config)
{ {
this.req = req; this.m_req = req;
this.config = config; this.m_config = config;
} // end constructor } // end constructor
@ -2070,19 +2103,19 @@ class HTMLRenderingImpl implements HTMLRendering
public String getColor(int selector) public String getColor(int selector)
{ {
return config.getColor(selector); return m_config.getColor(selector);
} // end getColor } // end getColor
public String getColor(String name) public String getColor(String name)
{ {
return config.getColor(name); return m_config.getColor(name);
} // end getColor } // end getColor
public boolean useHTMLComments() public boolean useHTMLComments()
{ {
return config.useHTMLComments(); return m_config.useHTMLComments();
} // end useHTMLComments } // end useHTMLComments
@ -2091,108 +2124,118 @@ class HTMLRenderingImpl implements HTMLRendering
if (type==ABSOLUTE) if (type==ABSOLUTE)
return url; return url;
else if (type==SERVLET) else if (type==SERVLET)
return req.encodeServletPath(url); return m_req.encodeServletPath(url);
else if (type==FRAME) else if (type==FRAME)
return req.encodeServletPath("frame/" + url); return m_req.encodeServletPath("frame/" + url);
else if (type==FULLSERVLET) else if (type==FULLSERVLET)
return req.expandServletPath(url,true); return m_req.expandServletPath(url,true);
else else
throw new IndexOutOfBoundsException("invalid format type index for formatURL"); throw new IndexOutOfBoundsException("invalid format type index for formatURL");
} // end formatURL } // end formatURL
public String formatURL(String url, String type)
{
int ityp = m_config.convertLinkType(type);
if (ityp<0)
return url;
else
return formatURL(url,ityp);
} // end formatURL
public String formatDate(Date date) public String formatDate(Date date)
{ {
synchronized (this) synchronized (this)
{ // create the display date formatter if we don't yet have it { // create the display date formatter if we don't yet have it
if (display_date==null) if (m_display_date==null)
{ // create the display date formatter { // create the display date formatter
display_date = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,req.getLocale()); m_display_date = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,m_req.getLocale());
display_date.setTimeZone(req.getTimeZone()); m_display_date.setTimeZone(m_req.getTimeZone());
} // end if } // end if
} // end synchronized block } // end synchronized block
return display_date.format(date); return m_display_date.format(date);
} // end formatDate } // end formatDate
public String getFontTag(int colorsel, int size) public String getFontTag(int colorsel, int size)
{ {
return config.getFontTag(colorsel,size); return m_config.getFontTag(colorsel,size);
} // end getFontTag } // end getFontTag
public String getFontTag(String color, int size) public String getFontTag(String color, int size)
{ {
return config.getFontTag(color,size); return m_config.getFontTag(color,size);
} // end getFontTag } // end getFontTag
public String getFontTag(int colorsel, String size) public String getFontTag(int colorsel, String size)
{ {
return config.getFontTag(colorsel,size); return m_config.getFontTag(colorsel,size);
} // end getFontTag } // end getFontTag
public String getFontTag(String color, String size) public String getFontTag(String color, String size)
{ {
return config.getFontTag(color,size); return m_config.getFontTag(color,size);
} // end getFontTag } // end getFontTag
public int convertLinkType(String str) public int convertLinkType(String str)
{ {
return config.convertLinkType(str); return m_config.convertLinkType(str);
} // end convertLinkType } // end convertLinkType
public String getStockMessage(String key) public String getStockMessage(String key)
{ {
return config.getStockMessage(key); return m_config.getStockMessage(key);
} // end getStockMessage } // end getStockMessage
public String getStockMessage(String key, Map vars) public String getStockMessage(String key, Map vars)
{ {
return config.getStockMessage(key,vars); return m_config.getStockMessage(key,vars);
} // end getStockMessage } // end getStockMessage
public String getStaticPath(String s) public String getStaticPath(String s)
{ {
return config.getStaticPath(s); return m_config.getStaticPath(s);
} // end getStaticPath } // end getStaticPath
public String getExternalStaticPath(String s) public String getExternalStaticPath(String s)
{ {
return config.getExternalStaticPath(s); return m_config.getExternalStaticPath(s);
} // end getExternalStaticPath } // end getExternalStaticPath
public String getImagePath(String s) public String getImagePath(String s)
{ {
return config.getImagePath(s); return m_config.getImagePath(s);
} // end getImagePath } // end getImagePath
public String getButtonVisual(String id) public String getButtonVisual(String id)
{ {
return config.getButtonVisual(id); return m_config.getButtonVisual(id);
} // end getButtonVisual } // end getButtonVisual
public String getButtonInput(String id) public String getButtonInput(String id)
{ {
return config.getButtonInput(id); return m_config.getButtonInput(id);
} // end getButtonInput } // end getButtonInput
public String getUserPhotoTag(String url) public String getUserPhotoTag(String url)
{ {
return getUserPhotoTag(url,req.getEngine().getUserPhotoSize()); return getUserPhotoTag(url,m_req.getEngine().getUserPhotoSize());
} // end getUserPhotoTag } // end getUserPhotoTag
@ -2200,7 +2243,7 @@ class HTMLRenderingImpl implements HTMLRendering
{ {
StringBuffer buf = new StringBuffer("<img src=\""); StringBuffer buf = new StringBuffer("<img src=\"");
if (StringUtil.isStringEmpty(url)) if (StringUtil.isStringEmpty(url))
buf.append(config.getBlankPhoto()); buf.append(m_config.getBlankPhoto());
else else
buf.append(url); buf.append(url);
buf.append("\" alt=\"\" align=\"left\" border=\"0\" width=\"").append(size.width).append("\" height=\""); buf.append("\" alt=\"\" align=\"left\" border=\"0\" width=\"").append(size.width).append("\" height=\"");
@ -2215,9 +2258,9 @@ class HTMLRenderingImpl implements HTMLRendering
return "Never"; // safeguard return "Never"; // safeguard
// Set up the two calendars we'll use for comparison. // Set up the two calendars we'll use for comparison.
Calendar c_last = new GregorianCalendar(req.getTimeZone(),req.getLocale()); Calendar c_last = new GregorianCalendar(m_req.getTimeZone(),m_req.getLocale());
c_last.setTime(date); c_last.setTime(date);
Calendar c_now = new GregorianCalendar(req.getTimeZone(),req.getLocale()); Calendar c_now = new GregorianCalendar(m_req.getTimeZone(),m_req.getLocale());
// Determine the exact number of days in the delta. // Determine the exact number of days in the delta.
int delta_days = 0; int delta_days = 0;
@ -2233,14 +2276,14 @@ class HTMLRenderingImpl implements HTMLRendering
String s = null; String s = null;
if (delta_days<=1) if (delta_days<=1)
{ // set up to convert the time into a string { // set up to convert the time into a string
if (activity_time==null) if (m_activity_time==null)
{ // get the "activity" time formatter { // get the "activity" time formatter
activity_time = DateFormat.getTimeInstance(DateFormat.MEDIUM,req.getLocale()); m_activity_time = DateFormat.getTimeInstance(DateFormat.MEDIUM,m_req.getLocale());
activity_time.setTimeZone(req.getTimeZone()); m_activity_time.setTimeZone(m_req.getTimeZone());
} // end if } // end if
s = activity_time.format(date); s = m_activity_time.format(date);
} // end if } // end if
@ -2261,7 +2304,7 @@ class HTMLRenderingImpl implements HTMLRendering
buf.append(this.getImagePath("sig_other.jpg")); buf.append(this.getImagePath("sig_other.jpg"));
else else
buf.append(url); buf.append(url);
Dimension sz = req.getEngine().getCommunityLogoSize(); Dimension sz = m_req.getEngine().getCommunityLogoSize();
buf.append("\" alt=\"\" border=\"0\" width=\"").append(sz.width).append("\" height=\"").append(sz.height); buf.append("\" alt=\"\" border=\"0\" width=\"").append(sz.width).append("\" height=\"").append(sz.height);
buf.append("\" />"); buf.append("\" />");
return buf.toString(); return buf.toString();
@ -2270,19 +2313,19 @@ class HTMLRenderingImpl implements HTMLRendering
public String expandServletPath(String spath) public String expandServletPath(String spath)
{ {
return req.expandServletPath(spath,false); return m_req.expandServletPath(spath,false);
} // end expandServletPath } // end expandServletPath
public Calendar getCalendar() public Calendar getCalendar()
{ {
return new GregorianCalendar(req.getTimeZone(),req.getLocale()); return new GregorianCalendar(m_req.getTimeZone(),m_req.getLocale());
} // end getCalendar } // end getCalendar
public Locale getLocale() public Locale getLocale()
{ {
return req.getLocale(); return m_req.getLocale();
} // end getLocale } // end getLocale

View File

@ -0,0 +1,34 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.velocity;
import com.silverwrist.venice.ui.Content;
public interface ContentVelocity extends Content, VelocitySupplyParams
{
/**
* Returns the resource name of the Velocity template to be used in rendering this object. This pathname
* is interpreted relative to the "template path" specified in the configuration.
* The template engine loads it via the standard resource loader, and then applies the parameters
* contained in this object to it.
*
* @return The resource pathname of the Velocity template to use.
*/
public String getTemplateName();
} // end interface ContentVelocity

View File

@ -0,0 +1,39 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.velocity;
import com.silverwrist.venice.ui.Content;
public interface ContentVelocityOwnTemplate extends Content, VelocitySupplyParams
{
/**
* Returns the Velocity template data to be rendered.
*
* @return The Velocity template data.
*/
public String getTemplate();
/**
* Returns an identifier for the Velocity template, to be used when generating error messages and
* the like.
*
* @return The Velocity template identifier.
*/
public String getIdentifier();
} // end interface ContentVelocityOwnTemplate

View File

@ -0,0 +1,132 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.velocity;
import java.util.*;
import org.apache.velocity.context.Context;
/**
* An Adapter which allows a {@link com.silverwrist.venice.ui.velocity.VelocitySupplyParams VelocitySupplyParams}
* to supply rendering parameters to Velocity as a standard <code>Context</code> object.
*/
class ContextWrapper implements Context
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private VelocitySupplyParams m_vr; // the parameter supplier we're adapting
private Object[] m_arr = null; // cache of the parameter names array
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
/**
* Creates a new <code>ContextWrapper</code>.
*
* @param vr The {@link com.silverwrist.venice.ui.velocity.VelocitySupplyParams VelocitySupplyParams} to be
* wrapped by this object.
*/
ContextWrapper(VelocitySupplyParams vr)
{
m_vr = vr;
} // end constructor
/*--------------------------------------------------------------------------------
* Implementations from interface Context
*--------------------------------------------------------------------------------
*/
/**
* Adds a name/value pair to the context. For this class, this is a no-op.
*
* @param key The name to key the provided value with.
* @param value The corresponding value.
* @return The previous value set for that key, or <code>null/code>.
*/
public Object put(String key, Object value)
{
return null; // dummy method
} // end put
/**
* Gets the value corresponding to the provided key from the context.
*
* @param key The name of the desired value.
* @return The value corresponding to the provided key.
*/
public Object get(String key)
{
if (m_vr==null)
return null;
return m_vr.getParameter(key);
} // end get
/**
* Indicates whether the specified key is in the context.
*
* @param key The key to look for.
* @return <code>true</code> if the key is in the context, <code>false</code> if not.
*/
public boolean containsKey(Object key)
{
if (m_vr==null)
return false;
return (m_vr.getParameter(key.toString())!=null);
} // end containsKey
/**
* Get all the keys for the values in the context.
*
* @return An array containing all the keys from this context.
*/
public Object[] getKeys()
{
if (m_arr==null)
{ // fill in array
if (m_vr==null)
m_arr = new Object[0];
else
m_arr = m_vr.getParameterNames().toArray();
} // end if
return m_arr;
} // end getKeys
/**
* Removes the value associated with the specified key from the context. For this class, this is a no-op.
*
* @param key The name of the value to remove.
* @return The value that the key was mapped to, or <code>null</code> if unmapped.
*/
public Object remove(Object key)
{
return null; // dummy method
} // end remove
} // end class ContextWrapper

View File

@ -0,0 +1,57 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.velocity;
import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.helpers.*;
public class StdObject
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private RequestOutput m_rout;
private HTMLRendering m_html = null;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
StdObject(RequestOutput out)
{
m_rout = out;
} // end constructor
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public String formatURL(String url, String type)
{
if (m_html==null)
m_html = (HTMLRendering)(m_rout.queryService(HTMLRendering.class));
return m_html.formatURL(url,type);
} // end formatURL
} // end class StdObject

View File

@ -0,0 +1,289 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.velocity;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import org.apache.log4j.*;
import org.apache.velocity.*;
import org.apache.velocity.app.*;
import org.apache.velocity.context.AbstractContext;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.*;
import org.apache.velocity.runtime.RuntimeConstants;
import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.config.RootConfig;
public class VelocityRenderer
{
/*--------------------------------------------------------------------------------
* Internal "tool" context.
*--------------------------------------------------------------------------------
*/
private class ToolContext extends AbstractContext
{
/*====================================================================
* Attributes
*====================================================================
*/
private StdObject m_std;
/*====================================================================
* Constructor
*====================================================================
*/
ToolContext(Context inner, RequestOutput out)
{
super(inner);
m_std = new StdObject(out);
} // end constructor
/*====================================================================
* Abstract implementations from class AbstractContext
*====================================================================
*/
public Object internalGet(String key)
{
if (key.equals("std"))
return m_std;
return null;
} // end internalGet
public Object internalPut(String key, Object value)
{
Context ctxt = getChainedContext();
if (ctxt==null)
return null;
else
return ctxt.put(key,value);
} // end internalPut
public boolean internalContainsKey(Object key)
{
String keystr = key.toString();
if (keystr.equals("std"))
return true;
return false;
} // end internalContainsKey
public Object[] internalGetKeys()
{
ArrayList rc = new ArrayList();
rc.add("std");
return rc.toArray();
} // end internalGetKeys
public Object internalRemove(Object key)
{
Context ctxt = getChainedContext();
if (ctxt==null)
return null;
else
return ctxt.remove(key);
} // end internalRemove
} // end class ToolContext
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static final String CONTEXT_KEY = VelocityRenderer.class.getName();
private static final String LOGGING_CATEGORY_NAME = "velocity.engine";
private static Logger vel_logger = Logger.getLogger(LOGGING_CATEGORY_NAME);
private static Logger logger = Logger.getLogger(VelocityRenderer.class);
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private VelocityEngine m_ve; // our instance of the Velocity engine
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
private VelocityRenderer(String template_dir) throws Exception
{
m_ve = new VelocityEngine();
m_ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
"org.apache.velocity.runtime.log.SimpleLog4JLogSystem");
m_ve.setProperty("runtime.log.logsystem.log4j.category",LOGGING_CATEGORY_NAME);
m_ve.setProperty("resource.loader","file");
m_ve.setProperty("file.loader.description","Velocity File Resource Loader");
m_ve.setProperty("file.resource.loader.class","org.apache.velocity.runtime.resource.loader.FileResourceLoader");
m_ve.setProperty("file.resource.loader.path",template_dir);
m_ve.setProperty("velocimacro.permissions.allow.inline","true");
m_ve.setProperty("velocimacro.permissions.allow.inline.to.replace.global","false");
m_ve.setProperty("velocimacro.permissions.allow.inline.local.scope","true");
m_ve.init();
} // end constructor
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public void formatTemplate(String template_name, VelocitySupplyParams params, RequestOutput out, Writer wr)
throws IOException, ServletException
{
if (wr==null)
wr = out.getWriter();
try
{ // Load the template.
Template templ = m_ve.getTemplate(template_name);
// Create a context containing the arguments.
VelocityContext ctxt = new VelocityContext(new ContextWrapper(params));
// Merge the template onto the output.
templ.merge(new ToolContext(ctxt,out),wr);
wr.flush();
} // end try
catch (ResourceNotFoundException e)
{ // this is not good
throw new ServletException("unable to load Velocity resource: " + e.getMessage(),e);
} // end catch
catch (ParseErrorException e)
{ // parse error
throw new ServletException("Velocity parse error: " + e.getMessage(),e);
} // end catch
catch (MethodInvocationException e)
{ // some method failed
throw new ServletException("Velocity method invocation error: " + e.getMessage(),e);
} // end catch
catch (IOException e)
{ // pass IOExceptions straight through
throw e;
} // end catch
catch (Exception e)
{ // all other garbage goes here
throw new ServletException("Velocity rendering failure: " + e.getMessage(),e);
} // end catch
} // end formatTemplate
public void render(ContentVelocity content, RequestOutput out, Writer wr) throws IOException, ServletException
{
formatTemplate(content.getTemplateName(),content,out,wr);
} // end render
public void render(ContentVelocityOwnTemplate content, RequestOutput out, Writer wr)
throws IOException, ServletException
{
if (wr==null)
wr = out.getWriter();
try
{ // Get the identifier.
String ident = content.getIdentifier();
if (ident==null)
ident = "ContentVelocityOwnTemplate";
// Create a context containing the arguments.
VelocityContext ctxt = new VelocityContext(new ContextWrapper(content));
if (!(m_ve.evaluate(new ToolContext(ctxt,out),wr,ident,content.getTemplate())))
throw new ServletException("Velocity template rendering failure");
wr.flush();
} // end try
catch (ResourceNotFoundException e)
{ // this is not good
throw new ServletException("unable to load Velocity resource: " + e.getMessage(),e);
} // end catch
catch (ParseErrorException e)
{ // parse error
throw new ServletException("Velocity parse error: " + e.getMessage(),e);
} // end catch
catch (MethodInvocationException e)
{ // some method failed
throw new ServletException("Velocity method invocation error: " + e.getMessage(),e);
} // end catch
catch (IOException e)
{ // pass IOExceptions straight through
throw e;
} // end catch
catch (Exception e)
{ // all other garbage goes here
throw new ServletException("Velocity rendering failure: " + e.getMessage(),e);
} // end catch
} // end render
/*--------------------------------------------------------------------------------
* External static operations
*--------------------------------------------------------------------------------
*/
public static void init(ServletContext ctxt, RootConfig config)
{
if (ctxt.getAttribute(CONTEXT_KEY)!=null)
return; // already initialized
try
{ // initialize the renderer object
VelocityRenderer tmp = new VelocityRenderer(config.getVelocityTemplateDirectory());
ctxt.setAttribute(CONTEXT_KEY,tmp);
} // end try
catch (Exception e)
{ // the initialization failed!
logger.fatal("VelocityRenderer initialization failed!",e);
} // end catch
} // end init
public static VelocityRenderer get(ServletContext ctxt) throws ServletException
{
VelocityRenderer rc = (VelocityRenderer)(ctxt.getAttribute(CONTEXT_KEY));
if (rc==null)
throw new ServletException("VelocityRenderer not initialized");
return rc;
} // end get
} // end class VelocityRenderer

View File

@ -0,0 +1,45 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.ui.velocity;
import java.util.Collection;
/**
* Common interface for all output objects that supply parameters to Velocity.
*
* @author Eric J. Bowersox &lt;erbo@ricochet.com&gt;
* @version X
*/
public interface VelocitySupplyParams
{
/**
* Returns the value of a parameter set on the object.
*
* @param key The name of the parameter to look up.
* @return The parameter's value, or <code>null</code> if the parameter was not set.
*/
public Object getParameter(String key);
/**
* Returns a <code>java.util.Collection</code> of all parameter names currently defined on this object.
*
* @return A collection of all parameter names currently defined.
*/
public Collection getParameterNames();
} // end interface VelocitySupplyParams

View File

@ -0,0 +1,20 @@
#*
The contents of this file are subject to the Mozilla Public License Version 1.1
(the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
WARRANTY OF ANY KIND, either express or implied. See the License for the specific
language governing rights and limitations under the License.
The Original Code is the Venice Web Communities System.
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
Contributor(s):
*#
## Define macros around the "std" object.
#macro( formatURL $type $url )$std.formatURL($type,$url)#end