Author: gvanmatre
Date: Thu Dec 29 21:06:39 2005
New Revision: 359989
URL: http://svn.apache.org/viewcvs?rev=359989&view=rev
Log:
Applied a fix for bug #38058 and an enhancement that allows full clay XML views
to be loaded on startup.
Added:
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml
(with props)
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/Globals.java
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address.xml
struts/shale/trunk/use-cases/src/web/WEB-INF/web.xml
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
(original)
+++
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
Thu Dec 29 21:06:39 2005
@@ -21,6 +21,7 @@
config.load.begin=Begin loading config files.
config.load.done=Done loading config file(s).
config.destroy=Unloading config cache.
+config.deprecated.param=Initialization parameter "{0}" has been deprecated.
Use initialization parameter "{1}" going forward.
#org.apache.shale.clay.config.ClayXmlParser
parser.load.file=Loading file "{0}".
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/Globals.java
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/Globals.java?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/Globals.java
(original)
+++
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/Globals.java
Thu Dec 29 21:06:39 2005
@@ -39,8 +39,35 @@
* <br>
* The configuration files should conform to the clay-config_x_x.dtd
*</p>
+ * @deprecated use CLAY_COMMON_CONFIG_FILES
*/
public static final String CLAY_CONFIG_FILES = "clay-config-files";
+
+ /**
+ *<p>Name of the initialization parameter in the web deployment descriptor
+ *containing additional registered configuration files. These files
represent
+ *common component definitions that are not full view XML templates.
Common
+ *component definitions should have jsfid's that don't have a ".xml" or
+ *".html" suffix. The list of files should be comma delimited and the
path
+ *relative to the context root.
+ *<br>
+ *The configuration files should conform to the clay-config_x_x.dtd.
+ *</p>
+ */
+ public static final String CLAY_COMMON_CONFIG_FILES =
"org.apache.shale.clay.COMMON_CONFIG_FILES";
+
+
+ /**
+ *<p>Name of the initialization parameter in the web deployment descriptor
+ *containing additional registered configuration files. These files
represent
+ *common component definitions that are full view XML templates.
+ *The list of files should be comma delimited and the path relative to the
context root.
+ *<br>
+ *The configuration files should conform to the clay-config_x_x.dtd.
+ *</p>
+ */
+ public static final String CLAY_FULLXML_CONFIG_FILES =
"org.apache.shale.clay.FULLXML_CONFIG_FILES";
+
/**
* <p>The name of the initialization parameter defined in the
@@ -49,7 +76,7 @@
* This suffix identifies a jsfid that uses HTML to define page
composition.
* </p>
*/
- public static final String CLAY_HTML_TEMPLATE_SUFFIX =
"clay-html-template-suffix";
+ public static final String CLAY_HTML_TEMPLATE_SUFFIX =
"org.apache.shale.clay.HTML_TEMPLATE_SUFFIX";
/**
@@ -59,7 +86,7 @@
* This suffix identifies a jsfid that uses full XML views to define page
composition.
* </p>
*/
- public static final String CLAY_XML_TEMPLATE_SUFFIX =
"clay-xml-template-suffix";
+ public static final String CLAY_XML_TEMPLATE_SUFFIX =
"org.apache.shale.clay.XML_TEMPLATE_SUFFIX";
/**
@@ -71,7 +98,7 @@
* a change occures.
* </p>
*/
- public static final String AUTO_RELOAD_CLAY_FILES =
"auto-reload-clay-files";
+ public static final String AUTO_RELOAD_CLAY_FILES =
"org.apache.shale.clay.AUTO_RELOAD_CONFIG_FILES";
/**
@@ -201,7 +228,8 @@
public static final String CLAY_FULL_VIEW_RESTORE_IND =
"org.apache.shale.clay.forward";
/**
- *
+ * <p>The clay component attribute name that will capture the
ComponentBean representing the root
+ * of the subtree. The root is capture for enhanced error reporting.</p>
*/
public static final String CLAY_RESERVED_ATTRIBUTE =
"org.apache.shale.clay";
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
(original)
+++
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
Thu Dec 29 21:06:39 2005
@@ -163,9 +163,21 @@
String param = context.getInitParameter(Globals.CLAY_CONFIG_FILES);
// add the default config file
+ if (param != null && param.trim().length() > 0) {
+ configFiles.append(", ").append(param);
+
+ log.warn(messages.getMessage("config.deprecated.param",
+ new Object[] {Globals.CLAY_CONFIG_FILES,
+ Globals.CLAY_COMMON_CONFIG_FILES}));
+ }
+
+ // a comma delimited value list of config files
+ param = context.getInitParameter(Globals.CLAY_COMMON_CONFIG_FILES);
if (param != null && param.trim().length() > 0)
configFiles.append(", ").append(param);
+
+
// pass the config bean to the parser
parser.setConfig(this);
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java
(original)
+++
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateComponentConfigBean.java
Thu Dec 29 21:06:39 2005
@@ -18,9 +18,12 @@
package org.apache.shale.clay.config.beans;
+import java.util.Iterator;
+import java.util.Map;
import java.util.TreeMap;
import org.apache.shale.clay.config.ClayXmlParser;
+import org.apache.shale.clay.config.Globals;
/**
* <This ConfigBean is responsible for handling full XML views. For full XML
views,
@@ -47,10 +50,86 @@
* [EMAIL PROTECTED]
org.apache.shale.clay.config.beans.ComponentConfigBean$WatchDog}'s.</p>
*/
protected void loadConfigFiles() {
- parser = new ClayXmlParser();
+
+ parser = new ClayXmlParser();
parser.setConfig(this);
+ // a comma delimited value list of config files
+ String param =
context.getInitParameter(Globals.CLAY_FULLXML_CONFIG_FILES);
+
+ // pass the config bean to the parser
+ parser.setConfig(this);
+
+ // map holding the resource watchers
watchDogs = new TreeMap();
+
+
+ if (param != null && param.length() > 0) {
+ // create the watch dog with a list of config files to look for
changes
+ WatchDog watchDog = new WatchDog(getConfigDefinitions(param),
+ Globals.DEFAULT_COMPONENT_CONFIG_WATCHDOG);
+
+ // adds the watcher to a map identified by name
+ watchDogs.put(watchDog.getName(), watchDog);
+
+ // loads the config files
+ watchDog.refresh(true);
+ }
+
+ param = null;
+ }
+
+
+ /**
+ * <p>If the <code>forceReload</code> is <code>true</code>,
+ * the <code>displayElements</code> cache is invalidated.
+ * A <code>true</code> value is returned if cache has
+ * been cleared.
+ * <br/><br/>
+ * All files loaded on-demand are purged. Full view definitions
+ * loaded using the <code>Globals.CLAY_FULLXML_CONFIG_FILES</code>
+ * initialization parameter are reloaded if modified or if a
+ * <code>forceReload</code> is specified.</p>
+ *
+ */
+ public boolean refresh(boolean forceReload) {
+ boolean wasDirty = forceReload;
+
+ //look for a default watch of full view config files
+ WatchDog defaultWatchDog = (WatchDog)
watchDogs.get(Globals.DEFAULT_COMPONENT_CONFIG_WATCHDOG);
+
+ //clear out all the on-demand beans
+ if (forceReload) {
+
+ //remove from the list without the clean-up
+ if (defaultWatchDog != null)
+ watchDogs.remove(Globals.DEFAULT_COMPONENT_CONFIG_WATCHDOG);
+
+ // remove all old templates
+ Iterator wi = watchDogs.entrySet().iterator();
+ while (wi.hasNext()) {
+ Map.Entry e = (Map.Entry) wi.next();
+ WatchDog watchDog = (WatchDog) e.getValue();
+ clear(watchDog.getName());
+ if (watchDog != null)
+ watchDog.destroy();
+ }
+ watchDogs.clear();
+
+ //push back into the list
+ if (defaultWatchDog != null)
+ watchDogs.put(Globals.DEFAULT_COMPONENT_CONFIG_WATCHDOG,
defaultWatchDog);
+
+ }
+
+ //check for dirty cache
+ if (defaultWatchDog != null) {
+ synchronized (displayElements) {
+ wasDirty = defaultWatchDog.refresh(forceReload);
+ }
+ }
+
+ return wasDirty;
}
Modified:
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
(original)
+++
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/TemplateConfigBean.java
Thu Dec 29 21:06:39 2005
@@ -61,6 +61,11 @@
// look for a watcher identified by the template name
WatchDog watchDog = (WatchDog) watchDogs.get(jsfid.toString());
+
+ //if a watcher doesn't exist, check for a common
+ if (watchDog == null)
+ watchDog = (WatchDog)
watchDogs.get(Globals.DEFAULT_COMPONENT_CONFIG_WATCHDOG);
+
if (watchDog == null || super.getElement(jsfid.toString()) == null) {
//The first time the page is created, create a watcher
@@ -68,11 +73,11 @@
// register by name
watchDogs.put(watchDog.getName(), watchDog);
+
+ //loads the HTML template the first time and when file
+ //has been modified
+ watchDog.refresh(false);
}
-
- //loads the HTML template the first time and when file
- //has been modified
- watchDog.refresh(false);
// returns the cached element
return super.getElement(jsfid.toString());
Modified:
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java
(original)
+++
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java
Thu Dec 29 21:06:39 2005
@@ -122,8 +122,13 @@
super.setUp();
// Configure document root for tests
- servletContext.setDocumentRoot
- (new File(System.getProperty("documentRoot")));
+ String documentRoot = System.getProperty("documentRoot");
+ if (documentRoot == null) {
+ documentRoot = System.getProperty("user.dir") +
"\\WebContent\\WEB-INF\\classes";
+ }
+ servletContext.setDocumentRoot(new File(documentRoot));
+
+
//load the mock config data
loadComponents();
@@ -138,16 +143,13 @@
// creates the component metadata container from the xml config files
standardConfigBean = new ComponentConfigBean();
- standardConfigBean.init(servletContext);
-
// creates a container that builds the component metadata from an HTML
// template configuration.
htmlTemplateConfigBean = new TemplateConfigBean();
- htmlTemplateConfigBean.init(servletContext);
-
+ // full xml view support
xmlTemplateConfigBean = new TemplateComponentConfigBean();
- xmlTemplateConfigBean.init(servletContext);
+
// register with the factory
ConfigBeanFactory.register(standardConfigBean);
ConfigBeanFactory.register(htmlTemplateConfigBean);
@@ -165,11 +167,23 @@
xmlTemplateConfigBean = null;
}
+
+ // loads the config files
+ protected void loadConfigFile(String commonConfigFiles) {
+ loadConfigFiles(commonConfigFiles, null);
+ }
+
// loads the config files
- protected void loadConfigFile(String configFiles) {
+ protected void loadConfigFiles(String commonConfigFiles, String
fullXmlConfigFiles) {
// this would be done in the ClayConfigureListener
- servletContext.addInitParameter(Globals.CLAY_CONFIG_FILES,
configFiles);
+ if (commonConfigFiles != null)
+ servletContext.addInitParameter(Globals.CLAY_COMMON_CONFIG_FILES,
commonConfigFiles);
+
+ if (fullXmlConfigFiles != null) {
+ servletContext.addInitParameter(Globals.CLAY_FULLXML_CONFIG_FILES,
fullXmlConfigFiles);
+ }
+
standardConfigBean.init(servletContext);
htmlTemplateConfigBean.init(servletContext);
xmlTemplateConfigBean.init(servletContext);
@@ -392,13 +406,13 @@
}
- //test a full xml view including a html template
- public void testLoadXMLFile() {
+ //test a full xml view including a html template (on-demand)
+ public void testLoadXMLFileOnDemand() {
//loads the default and the custom address config file
loadConfigFile("/org/apache/shale/clay/config/address-config.xml");
- ComponentBean bean =
xmlTemplateConfigBean.getElement("org/apache/shale/clay/config/address.xml");
+ ComponentBean bean =
xmlTemplateConfigBean.getElement("/org/apache/shale/clay/config/address.xml");
assertNotNull(bean);
Iterator ci = bean.getChildrenIterator();
@@ -426,9 +440,52 @@
checkComponent(child, CUSTOM_HTML_COMPONENTS);
}
}
-
}
+
+ //test a full xml view centralized config loaded on startup that
+ //includes a html template (global template file)
+ public void testLoadXMLFileGlobal() {
+
+ // loads the default and the custom address config file.
+ // loads a centralized full view config file.
+ loadConfigFiles("/org/apache/shale/clay/config/address-config.xml",
+ "/org/apache/shale/clay/config/address-fullxml.xml");
+
+ //loaded on startup, this call will just retrieve a loaded definitions
+ //the jsfid doesn't match the name of the config file, a requirement
+ //for on-demand full xml views
+ ComponentBean bean =
xmlTemplateConfigBean.getElement("/address2.xml");
+ assertNotNull(bean);
+
+ Iterator ci = bean.getChildrenIterator();
+ while (ci.hasNext()) {
+ ElementBean child = (ElementBean) ci.next();
+
+ AttributeBean attr = null;
+ if (child.getId().equals("htmlBegin")) {
+ attr = child.getAttribute("value");
+ assertEquals(attr.getValue(), "<html>");
+ } else if (child.getId().equals("htmlEnd")) {
+ attr = child.getAttribute("value");
+ assertEquals(attr.getValue(), "</html>");
+ } else if (child.getId().equals("header")) {
+ attr = child.getAttribute("value");
+ assertEquals(attr.getValue(),
"<head><title>Testing</title></head>");
+ } else if (child.getId().equals("bodyBegin")) {
+ attr = child.getAttribute("value");
+ assertEquals(attr.getValue(), "<body>");
+ } else if (child.getId().equals("bodyEnd")) {
+ attr = child.getAttribute("value");
+ assertEquals(attr.getValue(), "</body>");
+ } else if (child.getId().equals("content")) {
+ //look for a component that we have setup to test
+ checkComponent(child, CUSTOM_HTML_COMPONENTS);
+ }
+ }
+
+ }
+
// checks a meta components realized state against the assumed values
protected void checkComponent(ComponentBean bean, Object[]
knownGoodStates) {
@@ -747,7 +804,7 @@
public void testDuplicateComponentIds() {
// loads the default and the custom address config file
- loadConfigFile("org/apache/shale/clay/config/address-config.xml");
+ loadConfigFile("/org/apache/shale/clay/config/address-config.xml");
try {
ComponentBean bean =
htmlTemplateConfigBean.getElement("org/apache/shale/clay/config/duplicate1.html");
Added:
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml?rev=359989&view=auto
==============================================================================
---
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml
(added)
+++
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml
Thu Dec 29 21:06:39 2005
@@ -0,0 +1,20 @@
+<?xml version='1.0' encoding="UTF-8"?>
+
+ <!DOCTYPE view PUBLIC
+ "-//Apache Software Foundation//DTD Shale Clay View Configuration
1.0//EN"
+ "http://struts.apache.org/dtds/shale-clay-config_1_0.dtd">
+
+<view>
+
+ <component jsfid="/address.xml" extends="layout" >
+ <!-- override body content -->
+ <element id="content" renderId="10" jsfid="clay">
+ <attributes>
+ <set name="clayJsfid"
value="/org/apache/shale/clay/config/address.xml"/>
+ </attributes>
+ </element>
+ </component>
+
+ <component jsfid="/address2.xml" extends="/address.xml"/>
+
+</view>
\ No newline at end of file
Propchange:
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-fullxml.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified:
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address.xml
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address.xml?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
---
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address.xml
(original)
+++
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address.xml
Thu Dec 29 21:06:39 2005
@@ -14,5 +14,5 @@
</attributes>
</element>
</component>
-
+
</view>
Modified: struts/shale/trunk/use-cases/src/web/WEB-INF/web.xml
URL:
http://svn.apache.org/viewcvs/struts/shale/trunk/use-cases/src/web/WEB-INF/web.xml?rev=359989&r1=359988&r2=359989&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/WEB-INF/web.xml (original)
+++ struts/shale/trunk/use-cases/src/web/WEB-INF/web.xml Thu Dec 29 21:06:39
2005
@@ -46,7 +46,7 @@
<!-- Clay Configuration Resources -->
<context-param>
- <param-name>clay-config-files</param-name>
+ <param-name>org.apache.shale.clay.COMMON_CONFIG_FILES</param-name>
<param-value>/WEB-INF/clay-config.xml</param-value>
</context-param>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]