You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2006/08/24 17:26:51 UTC
svn commit: r434403 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/internal/
main/java/org/apache/tapestry/internal/event/
main/java/org/apache/tapestry/internal/pageload/
main/java/org/apache/tapestry/internal/parser/ ...
Author: hlship
Date: Thu Aug 24 08:26:45 2006
New Revision: 434403
URL: http://svn.apache.org/viewvc?rev=434403&view=rev
Log:
Check ins prior to some refactoring.
Added:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/InternalPageLoadModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactory.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactoryImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/HTMLDispatcher.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/InternalRequestModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePool.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePoolImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/AttributePageElement.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StartElementPageElement.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/TextPageElement.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/PageResponseRenderer.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/RenderModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/Dispatcher.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/PageElementFactoryImplTest.java
Removed:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/MarkupPageElement.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/InternalModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/event/InvalidationEventHub.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageLoaderImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/WebRequestImpl.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/PageElement.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalTransformModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/RequestModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/WebRequest.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/CollectionFactory.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/MessagesImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/services/ClassFabUtilsTest.java
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/InternalModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/InternalModule.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/InternalModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/InternalModule.java Thu Aug 24 08:26:45 2006
@@ -15,6 +15,8 @@
package org.apache.tapestry.internal;
import org.apache.commons.logging.Log;
+import org.apache.tapestry.internal.pageload.InternalPageLoadModule;
+import org.apache.tapestry.internal.request.InternalRequestModule;
import org.apache.tapestry.internal.services.UpdateListenerHub;
import org.apache.tapestry.internal.services.UpdateListenerHubImpl;
import org.apache.tapestry.internal.transform.InternalTransformModule;
@@ -28,9 +30,9 @@
/**
* @author Howard M. Lewis Ship
*/
-@Id("tapestry.internal.services")
+@Id("tapestry.internal")
@SubModule(
-{ InternalTransformModule.class })
+{ InternalTransformModule.class, InternalPageLoadModule.class, InternalRequestModule.class })
public final class InternalModule
{
/**
@@ -53,7 +55,6 @@
Log log, @InjectService("tapestry.ioc.LoggingDecorator")
LoggingDecorator loggingDecorator)
{
- return loggingDecorator
- .build(serviceInterface, delegate, serviceId, log);
+ return loggingDecorator.build(serviceInterface, delegate, serviceId, log);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/event/InvalidationEventHub.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/event/InvalidationEventHub.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/event/InvalidationEventHub.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/event/InvalidationEventHub.java Thu Aug 24 08:26:45 2006
@@ -25,5 +25,6 @@
{
void addInvalidationListener(InvalidationListener listener);
+ // TODO: May be able to remove this method.
void removeInvalidationListener(InvalidationListener listener);
}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/InternalPageLoadModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/InternalPageLoadModule.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/InternalPageLoadModule.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/InternalPageLoadModule.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,32 @@
+package org.apache.tapestry.internal.pageload;
+
+import org.apache.tapestry.internal.parser.TemplateParser;
+import org.apache.tapestry.internal.transform.ComponentInstantiatorSource;
+import org.apache.tapestry.ioc.annotations.Id;
+import org.apache.tapestry.ioc.annotations.InjectService;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+@Id("tapestry.internal.pageload")
+public final class InternalPageLoadModule
+{
+ public PageLoader buildPageLoader(@InjectService("ComponentTemplateSource")
+ ComponentTemplateSource templateSource, @InjectService("PageElementFactory")
+ PageElementFactory pageElementFactory)
+ {
+ return new PageLoaderImpl(templateSource, pageElementFactory);
+ }
+
+ public ComponentTemplateSource buildComponentTemplateSource(@InjectService("TemplateParser")
+ TemplateParser parser)
+ {
+ return new ComponentTemplateSourceImpl(parser);
+ }
+
+ public PageElementFactory buildPageElementFactory(@InjectService("ComponentInstantiatorSource")
+ ComponentInstantiatorSource instantiatorSource)
+ {
+ return new PageElementFactoryImpl(instantiatorSource);
+ }
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactory.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactory.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactory.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,32 @@
+package org.apache.tapestry.internal.pageload;
+
+import org.apache.tapestry.internal.parser.AttributeToken;
+import org.apache.tapestry.internal.parser.EndElementToken;
+import org.apache.tapestry.internal.parser.StartComponentToken;
+import org.apache.tapestry.internal.parser.StartElementToken;
+import org.apache.tapestry.internal.parser.TextToken;
+import org.apache.tapestry.internal.structure.ComponentPageElement;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.internal.structure.PageElement;
+
+/**
+ * Used by the {@link org.apache.tapestry.internal.pageload.PageLoader} to create page elements
+ *
+ * @author Howard M. Lewis Ship
+ */
+public interface PageElementFactory
+{
+ PageElement newTextElement(TextToken token);
+
+ PageElement newStartElement(StartElementToken token);
+
+ PageElement newAttributeElement(AttributeToken token);
+
+ PageElement newEndElement(EndElementToken token);
+
+ ComponentPageElement newComponentElement(Page page, ComponentPageElement container,
+ StartComponentToken token);
+
+ ComponentPageElement newRootComponentElement(Page page, String componentName);
+
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactoryImpl.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactoryImpl.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageElementFactoryImpl.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,92 @@
+package org.apache.tapestry.internal.pageload;
+
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.internal.parser.AttributeToken;
+import org.apache.tapestry.internal.parser.EndElementToken;
+import org.apache.tapestry.internal.parser.StartComponentToken;
+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.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.internal.transform.ComponentInstantiatorSource;
+import org.apache.tapestry.internal.transform.Instantiator;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class PageElementFactoryImpl implements PageElementFactory
+{
+ private final ComponentInstantiatorSource _componentInstantiatorSource;
+
+ public PageElementFactoryImpl(ComponentInstantiatorSource componentInstantiatorSource)
+ {
+ _componentInstantiatorSource = componentInstantiatorSource;
+ }
+
+ /** Singleton instance that represents any close tag of any element in any template. */
+ private final PageElement _endElement = new PageElement()
+ {
+ public void render(MarkupWriter writer)
+ {
+ writer.end();
+ }
+ };
+
+ public PageElement newStartElement(StartElementToken token)
+ {
+ return new StartElementPageElement(token.getName());
+ }
+
+ public PageElement newTextElement(TextToken token)
+ {
+ return new TextPageElement(token.getText());
+ }
+
+ public PageElement newEndElement(EndElementToken token)
+ {
+ return _endElement;
+ }
+
+ public PageElement newAttributeElement(AttributeToken token)
+ {
+ return new AttributePageElement(token.getName(), token.getValue());
+ }
+
+ public ComponentPageElement newComponentElement(Page page, ComponentPageElement container,
+ StartComponentToken token)
+ {
+ // For the moment, we're assuming each component will have an id and a FQCN for
+ // the type. This will change pretty soon.
+
+ String id = token.getId();
+
+ // Determining the component name is really not this easy. We may only specify
+ // the id in the template, and rely on the component model to provide us with
+ // the type. And the type in the template may be a local abbreviation that must
+ // be properly expanded to a FQCN before being passed to the
+ // component instantiator source.
+
+ String componentName = token.getType();
+
+ Instantiator instantiator = _componentInstantiatorSource.findInstantiator(componentName);
+
+ // The container for any components is the loading component, regardless of
+ // how the component elements are nested within the loading component's
+ // template.
+
+ return new ComponentPageElementImpl(page, container, id, instantiator);
+ }
+
+ public ComponentPageElement newRootComponentElement(Page page, String componentName)
+ {
+ Instantiator instantiator = _componentInstantiatorSource.findInstantiator(componentName);
+
+ return new ComponentPageElementImpl(page, instantiator);
+ }
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageLoaderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageLoaderImpl.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageLoaderImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/PageLoaderImpl.java Thu Aug 24 08:26:45 2006
@@ -19,16 +19,15 @@
import org.apache.tapestry.internal.parser.AttributeToken;
import org.apache.tapestry.internal.parser.ComponentTemplate;
+import org.apache.tapestry.internal.parser.EndElementToken;
import org.apache.tapestry.internal.parser.StartComponentToken;
+import org.apache.tapestry.internal.parser.StartElementToken;
import org.apache.tapestry.internal.parser.TemplateToken;
+import org.apache.tapestry.internal.parser.TextToken;
import org.apache.tapestry.internal.structure.ComponentPageElement;
-import org.apache.tapestry.internal.structure.ComponentPageElementImpl;
-import org.apache.tapestry.internal.structure.MarkupPageElement;
import org.apache.tapestry.internal.structure.Page;
import org.apache.tapestry.internal.structure.PageElement;
import org.apache.tapestry.internal.structure.PageImpl;
-import org.apache.tapestry.internal.transform.ComponentInstantiatorSource;
-import org.apache.tapestry.internal.transform.Instantiator;
import static org.apache.tapestry.util.CollectionFactory.newList;
@@ -39,19 +38,20 @@
*/
public class PageLoaderImpl implements PageLoader
{
- private final ComponentInstantiatorSource _componentInstantiatorSource;
private final ComponentTemplateSource _templateSource;
+ private final PageElementFactory _pageElementFactory;
+
private Page _page;
private Locale _locale;
- public PageLoaderImpl(ComponentInstantiatorSource componentInstantiatorSource,
- ComponentTemplateSource templateSource)
+ public PageLoaderImpl(ComponentTemplateSource templateSource,
+ PageElementFactory pageElementFactory)
{
- _componentInstantiatorSource = componentInstantiatorSource;
_templateSource = templateSource;
+ _pageElementFactory = pageElementFactory;
}
/**
@@ -89,9 +89,9 @@
private void loadRootComponent(String componentName)
{
- Instantiator instantiator = _componentInstantiatorSource.findInstantiator(componentName);
-
- ComponentPageElement rootComponent = new ComponentPageElementImpl(_page, instantiator);
+ ComponentPageElement rootComponent = _pageElementFactory.newRootComponentElement(
+ _page,
+ componentName);
_page.setRootElement(rootComponent);
@@ -132,10 +132,12 @@
{
switch (token.getTokenType())
{
- case CDATA:
+ // case CDATA: -- not yet supported
+
case TEXT:
- add(loadingComponent, activeComponent, new MarkupPageElement(token));
+ add(loadingComponent, activeComponent, _pageElementFactory
+ .newTextElement((TextToken) token));
break;
case START_ELEMENT:
@@ -144,7 +146,8 @@
// starting a component, because we can't differentitate cases
// when we hit the end element token.
- PageElement newElement = new MarkupPageElement(token);
+ PageElement newElement = _pageElementFactory
+ .newStartElement((StartElementToken) token);
add(loadingComponent, activeComponent, newElement);
@@ -155,7 +158,7 @@
// Any additional attribute tokens should be directed to
// the activePageElement, and not be directed to
- // the the activeComponent.
+ // the activeComponent.
directlyInsideSubcomponent = false;
@@ -163,7 +166,8 @@
case END_ELEMENT:
- add(loadingComponent, activeComponent, new MarkupPageElement(token));
+ add(loadingComponent, activeComponent, _pageElementFactory
+ .newEndElement((EndElementToken) token));
activePageElement = pop(activePageElementStack);
activeComponent = pop(activeComponentStack);
@@ -172,30 +176,14 @@
case START_COMPONENT:
- StartComponentToken start = (StartComponentToken) token;
-
- // For the moment, we're assuming each component will have an id and a FQCN for
- // the type. This will change pretty soon.
-
- String id = start.getId();
-
- // Determining the component name is really not this easy. We may only specify
- // the id in the template, and rely on the component model to provide us with
- // the type. And the type in the template may be a local abbreviation that must
- // be properly expanded to a FQCN before being passed to the
- // component instantiator source.
-
- String componentName = start.getType();
-
- Instantiator instantiator = _componentInstantiatorSource
- .findInstantiator(componentName);
-
// The container for any components is the loading component, regardless of
// how the component elements are nested within the loading component's
// template.
- ComponentPageElement newComponent = new ComponentPageElementImpl(_page,
- loadingComponent, id, instantiator);
+ ComponentPageElement newComponent = _pageElementFactory.newComponentElement(
+ _page,
+ loadingComponent,
+ ((StartComponentToken) token));
// Make sure container knows about the new component.
@@ -224,15 +212,14 @@
case ATTRIBUTE:
+ AttributeToken attribute = (AttributeToken) token;
+
if (directlyInsideSubcomponent)
- {
- AttributeToken attribute = (AttributeToken) token;
activeComponent.addParameter(attribute);
- }
else
- {
- add(loadingComponent, activeComponent, new MarkupPageElement(token));
- }
+ add(loadingComponent, activeComponent, _pageElementFactory
+ .newAttributeElement(attribute));
+ break;
default:
throw new IllegalStateException("Just haven't written that stuff yet.");
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java Thu Aug 24 08:26:45 2006
@@ -45,6 +45,8 @@
{
super(TokenType.START_COMPONENT, location);
+ // TODO: id or type may be null, nut not both!
+
_id = id;
_type = type;
}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/HTMLDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/HTMLDispatcher.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/HTMLDispatcher.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/HTMLDispatcher.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,21 @@
+package org.apache.tapestry.internal.request;
+
+import org.apache.tapestry.request.Dispatcher;
+import org.apache.tapestry.request.WebRequest;
+import org.apache.tapestry.request.WebResponse;
+
+/**
+ * Dispatches incoming requests whose path ends with ".html". In these cases, the path is
+ * interpreted as a page name.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public class HTMLDispatcher implements Dispatcher
+{
+ public boolean dispatch(WebRequest request, WebResponse response)
+ {
+ String path = request.getPath();
+
+ return false;
+ }
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/InternalRequestModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/InternalRequestModule.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/InternalRequestModule.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/InternalRequestModule.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,9 @@
+package org.apache.tapestry.internal.request;
+
+import org.apache.tapestry.ioc.annotations.Id;
+
+@Id("tapestry.internal.request")
+public final class InternalRequestModule
+{
+
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePool.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePool.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePool.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePool.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,22 @@
+package org.apache.tapestry.internal.request;
+
+import org.apache.tapestry.internal.structure.Page;
+
+public interface PagePool
+{
+ /**
+ * Obtains a page instance from the pool via a page name. A page instance is created if no such
+ * page is currently available.
+ *
+ * @param pageName
+ * identifies the page name, as a fully qualified class name
+ * @return a page instance
+ */
+ Page checkout(String pageName);
+
+ /**
+ * @param page
+ * a previously checked-out page
+ */
+ void release(Page page);
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePoolImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePoolImpl.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePoolImpl.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/PagePoolImpl.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,58 @@
+package org.apache.tapestry.internal.request;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.tapestry.internal.pageload.PageLoader;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.util.CollectionFactory;
+
+/**
+ * A very naive implementation just to get us past the start line.
+ * <p>
+ * TODO: Clear pool on cache invalidation.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public class PagePoolImpl implements PagePool
+{
+ private final PageLoader _pageLoader;
+
+ // TODO: The key for this will ultimately be qualified with locale (or locale name) as well
+ // as page name.
+
+ private final Map<String, List<Page>> _pool = CollectionFactory.newMap();
+
+ public PagePoolImpl(PageLoader pageLoader)
+ {
+ _pageLoader = pageLoader;
+ }
+
+ public synchronized Page checkout(String pageName)
+ {
+ List<Page> pages = _pool.get(pageName);
+
+ if (pages.isEmpty())
+ return _pageLoader.loadPage(pageName, Locale.getDefault());
+
+ // Remove and return the last page in the pool.
+
+ return pages.remove(pages.size() - 1);
+ }
+
+ public synchronized void release(Page page)
+ {
+ String key = page.getName();
+ List<Page> pages = _pool.get(key);
+
+ if (pages == null)
+ {
+ pages = CollectionFactory.newList();
+ _pool.put(key, pages);
+ }
+
+ pages.add(page);
+ }
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/WebRequestImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/WebRequestImpl.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/WebRequestImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/request/WebRequestImpl.java Thu Aug 24 08:26:45 2006
@@ -22,8 +22,8 @@
import org.apache.tapestry.request.WebRequest;
/**
- * Basic implementation of {@link org.apache.tapestry.request.WebRequest} that wraps around
- * an {@link javax.servlet.http.HttpServletRequest}.
+ * Basic implementation of {@link org.apache.tapestry.request.WebRequest} that wraps around an
+ * {@link javax.servlet.http.HttpServletRequest}.
*
* @author Howard M. Lewis Ship
*/
@@ -49,6 +49,11 @@
public String[] getParameters(String name)
{
return _request.getParameterValues(name);
+ }
+
+ public String getPath()
+ {
+ return _request.getServletPath();
}
}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/AttributePageElement.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/AttributePageElement.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/AttributePageElement.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/AttributePageElement.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,27 @@
+package org.apache.tapestry.internal.structure;
+
+import org.apache.tapestry.MarkupWriter;
+
+/**
+ * A page element that renders an attribute (into the most recently started element).
+ *
+ * @author Howard M. Lewis Ship
+ */
+public class AttributePageElement implements PageElement
+{
+ private final String _name;
+
+ private final String _value;
+
+ public AttributePageElement(String name, String value)
+ {
+ _name = name;
+ _value = value;
+ }
+
+ public void render(MarkupWriter writer)
+ {
+ writer.attribute(_name, _value);
+ }
+
+}
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?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- 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 Thu Aug 24 08:26:45 2006
@@ -17,6 +17,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.tapestry.MarkupWriter;
import org.apache.tapestry.internal.parser.AttributeToken;
import org.apache.tapestry.internal.transform.Instantiator;
import org.apache.tapestry.runtime.ComponentLifecycle;
@@ -120,6 +121,11 @@
public String getId()
{
return _id;
+ }
+
+ public void render(MarkupWriter writer)
+ {
+ throw new UnsupportedOperationException("Not yet implemented.");
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageElement.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageElement.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageElement.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/PageElement.java Thu Aug 24 08:26:45 2006
@@ -14,6 +14,8 @@
package org.apache.tapestry.internal.structure;
+import org.apache.tapestry.Renderable;
+
/**
* An element within a page. Page elements are placeholders that delegate much of their behavior to
* application-specific component classes. A page element will also, ultimately, provide
@@ -21,6 +23,6 @@
*
* @author Howard M. Lewis Ship
*/
-public interface PageElement
+public interface PageElement extends Renderable
{
}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StartElementPageElement.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StartElementPageElement.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StartElementPageElement.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StartElementPageElement.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,21 @@
+package org.apache.tapestry.internal.structure;
+
+import org.apache.tapestry.MarkupWriter;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class StartElementPageElement implements PageElement
+{
+ private final String _name;
+
+ public StartElementPageElement(String name)
+ {
+ _name = name;
+ }
+
+ public void render(MarkupWriter writer)
+ {
+ writer.element(_name);
+ }
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/TextPageElement.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/TextPageElement.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/TextPageElement.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/TextPageElement.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,19 @@
+package org.apache.tapestry.internal.structure;
+
+import org.apache.tapestry.MarkupWriter;
+
+public class TextPageElement implements PageElement
+{
+ private final String _text;
+
+ public TextPageElement(String text)
+ {
+ _text = text;
+ }
+
+ public void render(MarkupWriter writer)
+ {
+ writer.write(_text);
+ }
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/test/InternalBaseTestCase.java Thu Aug 24 08:26:45 2006
@@ -21,6 +21,7 @@
import org.apache.tapestry.internal.ioc.InternalRegistry;
import org.apache.tapestry.internal.ioc.Module;
import org.apache.tapestry.internal.parser.ComponentTemplate;
+import org.apache.tapestry.internal.transform.ComponentInstantiatorSource;
import org.apache.tapestry.ioc.ObjectProvider;
import org.apache.tapestry.ioc.Registry;
import org.apache.tapestry.ioc.RegistryBuilder;
@@ -101,5 +102,15 @@
{
provider.provide(expression, objectType, locator);
setReturnValue(object);
+ }
+
+ protected final Module newModule()
+ {
+ return newMock(Module.class);
+ }
+
+ protected final ComponentInstantiatorSource newComponentInstantiatorSource()
+ {
+ return newMock(ComponentInstantiatorSource.class);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalTransformModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalTransformModule.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalTransformModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalTransformModule.java Thu Aug 24 08:26:45 2006
@@ -57,7 +57,7 @@
public ComponentInstantiatorSource buildComponentInstantiatorSource(
@InjectService("ComponentClassTransformer")
ComponentClassTransformer transformer,
- @InjectService("tapestry.internal.services.UpdateListenerHub")
+ @InjectService("tapestry.internal.UpdateListenerHub")
UpdateListenerHub hub, Log log)
{
ComponentInstantiatorSourceImpl source = new ComponentInstantiatorSourceImpl(transformer,
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/PageResponseRenderer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/PageResponseRenderer.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/PageResponseRenderer.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/PageResponseRenderer.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,8 @@
+package org.apache.tapestry.render;
+
+import org.apache.tapestry.request.WebResponse;
+
+public interface PageResponseRenderer
+{
+ void renderPageResponse(Object page, WebResponse response);
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/RenderModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/RenderModule.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/RenderModule.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/render/RenderModule.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,12 @@
+package org.apache.tapestry.render;
+
+import org.apache.tapestry.ioc.annotations.Id;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+@Id("tapestry.render")
+public final class RenderModule
+{
+
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/Dispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/Dispatcher.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/Dispatcher.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/Dispatcher.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,17 @@
+package org.apache.tapestry.request;
+
+
+/**
+ * A dispatcher is responsible for recognizing an incoming request
+ *
+ * @author Howard M. Lewis Ship
+ */
+public interface Dispatcher
+{
+ /**
+ * Analyzes the incoming request and performs an appropriate operation for each.
+ *
+ * @return true if a response was delivered
+ */
+ boolean dispatch(WebRequest request, WebResponse response);
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/RequestModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/RequestModule.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/RequestModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/RequestModule.java Thu Aug 24 08:26:45 2006
@@ -25,10 +25,12 @@
import org.apache.tapestry.internal.request.WebRequestImpl;
import org.apache.tapestry.internal.request.WebResponseImpl;
import org.apache.tapestry.ioc.MappedConfiguration;
+import org.apache.tapestry.ioc.OrderedConfiguration;
import org.apache.tapestry.ioc.annotations.Contribute;
import org.apache.tapestry.ioc.annotations.Id;
import org.apache.tapestry.ioc.annotations.InjectService;
import org.apache.tapestry.ioc.annotations.Lifecycle;
+import org.apache.tapestry.ioc.services.ChainBuilder;
import org.apache.tapestry.ioc.services.PipelineBuilder;
import org.apache.tapestry.ioc.services.PropertyShadowBuilder;
@@ -46,6 +48,8 @@
private final RequestGlobals _requestGlobals;
+ private final ChainBuilder _chainBuilder;
+
// Yes, you can inject services defined by this module into this module. The service proxy is
// created without
// instantiating the module itself.
@@ -53,11 +57,13 @@
public RequestModule(@InjectService("tapestry.ioc.PipelineBuilder")
PipelineBuilder pipelineBuilder, @InjectService("tapestry.ioc.PropertyShadowBuilder")
PropertyShadowBuilder shadowBuilder, @InjectService("RequestGlobals")
- RequestGlobals requestGlobals)
+ RequestGlobals requestGlobals, @InjectService("tapestry.ioc.ChainBuilder")
+ ChainBuilder chainBuilder)
{
_pipelineBuilder = pipelineBuilder;
_shadowBuilder = shadowBuilder;
_requestGlobals = requestGlobals;
+ _chainBuilder = chainBuilder;
}
public HttpServletRequestHandler buildHttpServletRequestHandler(Log log,
@@ -86,7 +92,9 @@
terminator);
}
- public WebRequestHandler buildWebRequestHandler(Log log, List<WebRequestFilter> configuration)
+ public WebRequestHandler buildWebRequestHandler(Log log, List<WebRequestFilter> configuration,
+ @InjectService("MasterDispatcher")
+ final Dispatcher masterDispatcher)
{
WebRequestHandler terminator = new WebRequestHandler()
{
@@ -94,9 +102,7 @@
{
_requestGlobals.store(request, response);
- // Much more to come from here in!
-
- return false;
+ return masterDispatcher.dispatch(request, response);
}
};
@@ -126,5 +132,26 @@
WebRequest request)
{
configuration.add("request", request);
+ }
+
+ /**
+ * Ordered contributions to the MasterDispatcher service allow different URL matching strategies
+ * to occur.
+ */
+ public Dispatcher buildMasterDispatcher(List<Dispatcher> configuration)
+ {
+ return _chainBuilder.build(Dispatcher.class, configuration);
+ }
+
+ public Dispatcher buildHTMLDispatcher()
+ {
+ return null;
+ }
+
+ public void contributeMasterDispatcher(OrderedConfiguration<Dispatcher> configuration,
+ @InjectService("HTMLDispatcher")
+ Dispatcher HTMLDispatcher)
+ {
+ configuration.add("HTML", HTMLDispatcher);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/WebRequest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/WebRequest.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/WebRequest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/request/WebRequest.java Thu Aug 24 08:26:45 2006
@@ -37,4 +37,10 @@
* request.
*/
String[] getParameters(String name);
+
+ /**
+ * Returns the path portion of the request, which includes
+ * @return
+ */
+ String getPath();
}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/ComponentClassResolver.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,29 @@
+package org.apache.tapestry.services;
+
+/**
+ * Resolves partial names of pages (i.e., root components) and components.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public interface ComponentClassResolver
+{
+ /**
+ * Converts a partial page name (such as might be encoded into a URL) into a fully qualified
+ * class name.
+ *
+ * @param inputPageName
+ * partial name
+ * @return fully qualified name
+ */
+ String resolvePageName(String inputPageName);
+
+ /**
+ * Converts a partial component name (such as might be used inside a template or annotation)
+ * into a fully qualified class name.
+ *
+ * @param inputPageName
+ * partial name
+ * @return fully qualified name
+ */
+ String resolveComponentName(String inputComponentName);
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java Thu Aug 24 08:26:45 2006
@@ -27,14 +27,14 @@
import java.util.UUID;
import org.apache.commons.logging.Log;
+import org.apache.tapestry.Location;
import org.apache.tapestry.Resource;
import org.apache.tapestry.internal.annotations.SuppressNullCheck;
-import org.apache.tapestry.internal.ioc.Module;
import org.apache.tapestry.ioc.Configuration;
import org.apache.tapestry.ioc.LogSource;
import org.apache.tapestry.ioc.MappedConfiguration;
-import org.apache.tapestry.ioc.OrderedConfiguration;
import org.apache.tapestry.ioc.ObjectCreator;
+import org.apache.tapestry.ioc.OrderedConfiguration;
import org.apache.tapestry.ioc.ServiceBuilderResources;
import org.apache.tapestry.ioc.ServiceDecorator;
import org.apache.tapestry.ioc.ServiceLocator;
@@ -299,11 +299,6 @@
return newMock(ServiceBuilderResources.class);
}
- protected final Module newModule()
- {
- return newMock(Module.class);
- }
-
protected final void trainGetModuleId(ModuleDef def, String moduleId)
{
def.getModuleId();
@@ -331,6 +326,11 @@
protected final Runnable newRunnable()
{
return newMock(Runnable.class);
+ }
+
+ protected final Location newLocation()
+ {
+ return newMock(Location.class);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/CollectionFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/CollectionFactory.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/CollectionFactory.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/CollectionFactory.java Thu Aug 24 08:26:45 2006
@@ -21,6 +21,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.tapestry.internal.annotations.Utility;
@@ -67,10 +68,17 @@
/**
* Constructs a new {@link java.util.HashMap} instance by copying an existing Map instance.
*/
-
public static <K, V> Map<K, V> newMap(Map<K, V> map)
{
return new HashMap<K, V>(map);
+ }
+
+ /**
+ * Constructs a new thread safe map.
+ */
+ public static <K, V> Map<K, V> newThreadSafeMap()
+ {
+ return new ConcurrentHashMap<K, V>();
}
/** Contructs and returns a new generic {@link java.util.ArrayList} instance. */
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/MessagesImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/MessagesImplTest.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/MessagesImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/MessagesImplTest.java Thu Aug 24 08:26:45 2006
@@ -74,5 +74,4 @@
{
assertEquals(_messages.format("rezult", "good"), "[REZULT]");
}
-
}
Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/PageElementFactoryImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/PageElementFactoryImplTest.java?rev=434403&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/PageElementFactoryImplTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/PageElementFactoryImplTest.java Thu Aug 24 08:26:45 2006
@@ -0,0 +1,131 @@
+package org.apache.tapestry.internal.pageload;
+
+import org.apache.tapestry.Location;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.internal.parser.AttributeToken;
+import org.apache.tapestry.internal.parser.EndElementToken;
+import org.apache.tapestry.internal.parser.StartElementToken;
+import org.apache.tapestry.internal.parser.TextToken;
+import org.apache.tapestry.internal.services.MarkupWriterImpl;
+import org.apache.tapestry.internal.structure.PageElement;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.internal.transform.ComponentInstantiatorSource;
+import org.testng.annotations.Test;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class PageElementFactoryImplTest extends InternalBaseTestCase
+{
+ @Test
+ public void start_element()
+ {
+ ComponentInstantiatorSource source = newComponentInstantiatorSource();
+ MarkupWriter writer = new MarkupWriterImpl();
+ Location l = newLocation();
+
+ replay();
+
+ PageElementFactory factory = new PageElementFactoryImpl(source);
+ StartElementToken token = new StartElementToken("fred", l);
+
+ PageElement element = factory.newStartElement(token);
+
+ element.render(writer);
+
+ verify();
+
+ assertEquals(writer.toString(), "<fred/>");
+ }
+
+ @Test
+ public void attribute()
+ {
+ ComponentInstantiatorSource source = newComponentInstantiatorSource();
+ MarkupWriter writer = new MarkupWriterImpl();
+ Location l = newLocation();
+
+ replay();
+
+ PageElementFactory factory = new PageElementFactoryImpl(source);
+ AttributeToken token = new AttributeToken("name", "value", l);
+
+ PageElement element = factory.newAttributeElement(token);
+
+ writer.element("root");
+
+ element.render(writer);
+
+ verify();
+
+ assertEquals(writer.toString(), "<root name=\"value\"/>");
+ }
+
+ @Test
+ public void end_element()
+ {
+ ComponentInstantiatorSource source = newComponentInstantiatorSource();
+ MarkupWriter writer = new MarkupWriterImpl();
+ Location l = newLocation();
+
+ replay();
+
+ PageElementFactory factory = new PageElementFactoryImpl(source);
+ EndElementToken token = new EndElementToken(l);
+
+ PageElement element = factory.newEndElement(token);
+
+ writer.element("root");
+ writer.write("before");
+ writer.element("nested");
+
+ element.render(writer);
+
+ writer.write("after");
+
+ verify();
+
+ assertEquals(writer.toString(), "<root>before<nested/>after</root>");
+ }
+
+ @Test
+ public void end_element_is_singleton()
+ {
+ ComponentInstantiatorSource source = newComponentInstantiatorSource();
+ Location l1 = newLocation();
+ Location l2 = newLocation();
+
+ replay();
+
+ PageElementFactory factory = new PageElementFactoryImpl(source);
+
+ PageElement element1 = factory.newEndElement(new EndElementToken(l1));
+ PageElement element2 = factory.newEndElement(new EndElementToken(l2));
+
+ assertSame(element2, element1);
+
+ verify();
+ }
+
+ @Test
+ public void text_element()
+ {
+ ComponentInstantiatorSource source = newComponentInstantiatorSource();
+ MarkupWriter writer = new MarkupWriterImpl();
+ Location l = newLocation();
+
+ replay();
+
+ PageElementFactory factory = new PageElementFactoryImpl(source);
+ TextToken token = new TextToken("some text", l);
+
+ PageElement element = factory.newTextElement(token);
+
+ writer.element("root");
+ element.render(writer);
+
+ verify();
+
+ assertEquals(writer.toString(), "<root>some text</root>");
+ }
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java Thu Aug 24 08:26:45 2006
@@ -170,7 +170,7 @@
// Detect the change and clear out the internal caches
UpdateListenerHub hub = _registry.getService(
- "tapestry.internal.services.UpdateListenerHub",
+ "tapestry.internal.UpdateListenerHub",
UpdateListenerHub.class);
hub.fireUpdateEvent();
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/services/ClassFabUtilsTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/services/ClassFabUtilsTest.java?rev=434403&r1=434402&r2=434403&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/services/ClassFabUtilsTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/services/ClassFabUtilsTest.java Thu Aug 24 08:26:45 2006
@@ -44,5 +44,4 @@
{ "byte[][]", "[[B" },
{ "java.lang.Runnable[][]", "[[Ljava.lang.Runnable;" } };
}
-
}