Author: jkuhnert
Date: Wed May 2 18:43:05 2007
New Revision: 534680
URL: http://svn.apache.org/viewvc?view=rev&rev=534680
Log:
There. Take that TAPESTRY-1396.
Added:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/form/
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.html
(with props)
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
(contents, props changed)
- copied, changed from r534640,
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/ShowError.java
Removed:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Redirect.page
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/pom.xml
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Upload.html
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java
Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/pom.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/pom.xml?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/pom.xml (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/pom.xml Wed May 2
18:43:05 2007
@@ -57,6 +57,9 @@
<includes>
<include>**/*.gif</include>
<include>**/*.png</include>
+ <include>**/*.jwc</include>
+ <include>**/*.page</include>
+ <include>**/*.html</include>
</includes>
</resource>
</resources>
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Palette.html
Wed May 2 18:43:05 2007
@@ -12,7 +12,7 @@
<input jwcid="inputEnabled"/> Enable Client Side Validation
</form>
-<span jwcid="@ShowError" delegate="bean:delegate"/>
+<span jwcid="@form/ShowError" delegate="bean:delegate"/>
<form jwcid="form">
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Upload.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Upload.html?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Upload.html
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Upload.html
Wed May 2 18:43:05 2007
@@ -13,7 +13,7 @@
<input jwcid="inputEnabled"/> Enable Client Side Validation
</form>
-<span jwcid="@ShowError" delegate="bean:delegate"/>
+<span jwcid="@form/ShowError" delegate="bean:delegate"/>
<form jwcid="@Form" success="listener:doSubmit" delegate="bean:delegate"
clientValidationEnabled="ognl:clientValidationEnabled">
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page
Wed May 2 18:43:05 2007
@@ -26,7 +26,7 @@
<bean name="delegate" property="delegate"
class="org.apache.tapestry.workbench.WorkbenchValidationDelegate"/>
- <component id="showError" type="ShowError">
+ <component id="showError" type="form/ShowError">
<binding name="delegate" value="bean:delegate"/>
</component>
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page
Wed May 2 18:43:05 2007
@@ -41,7 +41,7 @@
<binding name="onchange" value="literal:tapestry.form.submit(this.form);"/>
</component>
- <component id="showError" type="ShowError">
+ <component id="showError" type="form/ShowError">
<binding name="delegate" value="bean:delegate"/>
</component>
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page
Wed May 2 18:43:05 2007
@@ -17,14 +17,14 @@
<!DOCTYPE page-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
+ "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
<page-specification class="org.apache.tapestry.workbench.fields.Fields">
<inject type="state" property="visit" object="session-data" />
<component id="border" type="Border"/>
- <component id="showError" type="ShowError">
+ <component id="showError" type="form/ShowError">
<binding name="delegate" expression="beans.delegate"/>
</component>
<component id="form" type="Form">
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page
Wed May 2 18:43:05 2007
@@ -37,7 +37,7 @@
<binding name="onClick" value="literal:tapestry.form.submit(this.form)"/>
</component>
- <component id="showError" type="ShowError">
+ <component id="showError" type="form/ShowError">
<binding name="delegate" value="bean:delegate"/>
</component>
Added:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.html?view=auto&rev=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.html
(added)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.html
Wed May 2 18:43:05 2007
@@ -0,0 +1,8 @@
+<table class="inputerror">
+ <tr valign="top">
+ <td><img src="images/Warning.gif" alt="Warning" width="42" height="42"
/></td>
+ <td class="message">
+ <span jwcid="@RenderBody" />
+ </td>
+ </tr>
+</table>
\ No newline at end of file
Propchange:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.html
------------------------------------------------------------------------------
svn:eol-style = native
Copied:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
(from r534640,
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/ShowError.java)
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java?view=diff&rev=534680&p1=tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/ShowError.java&r1=534640&p2=tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/ShowError.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
Wed May 2 18:43:05 2007
@@ -12,11 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.workbench.components;
+package org.apache.tapestry.workbench.components.form;
-import java.util.List;
-
-import org.apache.tapestry.AbstractComponent;
+import org.apache.tapestry.BaseComponent;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRender;
import org.apache.tapestry.IRequestCycle;
@@ -24,17 +22,18 @@
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.valid.IValidationDelegate;
+import java.util.List;
+
/**
* This would normally be done entirely <em>without</em> using code. Trying to
demonstrate that
* you can create components without a .jwc file by matching the component
type against a class name
* (in the proper package, as defined in the application specification).
*
* @author Howard Lewis Ship
- * @since 4.0
*/
@ComponentClass(allowBody = false, allowInformalParameters = false)
-public abstract class ShowError extends AbstractComponent
-{
+public abstract class ShowError extends BaseComponent {
+
@Parameter(required = true)
public abstract IValidationDelegate getDelegate();
@@ -48,27 +47,18 @@
if (!delegate.getHasErrors())
return;
+
+ super.renderComponent(writer, cycle);
+ }
- writer.begin("table");
- writer.attribute("class", "inputerror");
-
- writer.begin("tr");
- writer.attribute("valign", "top");
-
- writer.begin("td");
- writer.beginEmpty("img");
- writer.attribute("src", "images/Warning.gif");
- writer.attribute("width", 42);
- writer.attribute("height", 41);
- writer.end();
-
- writer.begin("td");
- writer.attribute("class", "message");
+ @Override
+ @SuppressWarnings("unchecked")
+ public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
+ {
+ IValidationDelegate delegate = getDelegate();
List<IRender> errorRenders = delegate.getErrorRenderers();
errorRenders.get(0).render(writer, cycle);
-
- writer.end("table");
}
}
Propchange:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml
Wed May 2 18:43:05 2007
@@ -85,6 +85,8 @@
<set-service property="componentSpecificationResolver"
service-id="tapestry.page.ComponentSpecificationResolver"/>
<set-object property="componentPropertySource"
value="infrastructure:componentPropertySource"/>
<set-object property="localizer"
value="infrastructure:resourceLocalizer"/>
+ <set-service property="contextAssetFactory"
service-id="tapestry.asset.ContextAssetFactory" />
+ <set-service property="classpathAssetFactory"
service-id="tapestry.asset.ClasspathAssetFactory" />
<event-listener service-id="tapestry.ResetEventHub"/>
<event-listener service-id="tapestry.describe.ReportStatusHub"/>
</construct>
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java
Wed May 2 18:43:05 2007
@@ -14,14 +14,14 @@
package org.apache.tapestry;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.HiveMind;
import org.apache.hivemind.Location;
import org.apache.hivemind.util.Defense;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Constants and static methods.
*
@@ -226,8 +226,7 @@
if (start == 0 && length == buffer.length)
{
- return new String[]
- { input };
+ return new String[] { input };
}
// The final token.
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java
Wed May 2 18:43:05 2007
@@ -56,7 +56,6 @@
Resource findAsset(IComponentSpecification spec, Resource baseResource,
String path, Locale locale)
{
Resource assetResource =
baseResource.getRelativeResource("/").getRelativeResource(path);
-
Resource localized = _localizer.findLocalization(assetResource,
locale);
if (localized == null && spec != null &&
spec.getLocation().getResource() != null) {
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
Wed May 2 18:43:05 2007
@@ -253,8 +253,7 @@
if (componentResource.getResourceURL() == null) {
- Resource classResource = new ClasspathResource(_classResolver,
componentClass.getName().replace('.', '/'));
- componentResource = classResource.getRelativeResource(type +
".jwc");
+ componentResource = new ClasspathResource(_classResolver,
componentClass.getName().replace('.', '/'));
}
Location location = new LocationImpl(componentResource);
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
Wed May 2 18:43:05 2007
@@ -55,8 +55,8 @@
{
ComponentTemplate template = _templateSource.getTemplate(requestCycle,
loadComponent);
- ComponentTemplateLoaderLogic logic = new
ComponentTemplateLoaderLogic(_log, _pageLoader,
- _bindingSource);
+ ComponentTemplateLoaderLogic logic =
+ new ComponentTemplateLoaderLogic(_log, _pageLoader,
_bindingSource);
logic.loadTemplate(requestCycle, loadComponent, template);
}
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java?view=diff&rev=534680&r1=534679&r2=534680
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java
Wed May 2 18:43:05 2007
@@ -14,43 +14,33 @@
package org.apache.tapestry.services.impl;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.logging.Log;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Resource;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
+import org.apache.tapestry.*;
+import org.apache.tapestry.asset.AssetFactory;
import org.apache.tapestry.engine.ITemplateSourceDelegate;
import org.apache.tapestry.event.ReportStatusEvent;
import org.apache.tapestry.event.ReportStatusListener;
import org.apache.tapestry.event.ResetEventListener;
import org.apache.tapestry.l10n.ResourceLocalizer;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.parse.ITemplateParser;
-import org.apache.tapestry.parse.ITemplateParserDelegate;
-import org.apache.tapestry.parse.TemplateParseException;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.parse.TextToken;
-import org.apache.tapestry.parse.TokenType;
+import org.apache.tapestry.parse.*;
import org.apache.tapestry.resolver.ComponentSpecificationResolver;
import org.apache.tapestry.services.ComponentPropertySource;
import org.apache.tapestry.services.TemplateSource;
import org.apache.tapestry.spec.IComponentSpecification;
import org.apache.tapestry.util.MultiKey;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+
/**
* Implementation of [EMAIL PROTECTED]
org.apache.tapestry.services.TemplateSource}. Templates, once parsed,
* stay in memory until explicitly cleared.
@@ -66,6 +56,8 @@
public static final String TEMPLATE_ENCODING_PROPERTY_NAME =
"org.apache.tapestry.template-encoding";
+ private static final String WEB_INF = "/WEB-INF/";
+
private static final int BUFFER_SIZE = 2000;
private String _serviceId;
@@ -76,12 +68,12 @@
// specification resource path and locale (local may be null), value
// is the ComponentTemplate.
- private Map _cache = Collections.synchronizedMap(new HashMap());
+ private Map _cache = new ConcurrentHashMap();
// Previously read templates; key is the Resource, value
// is the ComponentTemplate.
- private Map _templates = Collections.synchronizedMap(new HashMap());
+ private Map _templates = new ConcurrentHashMap();
private ITemplateParser _parser;
@@ -105,6 +97,12 @@
private ResourceLocalizer _localizer;
+ /** @since 4.1.2 */
+ private AssetFactory _classpathAssetFactory;
+
+ /** @since 4.1.2 */
+ private AssetFactory _contextAssetFactory;
+
/**
* Clears the template cache. This is used during debugging.
*/
@@ -179,8 +177,7 @@
Locale locale = component.getPage().getLocale();
- Object key = new MultiKey(new Object[]
- { resource, locale }, false);
+ Object key = new MultiKey(new Object[] { resource, locale }, false);
ComponentTemplate result = searchCache(key);
if (result != null)
@@ -258,9 +255,57 @@
templateExtension,
locale);
+ if (result == null) {
+
+ templateAsset = findSpeclessTemplate(cycle, resource, component,
locale, templateExtension);
+
+ if (templateAsset != null)
+ return readTemplateFromAsset(cycle, component, templateAsset);
+ }
+
return result;
}
+ private IAsset findSpeclessTemplate(IRequestCycle cycle, Resource base,
+ IComponent component,
Locale locale, String templateExtension)
+ {
+ String componentPackages =
component.getNamespace().getPropertyValue("org.apache.tapestry.component-class-packages");
+ if (componentPackages == null)
+ return null;
+
+ String name = base.getName();
+ String className =
component.getSpecification().getComponentClassName();
+
+ String[] packages = TapestryUtils.split(componentPackages);
+ for (int i=0; i < packages.length; i++)
+ {
+ int index = className.lastIndexOf(packages[i]);
+ if (index < 0)
+ continue;
+
+ String templateName = name + "." + templateExtension;
+
+ if
(_classpathAssetFactory.assetExists(component.getSpecification(), base,
templateName, locale))
+ return _classpathAssetFactory.createAsset(base,
component.getSpecification(), templateName, locale, component.getLocation());
+
+ // else try various forms of context searches
+
+ templateName = className.substring((index + packages[i].length())
+ 1, className.length()).replaceAll("\\.", "/");
+ templateName = templateName + "." + templateExtension;
+ Resource context =
component.getNamespace().getSpecificationLocation();
+
+ if (_contextAssetFactory.assetExists(component.getSpecification(),
context, templateName, locale)) {
+
+ return _classpathAssetFactory.createAsset(context,
component.getSpecification(), templateName, locale, component.getLocation());
+ } else if
(_contextAssetFactory.assetExists(component.getSpecification(), context,
WEB_INF + templateName, locale)) {
+
+ return _classpathAssetFactory.createAsset(context,
component.getSpecification(), WEB_INF + templateName, locale,
component.getLocation());
+ }
+ }
+
+ return null;
+ }
+
private ComponentTemplate findPageTemplateInApplicationRoot(IRequestCycle
cycle, IPage page,
String templateExtension, Locale locale)
{
@@ -330,10 +375,7 @@
+ " in locale " + locale.getDisplayName());
Resource baseTemplateLocation =
resource.getRelativeResource(templateBaseName);
-
- Resource localizedTemplateLocation = _localizer.findLocalization(
- baseTemplateLocation,
- locale);
+ Resource localizedTemplateLocation =
_localizer.findLocalization(baseTemplateLocation, locale);
if (localizedTemplateLocation == null)
return null;
@@ -385,7 +427,7 @@
}
/**
- * This method is currently synchronized, because [EMAIL PROTECTED]
TemplateParser}is not threadsafe.
+ * This method is currently synchronized, because [EMAIL PROTECTED]
org.apache.tapestry.parse.TemplateParser} is not threadsafe.
* Another good candidate for a pooling mechanism, especially because
parsing a template may
* take a while.
*/
@@ -509,7 +551,7 @@
/**
* Checks for the [EMAIL PROTECTED]
Tapestry#TEMPLATE_EXTENSION_PROPERTY}in the component's specification,
* then in the component's namespace's specification. Returns
- * [EMAIL PROTECTED] Tapestry#DEFAULT_TEMPLATE_EXTENSION}if not otherwise
overriden.
+ * [EMAIL PROTECTED] Tapestry#TEMPLATE_EXTENSION_PROPERTY} if not
otherwise overriden.
*/
private String getTemplateExtension(IComponent component)
@@ -577,5 +619,17 @@
public void setLocalizer(ResourceLocalizer localizer)
{
_localizer = localizer;
+ }
+
+ /** @since 4.1.2 */
+ public void setClasspathAssetFactory(AssetFactory classpathAssetFactory)
+ {
+ _classpathAssetFactory = classpathAssetFactory;
+ }
+
+ /** @since 4.1.2 */
+ public void setContextAssetFactory(AssetFactory contextAssetFactory)
+ {
+ _contextAssetFactory = contextAssetFactory;
}
}