Author: hlship
Date: Wed Nov 29 15:44:05 2006
New Revision: 480770
URL: http://svn.apache.org/viewvc?view=rev&rev=480770
Log:
Add support for injecting Messages (obtained from the ComponentMessagesSource)
into components.
Added:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/CommonResourcesInjectionProvider.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Localization.java
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.html
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.properties
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/inject.apt
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/index.html
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImplTest.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java
Wed Nov 29 15:44:05 2006
@@ -14,6 +14,7 @@
package org.apache.tapestry;
+import org.apache.tapestry.ioc.Messages;
import org.apache.tapestry.model.ComponentModel;
import org.apache.tapestry.runtime.Component;
@@ -65,4 +66,7 @@
* @param writer
*/
void renderInformalParameters(MarkupWriter writer);
+
+ /** Returns the message catalog for this component. */
+ Messages getMessages();
}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
Wed Nov 29 15:44:05 2006
@@ -14,6 +14,8 @@
package org.apache.tapestry;
+import java.util.Locale;
+
import org.apache.commons.logging.Log;
import org.apache.tapestry.internal.structure.ComponentPageElement;
import org.apache.tapestry.model.ComponentModel;
@@ -96,4 +98,7 @@
* @see ComponentModel#getLog()
*/
Log getLog();
+
+ /** Returns the locale for the page containing this component. */
+ Locale getLocale();
}
Added:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/CommonResourcesInjectionProvider.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/CommonResourcesInjectionProvider.java?view=auto&rev=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/CommonResourcesInjectionProvider.java
(added)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/CommonResourcesInjectionProvider.java
Wed Nov 29 15:44:05 2006
@@ -0,0 +1,73 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.services;
+
+import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.tapestry.ioc.Messages;
+import org.apache.tapestry.ioc.ServiceLocator;
+import org.apache.tapestry.model.MutableComponentModel;
+import org.apache.tapestry.services.ClassTransformation;
+import org.apache.tapestry.services.InjectionProvider;
+import org.apache.tapestry.services.TransformConstants;
+
+/**
+ * Allows for a number of annonymous injections based on the type of field
that is to be injected.
+ */
+public class CommonResourcesInjectionProvider implements InjectionProvider
+{
+ private static final Map<String, String> _configuration = newMap();
+
+ public CommonResourcesInjectionProvider()
+ {
+ add(Messages.class, "getMessages");
+ add(Locale.class, "getLocale");
+ add(Log.class, "getLog");
+ add(String.class, "getCompleteId");
+ }
+
+ private void add(Class fieldType, String methodName)
+ {
+ _configuration.put(fieldType.getName(), methodName);
+ }
+
+ public boolean provideInjection(String fieldName, String fieldType,
ServiceLocator locator,
+ ClassTransformation transformation, MutableComponentModel
componentModel)
+ {
+ String implementationMethodName = _configuration.get(fieldType);
+
+ if (implementationMethodName == null)
+ return false;
+
+ String resourcesField = transformation.getResourcesFieldName();
+
+ String body = String.format(
+ "%s = %s.%s();",
+ fieldName,
+ resourcesField,
+ implementationMethodName);
+
+ transformation.makeReadOnly(fieldName);
+
+
transformation.extendMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE,
body);
+
+ return true;
+ }
+
+}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
Wed Nov 29 15:44:05 2006
@@ -53,6 +53,7 @@
import org.apache.tapestry.services.BindingSource;
import org.apache.tapestry.services.ComponentClassResolver;
import org.apache.tapestry.services.ComponentClassTransformWorker;
+import org.apache.tapestry.services.ComponentMessagesSource;
import org.apache.tapestry.services.MarkupWriterFactory;
import org.apache.tapestry.services.PageRenderInitializer;
import org.apache.tapestry.services.PersistentFieldManager;
@@ -148,11 +149,12 @@
}
public PageElementFactory
buildPageElementFactory(@Inject("infrastructure:typeCoercer")
- TypeCoercer typeCoercer, @InjectService("tapestry.BindingSource")
- BindingSource bindingSource)
+ TypeCoercer typeCoercer, @Inject("infrastructure:bindingSource")
+ BindingSource bindingSource,
@Inject("infrastructure:componentMessagesSource")
+ ComponentMessagesSource componentMessagesSource)
{
return new PageElementFactoryImpl(_componentInstantiatorSource,
_componentClassResolver,
- typeCoercer, bindingSource);
+ typeCoercer, bindingSource, componentMessagesSource);
}
public PageLoader buildPageLoader(@InjectService("PageElementFactory")
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java
Wed Nov 29 15:44:05 2006
@@ -12,200 +12,205 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.tapestry.internal.services;
-
-import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.MarkupWriter;
-import org.apache.tapestry.internal.InternalConstants;
-import org.apache.tapestry.internal.parser.AttributeToken;
-import org.apache.tapestry.internal.parser.ExpansionToken;
-import org.apache.tapestry.internal.parser.StartElementToken;
-import org.apache.tapestry.internal.parser.TextToken;
-import org.apache.tapestry.internal.structure.AttributePageElement;
-import org.apache.tapestry.internal.structure.ComponentPageElement;
-import org.apache.tapestry.internal.structure.ComponentPageElementImpl;
-import org.apache.tapestry.internal.structure.ExpansionPageElement;
-import org.apache.tapestry.internal.structure.Page;
-import org.apache.tapestry.internal.structure.PageElement;
-import org.apache.tapestry.internal.structure.StartElementPageElement;
-import org.apache.tapestry.internal.structure.TextPageElement;
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.internal.InternalConstants;
+import org.apache.tapestry.internal.parser.AttributeToken;
+import org.apache.tapestry.internal.parser.ExpansionToken;
+import org.apache.tapestry.internal.parser.StartElementToken;
+import org.apache.tapestry.internal.parser.TextToken;
+import org.apache.tapestry.internal.structure.AttributePageElement;
+import org.apache.tapestry.internal.structure.ComponentPageElement;
+import org.apache.tapestry.internal.structure.ComponentPageElementImpl;
+import org.apache.tapestry.internal.structure.ExpansionPageElement;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.internal.structure.PageElement;
+import org.apache.tapestry.internal.structure.StartElementPageElement;
+import org.apache.tapestry.internal.structure.TextPageElement;
import org.apache.tapestry.ioc.Location;
import org.apache.tapestry.ioc.internal.util.InternalUtils;
import org.apache.tapestry.ioc.internal.util.TapestryException;
-import org.apache.tapestry.ioc.services.TypeCoercer;
-import org.apache.tapestry.model.ComponentModel;
-import org.apache.tapestry.runtime.RenderQueue;
+import org.apache.tapestry.ioc.services.TypeCoercer;
+import org.apache.tapestry.model.ComponentModel;
+import org.apache.tapestry.runtime.RenderQueue;
import org.apache.tapestry.services.Binding;
-import org.apache.tapestry.services.BindingSource;
-import org.apache.tapestry.services.ComponentClassResolver;
-
-/**
- * Null check suppressed as much as to simplify testing (yea! I can pass a
null TypeCoercer) as it
- * is for efficiency.
- */
-
-public class PageElementFactoryImpl implements PageElementFactory
-{
- private final ComponentInstantiatorSource _componentInstantiatorSource;
-
- private final ComponentClassResolver _componentClassResolver;
-
- private final TypeCoercer _typeCoercer;
-
- private final BindingSource _bindingSource;
-
- public PageElementFactoryImpl(ComponentInstantiatorSource
componentInstantiatorSource,
- ComponentClassResolver resolver, TypeCoercer typeCoercer,
BindingSource bindingSource)
- {
- _componentInstantiatorSource = componentInstantiatorSource;
- _componentClassResolver = resolver;
- _typeCoercer = typeCoercer;
- _bindingSource = bindingSource;
- }
-
- /** Singleton instance that represents any close tag of any element in any
template. */
- private final PageElement _endElement = new PageElement()
- {
- public void render(MarkupWriter writer, RenderQueue queue)
- {
- writer.end();
- }
-
- @Override
- public String toString()
- {
- return "End";
- }
- };
-
- public PageElement newStartElement(StartElementToken token)
- {
- return new StartElementPageElement(token.getName());
- }
-
- public PageElement newTextElement(TextToken token)
- {
- return new TextPageElement(token.getText());
- }
-
- public PageElement newEndElement()
- {
- return _endElement;
- }
-
- public PageElement newAttributeElement(AttributeToken token)
- {
- return new AttributePageElement(token.getName(), token.getValue());
- }
-
- public PageElement newExpansionElement(ComponentResources
componentResources,
- ExpansionToken token)
- {
- Binding binding = _bindingSource.newBinding(
- "expansion",
- componentResources,
- InternalConstants.PROP_BINDING_PREFIX,
- token.getExpression(),
- token.getLocation());
-
- return new ExpansionPageElement(binding, _typeCoercer);
- }
-
- public ComponentPageElement newComponentElement(Page page,
ComponentPageElement container,
- String id, String componentType, String componentClassName,
Location location)
- {
- String finalClassName = componentClassName;
-
- // This awkwardness is making me think that the page loader should
resolve the component
- // type before invoking this method (we would then remove the
componentType parameter).
-
- if (InternalUtils.isNonBlank(componentType))
- {
- // The type actually overrides the specified class name. The class
name is defined
- // by the type of the field. In many scenarios, the field type is
a common interface,
- // and the type is used to determine the concrete class to
instantiate.
-
- try
- {
- finalClassName = _componentClassResolver
- .resolveComponentTypeToClassName(componentType);
- }
- catch (IllegalArgumentException ex)
- {
- throw new TapestryException(ex.getMessage(), location, ex);
- }
- }
-
- Instantiator instantiator =
_componentInstantiatorSource.findInstantiator(finalClassName);
-
- // The container for any components is the loading component,
regardless of
- // how the component elements are nested within the loading component's
- // template.
-
- ComponentPageElementImpl result = new ComponentPageElementImpl(page,
container, id,
- instantiator, _typeCoercer, location);
-
- page.addLifecycleListener(result);
-
- container.addEmbeddedElement(result);
-
- addMixins(result, instantiator);
-
- return result;
- }
-
- public ComponentPageElement newRootComponentElement(Page page, String
componentType)
- {
- Instantiator instantiator =
_componentInstantiatorSource.findInstantiator(componentType);
-
- ComponentPageElementImpl result = new ComponentPageElementImpl(page,
instantiator,
- _typeCoercer);
-
- addMixins(result, instantiator);
-
- page.addLifecycleListener(result);
-
- return result;
- }
-
- private void addMixins(ComponentPageElement component, Instantiator
instantiator)
- {
- ComponentModel model = instantiator.getModel();
- for (String mixinClassName : model.getMixinClassNames())
- addMixinByClassName(component, mixinClassName);
- }
-
- public PageElement newRenderBodyElement(final ComponentPageElement
component)
- {
- return new PageElement()
- {
- public void render(MarkupWriter writer, RenderQueue queue)
- {
- component.enqueueBeforeRenderBody(queue);
- }
-
- @Override
- public String toString()
- {
- // TODO: Change this to be nested id
- return String.format("RenderBody[%s]", component.getId());
- }
- };
- }
-
- public void addMixinByTypeName(ComponentPageElement component, String
mixinType)
- {
- String mixinClassName =
_componentClassResolver.resolveMixinTypeToClassName(mixinType);
-
- addMixinByClassName(component, mixinClassName);
- }
-
- public void addMixinByClassName(ComponentPageElement component, String
mixinClassName)
- {
- Instantiator mixinInstantiator = _componentInstantiatorSource
- .findInstantiator(mixinClassName);
-
- component.addMixin(mixinInstantiator);
- }
-
-}
+import org.apache.tapestry.services.BindingSource;
+import org.apache.tapestry.services.ComponentClassResolver;
+import org.apache.tapestry.services.ComponentMessagesSource;
+
+/**
+ * Null check suppressed as much as to simplify testing (yea! I can pass a
null TypeCoercer) as it
+ * is for efficiency.
+ */
+
+public class PageElementFactoryImpl implements PageElementFactory
+{
+ private final ComponentInstantiatorSource _componentInstantiatorSource;
+
+ private final ComponentClassResolver _componentClassResolver;
+
+ private final TypeCoercer _typeCoercer;
+
+ private final BindingSource _bindingSource;
+
+ private final ComponentMessagesSource _messagesSource;
+
+ public PageElementFactoryImpl(ComponentInstantiatorSource
componentInstantiatorSource,
+ ComponentClassResolver resolver, TypeCoercer typeCoercer,
BindingSource bindingSource,
+ ComponentMessagesSource messagesSource)
+ {
+ _componentInstantiatorSource = componentInstantiatorSource;
+ _componentClassResolver = resolver;
+ _typeCoercer = typeCoercer;
+ _bindingSource = bindingSource;
+ _messagesSource = messagesSource;
+ }
+
+ /** Singleton instance that represents any close tag of any element in any
template. */
+ private final PageElement _endElement = new PageElement()
+ {
+ public void render(MarkupWriter writer, RenderQueue queue)
+ {
+ writer.end();
+ }
+
+ @Override
+ public String toString()
+ {
+ return "End";
+ }
+ };
+
+ public PageElement newStartElement(StartElementToken token)
+ {
+ return new StartElementPageElement(token.getName());
+ }
+
+ public PageElement newTextElement(TextToken token)
+ {
+ return new TextPageElement(token.getText());
+ }
+
+ public PageElement newEndElement()
+ {
+ return _endElement;
+ }
+
+ public PageElement newAttributeElement(AttributeToken token)
+ {
+ return new AttributePageElement(token.getName(), token.getValue());
+ }
+
+ public PageElement newExpansionElement(ComponentResources
componentResources,
+ ExpansionToken token)
+ {
+ Binding binding = _bindingSource.newBinding(
+ "expansion",
+ componentResources,
+ InternalConstants.PROP_BINDING_PREFIX,
+ token.getExpression(),
+ token.getLocation());
+
+ return new ExpansionPageElement(binding, _typeCoercer);
+ }
+
+ public ComponentPageElement newComponentElement(Page page,
ComponentPageElement container,
+ String id, String componentType, String componentClassName,
Location location)
+ {
+ String finalClassName = componentClassName;
+
+ // This awkwardness is making me think that the page loader should
resolve the component
+ // type before invoking this method (we would then remove the
componentType parameter).
+
+ if (InternalUtils.isNonBlank(componentType))
+ {
+ // The type actually overrides the specified class name. The class
name is defined
+ // by the type of the field. In many scenarios, the field type is
a common interface,
+ // and the type is used to determine the concrete class to
instantiate.
+
+ try
+ {
+ finalClassName = _componentClassResolver
+ .resolveComponentTypeToClassName(componentType);
+ }
+ catch (IllegalArgumentException ex)
+ {
+ throw new TapestryException(ex.getMessage(), location, ex);
+ }
+ }
+
+ Instantiator instantiator =
_componentInstantiatorSource.findInstantiator(finalClassName);
+
+ // The container for any components is the loading component,
regardless of
+ // how the component elements are nested within the loading component's
+ // template.
+
+ ComponentPageElementImpl result = new ComponentPageElementImpl(page,
container, id,
+ instantiator, _typeCoercer, _messagesSource, location);
+
+ page.addLifecycleListener(result);
+
+ container.addEmbeddedElement(result);
+
+ addMixins(result, instantiator);
+
+ return result;
+ }
+
+ public ComponentPageElement newRootComponentElement(Page page, String
componentType)
+ {
+ Instantiator instantiator =
_componentInstantiatorSource.findInstantiator(componentType);
+
+ ComponentPageElementImpl result = new ComponentPageElementImpl(page,
instantiator,
+ _typeCoercer, _messagesSource);
+
+ addMixins(result, instantiator);
+
+ page.addLifecycleListener(result);
+
+ return result;
+ }
+
+ private void addMixins(ComponentPageElement component, Instantiator
instantiator)
+ {
+ ComponentModel model = instantiator.getModel();
+ for (String mixinClassName : model.getMixinClassNames())
+ addMixinByClassName(component, mixinClassName);
+ }
+
+ public PageElement newRenderBodyElement(final ComponentPageElement
component)
+ {
+ return new PageElement()
+ {
+ public void render(MarkupWriter writer, RenderQueue queue)
+ {
+ component.enqueueBeforeRenderBody(queue);
+ }
+
+ @Override
+ public String toString()
+ {
+ // TODO: Change this to be nested id
+ return String.format("RenderBody[%s]", component.getId());
+ }
+ };
+ }
+
+ public void addMixinByTypeName(ComponentPageElement component, String
mixinType)
+ {
+ String mixinClassName =
_componentClassResolver.resolveMixinTypeToClassName(mixinType);
+
+ addMixinByClassName(component, mixinClassName);
+ }
+
+ public void addMixinByClassName(ComponentPageElement component, String
mixinClassName)
+ {
+ Instantiator mixinInstantiator = _componentInstantiatorSource
+ .findInstantiator(mixinClassName);
+
+ component.addMixin(mixinInstantiator);
+ }
+
+}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
Wed Nov 29 15:44:05 2006
@@ -19,6 +19,7 @@
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.logging.Log;
@@ -44,6 +45,7 @@
import org.apache.tapestry.runtime.RenderCommand;
import org.apache.tapestry.runtime.RenderQueue;
import org.apache.tapestry.services.Binding;
+import org.apache.tapestry.services.ComponentMessagesSource;
/**
* Implements [EMAIL PROTECTED]
org.apache.tapestry.internal.structure.PageElement} and
@@ -325,6 +327,8 @@
// The user-provided class, with runtime code enhancements.
private final Component _component;
+ private final ComponentMessagesSource _messagesSource;
+
/**
* Component lifecycle instances for all mixins; the core component is
added to this list during
* page load. This is only used in the case that a component has mixins
(in which case, the core
@@ -462,12 +466,15 @@
* used to create the new component instance and access the
component's model
* @param typeCoercer
* used when coercing parameter values
+ * @param messagesSource
+ * TODO
* @param location
* location of the element (within a template), used as part of
exception reporting
*/
public ComponentPageElementImpl(Page page, ComponentPageElement container,
String id,
- Instantiator instantiator, TypeCoercer typeCoercer, Location
location)
+ Instantiator instantiator, TypeCoercer typeCoercer,
+ ComponentMessagesSource messagesSource, Location location)
{
super(location);
@@ -477,9 +484,11 @@
_id = id;
_page = page;
_typeCoercer = typeCoercer;
+ _messagesSource = messagesSource;
_log = model.getLog();
- _coreResources = new InternalComponentResourcesImpl(this,
instantiator, _typeCoercer);
+ _coreResources = new InternalComponentResourcesImpl(this,
instantiator, _typeCoercer,
+ _messagesSource);
_component = _coreResources.getComponent();
@@ -515,9 +524,10 @@
/**
* Constructor for the root component of a page.
*/
- public ComponentPageElementImpl(Page page, Instantiator instantiator,
TypeCoercer typeCoercer)
+ public ComponentPageElementImpl(Page page, Instantiator instantiator,
TypeCoercer typeCoercer,
+ ComponentMessagesSource messagesSource)
{
- this(page, null, null, instantiator, typeCoercer, null);
+ this(page, null, null, instantiator, typeCoercer, messagesSource,
null);
}
public void addEmbeddedElement(ComponentPageElement child)
@@ -544,7 +554,7 @@
String mixinName = IOCUtilities.toSimpleId(mixinClassName);
InternalComponentResourcesImpl resources = new
InternalComponentResourcesImpl(this,
- instantiator, _typeCoercer);
+ instantiator, _typeCoercer, _messagesSource);
// TODO: Check for name collision?
@@ -923,6 +933,11 @@
return;
throw new
TapestryException(StructureMessages.missingParameters(unbound, this), this,
null);
+ }
+
+ public Locale getLocale()
+ {
+ return _page.getLocale();
}
}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
Wed Nov 29 15:44:05 2006
@@ -16,6 +16,7 @@
import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.logging.Log;
@@ -24,11 +25,13 @@
import org.apache.tapestry.MarkupWriter;
import org.apache.tapestry.internal.InternalComponentResources;
import org.apache.tapestry.internal.services.Instantiator;
+import org.apache.tapestry.ioc.Messages;
import org.apache.tapestry.ioc.internal.util.TapestryException;
import org.apache.tapestry.ioc.services.TypeCoercer;
import org.apache.tapestry.model.ComponentModel;
import org.apache.tapestry.runtime.Component;
import org.apache.tapestry.services.Binding;
+import org.apache.tapestry.services.ComponentMessagesSource;
/**
* The bridge between a component and its [EMAIL PROTECTED]
ComponentPageElement}, that supplies all kinds of
@@ -48,12 +51,18 @@
private Map<String, Binding> _bindings;
+ private final ComponentMessagesSource _messagesSource;
+
+ private Messages _messages;
+
public InternalComponentResourcesImpl(ComponentPageElement element,
- Instantiator componentInstantiator, TypeCoercer typeCoercer)
+ Instantiator componentInstantiator, TypeCoercer typeCoercer,
+ ComponentMessagesSource messagesSource)
{
_element = element;
_componentModel = componentInstantiator.getModel();
_typeCoercer = typeCoercer;
+ _messagesSource = messagesSource;
_component = componentInstantiator.newInstance(this);
}
@@ -238,6 +247,19 @@
ComponentPageElement containerElement = _element.getContainerElement();
return containerElement == null ? null :
containerElement.getComponent();
+ }
+
+ public Locale getLocale()
+ {
+ return _element.getLocale();
+ }
+
+ public Messages getMessages()
+ {
+ if (_messages == null)
+ _messages = _messagesSource.getMessages(_componentModel,
getLocale());
+
+ return _messages;
}
}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
Wed Nov 29 15:44:05 2006
@@ -44,12 +44,14 @@
import org.apache.tapestry.internal.bindings.LiteralBindingFactory;
import org.apache.tapestry.internal.services.ApplicationGlobalsImpl;
import org.apache.tapestry.internal.services.BindingSourceImpl;
+import org.apache.tapestry.internal.services.CommonResourcesInjectionProvider;
import org.apache.tapestry.internal.services.ComponentClassFactoryImpl;
import org.apache.tapestry.internal.services.ComponentClassResolverImpl;
import org.apache.tapestry.internal.services.ComponentEventDispatcher;
import org.apache.tapestry.internal.services.ComponentInstanceEventHandler;
import org.apache.tapestry.internal.services.ComponentInstantiatorSource;
import org.apache.tapestry.internal.services.ComponentLifecycleMethodWorker;
+import org.apache.tapestry.internal.services.ComponentMessagesSourceImpl;
import
org.apache.tapestry.internal.services.ComponentResourcesInjectionProvider;
import org.apache.tapestry.internal.services.ComponentSourceImpl;
import org.apache.tapestry.internal.services.ComponentWorker;
@@ -397,6 +399,8 @@
add(configuration, locator, PersistentFieldManager.class);
add(configuration, locator, Environment.class);
add(configuration, locator, ComponentSource.class);
+ add(configuration, locator, BindingSource.class);
+ add(configuration, locator, ComponentMessagesSource.class);
configuration.add(new InfrastructureContribution("request", request));
configuration.add(new InfrastructureContribution("response",
response));
@@ -498,6 +502,9 @@
OrderedConfiguration<InjectionProvider> configuration)
{
configuration.add("ComponentResources", new
ComponentResourcesInjectionProvider());
+ configuration.add(
+ "CommonResourcesInjectionProvider",
+ new CommonResourcesInjectionProvider());
configuration.add("Default", new DefaultInjectionProvider(),
"after:*.*");
}
@@ -720,5 +727,10 @@
public ComponentEventHandler buildComponentInstanceEventHandler(Log log)
{
return new ComponentInstanceEventHandler(_requestPageCache, log);
+ }
+
+ public ComponentMessagesSource buildComponentMessagesSource()
+ {
+ return new ComponentMessagesSourceImpl();
}
}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt
Wed Nov 29 15:44:05 2006
@@ -19,7 +19,7 @@
The infrastructure
- {{{../../tapestry-ioc/provider.html}object provider}}
+ {{{http://tapestry.apache.org/tapestry5/tapestry-ioc/provider.html}object
provider}}
is a key element in making Tapestry extensible; it adds a layer of
indirection between service implementations and their collaborators. Using
the infrastructure
provider allows applications to identify and override individual services
within Tapestry's
@@ -46,24 +46,51 @@
The following table identifies the properties that are available via the
infrastructure provider
by default:
-*-----------------------+--------------------------------------------------------------------+------------------------------------+
-| <<Property>> | <<Service Interface>>
| <<Default Service>> |
-*-----------------------+--------------------------------------------------------------------+-----------------------------------+
-| componentSource |
{{{../apidocs/org/apache/tapestry/services/ComponentSource.html}ComponentSource}}
| tapestry.ComponentSource |
-*-----------------------+--------------------------------------------------------------------+-----------------------------------+
-| environment |
{{{../apidocs/org/apache/tapestry/services/Environment.html}Environment}} |
tapestry.Environment |
-*-----------------------+--------------------------------------------------------------------+-----------------------------------+
-| markupWriterFactory |
{{{../apidocs/org/apache/tapestry/services/MarkupWriterFactory.html}MarkupWriterFactory}}
| tapestry.MarkupWriterFactory |
-*-----------------------+--------------------------------------------------------------------+-----------------------------------+
-| persistentFieldManager |
{{{../apidocs/org/apache/tapestry/services/PersistentFieldManager.html}PersistentFieldManager}}
| tapestry.PersistentFieldManager |
-*-----------------------+--------------------------------------------------------------------+-----------------------------------+
-| request |
{{{../apidocs/org/apache/tapestry/services/WebRequest.html}WebRequest}} |
tapestry.WebRequest |
-*-----------------------+--------------------------------------------------------------------------------------------------------+
-| response |
{{{../apidocs/org/apache/tapestry/services/WebResponse.html}WebResponse}} |
tapestry.WebResponse |
-*-----------------------+--------------------------------------------------------------------------------------------------------+
-| typeCoercer | org.apache.tapestry.ioc.services.TypeCoercer |
tapestry.ioc.TypeCoercer |
-*-----------------------+--------------------------------------------------------------------------------------------------------+
-Default properties available via the infrastructure object provider
+ [bindingSource]
+
{{{../apidocs/org/apache/tapestry/services/BindingSource.html}BindingSource}}
(tapestry.BindingSource)
+
+ Central factory for creating all types of component Binding objects.
+
+ [componentSource]
+
{{{../apidocs/org/apache/tapestry/services/ComponentSource.html}ComponentSource}}
(tapestry.ComponentSource)
+
+ Used to retrieve component instances via their complete id.
+
+ [componentMessagesSource]
+
{{{../apidocs/org/apache/tapestry/services/ComponentMessagesSource.html}ComponentMessagesSource}}
(tapestry.ComponentMessagesSource)
+
+ Access to message catalogs for components.
+
+ [environment]
+ {{{../apidocs/org/apache/tapestry/services/Environment.html}Environment}}
(tapestry.Environment)
+
+ Used to access environmental services (typically, to install a new
environmental service).
+
+ [markupWriterFactory]
+
{{{../apidocs/org/apache/tapestry/services/MarkupWriterFactory.html}MarkupWriterFactory}}
(tapestry.MarkupWriterFactory)
+
+ Used as a source for MarkupWriter instances.
+
+ [persistentFieldManager]
+
{{{../apidocs/org/apache/tapestry/services/PersistentFieldManager.html}PersistentFieldManager}}
(tapestry.PersistentFieldManager)
+
+ Main access point between components and persistent field storage.
Delegates out most behavior to
+ particular persistent strategies.
+
+ [request]
+ {{{../apidocs/org/apache/tapestry/services/WebRequest.html}WebRequest}}
(tapestry.WebRequest)
+
+ The current request object (for the current thread).
+
+ [response]
+ {{{../apidocs/org/apache/tapestry/services/WebResponse.html}WebResponse}}
(tapestry.WebResponse)
+
+ The current response object (for the current thread).
+
+ [typeCoercer]
+
{{{http://tapestry.apache.org/tapestry5/tapestry-ioc/org/apache/tapestry/ioc/services/TypeCoercer.html}TypeCoercer}}
(tapestry.ioc.TypeCoercer)
+
+ Used to coerce values from one type to another (such as string to integer).
Contributing to Infrastructure
Modified: tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/inject.apt
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/inject.apt?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/inject.apt
(original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/inject.apt Wed
Nov 29 15:44:05 2006
@@ -5,7 +5,7 @@
Injection with Components
A key concept in Tapestry is the use of <injection>. The
- {{{../ioc/index.html}Tapestry IoC container}} makes use of one form
+ {{{http://tapestry.apache.org/tapestry5/tapestry-ioc/index.html}Tapestry IoC
container}} makes use of one form
of injection, via parameters to service builder methods.
For components, Tapestry takes a completely different tack: injection
directly into
@@ -32,7 +32,7 @@
* Named Injection
Here, a specific object is requested. The value of the Inject annotation is
an
- {{{../ioc/provider.html}object reference}} used to identify the exact
service, or other resource,
+ {{{http://tapestry.apache.org/tapestry5/tapestry-ioc/provider.html}object
reference}} used to identify the exact service, or other resource,
to be injected.
Commonly, the "infrastructure:" prefix is used with the Inject annotation,
to indirectly identify services contributed
@@ -65,6 +65,26 @@
<<TODO: Don't like the name "Annonymous" either.>>
+ The following types are supported for annonymous injection out of the box:
+
+ [java.lang.String]
+ The complete id of the component, which incorporates the complete class
name of the containing page and the nested
+ id of the component within the page.
+
+ [java.util.Locale]
+ The locale for the component (all components within a page use the same
locale).
+
+ [org.apache.commons.logging.Log]
+ A Log instance configured for the component, based on the component's
class name.
+
+ [org.apache.tapestry.ComponentResources]
+ The resources for the component, often used to generate links related
to the component.
+
+ [org.apache.tapestry.ioc.Messages]
+ The component message catalog for the component, from which
+ {{{localization.html}localized}} messages can be generated.
+
+
** Default Annonymous Injection
There are a finite number of types that Tapestry can check for. Beyond
that, the final default behavior
@@ -76,13 +96,13 @@
Caution should be used when leveraging this default behavior, since minor
code changes may introduce new services
that will cause previously working injections to fail. In general, relying
on default annonymous injection should
be avoided in anything but a prototype.
-
+
** Defining New Annonymous Injection Logic
Annonymous injection is controlled by the
{{{../apidocs/org/apache/tapestry/services/InjectionProvider.html}tapestry.InjectionProvider}}
service. The configuration for this service is a
- {{{../ioc/command.html}chain of command}} for handling annonymous injections.
+ {{{http://tapestry.apache.org/tapestry5/tapestry-ioc/command.html}chain of
command}} for handling annonymous injections.
Other Injections
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/app1/index.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/app1/index.html?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/app1/index.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/app1/index.html Wed Nov 29
15:44:05 2006
@@ -45,6 +45,9 @@
<li>
<a href="NumberSelect.html">NumberSelect</a> --
passivate/activate page context demo
</li>
+ <li>
+ <a href="Localization.html">Localization</a> -- accessing
localized messages from the component catalog
+ </li>
</ul>
</p>
</body>
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
Wed Nov 29 15:44:05 2006
@@ -309,6 +309,15 @@
assertTextPresent("You chose 5.");
}
+ @Test
+ public void app1_localization()
+ {
+ _selenium.open(BASE_URL);
+ clickAndWait("link=Localization");
+
+ assertTextPresent("Via injected Messages property: [Accessed via
injected Messages]");
+ }
+
private void assertText(String locator, String expected)
{
String actual = _selenium.getText(locator);
Added:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Localization.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Localization.java?view=auto&rev=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Localization.java
(added)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Localization.java
Wed Nov 29 15:44:05 2006
@@ -0,0 +1,31 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.integration.app1.pages;
+
+import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.annotations.Inject;
+import org.apache.tapestry.ioc.Messages;
+
[EMAIL PROTECTED]
+public class Localization
+{
+ @Inject
+ private Messages _messages;
+
+ public String getInjectedMessage()
+ {
+ return _messages.get("via-inject");
+ }
+}
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java
Wed Nov 29 15:44:05 2006
@@ -46,7 +46,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null);
+ PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null, null);
StartElementToken token = new StartElementToken("fred", l);
PageElement element = factory.newStartElement(token);
@@ -70,7 +70,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null);
+ PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null, null);
AttributeToken token = new AttributeToken("name", "value", l);
PageElement element = factory.newAttributeElement(token);
@@ -95,7 +95,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null);
+ PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null, null);
PageElement element = factory.newEndElement();
@@ -121,7 +121,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null);
+ PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null, null);
PageElement element1 = factory.newEndElement();
PageElement element2 = factory.newEndElement();
@@ -142,7 +142,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null);
+ PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null, null);
TextToken token = new TextToken("some text", l);
PageElement element = factory.newTextElement(token);
@@ -169,7 +169,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null);
+ PageElementFactory factory = new PageElementFactoryImpl(source,
resolver, null, null, null);
PageElement element = factory.newRenderBodyElement(component);
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
Wed Nov 29 15:44:05 2006
@@ -50,7 +50,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
ComponentResources resources = cpe.getComponentResources();
assertFalse(resources.isBound("fred"));
@@ -84,7 +84,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addParameter("barney", binding);
@@ -114,7 +114,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.containingPageDidLoad();
@@ -155,7 +155,7 @@
replay();
ComponentPageElementImpl cpe = new ComponentPageElementImpl(page,
container, "myid", ins,
- coercer, l);
+ coercer, null, l);
try
{
@@ -193,7 +193,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
assertFalse(cpe.getComponentResources().isInvariant("fred"));
@@ -230,7 +230,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addParameter("barney", binding);
@@ -270,7 +270,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addParameter("barney", binding);
@@ -293,7 +293,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
try
{
@@ -329,7 +329,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addEmbeddedElement(childElement);
@@ -359,7 +359,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addMixin(mixinIns);
@@ -388,7 +388,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addMixin(mixinIns);
@@ -427,7 +427,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins,
coercer, null);
cpe.addMixin(mixinInstantiator);
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImplTest.java?view=diff&rev=480770&r1=480769&r2=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImplTest.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImplTest.java
Wed Nov 29 15:44:05 2006
@@ -42,7 +42,7 @@
replay();
InternalComponentResources resources = new
InternalComponentResourcesImpl(element, ins,
- coercer);
+ coercer, null);
resources.renderInformalParameters(writer);
@@ -68,7 +68,7 @@
replay();
InternalComponentResources resources = new
InternalComponentResourcesImpl(element, ins,
- coercer);
+ coercer, null);
resources.addParameter("fred", binding);
@@ -103,7 +103,7 @@
replay();
InternalComponentResources resources = new
InternalComponentResourcesImpl(element, ins,
- coercer);
+ coercer, null);
resources.addParameter("fred", binding);
Added:
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.html?view=auto&rev=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.html
(added)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.html
Wed Nov 29 15:44:05 2006
@@ -0,0 +1,12 @@
+<t:comp type="Border"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+ <h1>Localization</h1>
+
+
+<p>Demonstrates a few ways that component message catalogs can be accessed in
code and in the template.</p>
+
+
+ <p>
+ Via injected Messages property: [${injectedMessage}]
+ </p>
+
+</t:comp>
Added:
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.properties
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.properties?view=auto&rev=480770
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.properties
(added)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/Localization.properties
Wed Nov 29 15:44:05 2006
@@ -0,0 +1 @@
+via-inject=Accessed via injected Messages
\ No newline at end of file