You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2008/12/22 18:44:05 UTC
svn commit: r728732 [3/3] - in /tapestry/tapestry5/branches/5.0: ./
quickstart/ quickstart/src/main/resources/archetype-resources/
src/site/apt/ src/site/apt/guide/ tapestry-annotations/
tapestry-component-report/ tapestry-core/ tapestry-core/src/main/...
Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java Mon Dec 22 09:44:01 2008
@@ -23,7 +23,6 @@
import org.apache.tapestry5.internal.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.Location;
import org.apache.tapestry5.ioc.internal.util.TapestryException;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.model.ParameterModel;
import org.apache.tapestry5.runtime.Component;
@@ -50,17 +49,19 @@
Page page = newPage(PAGE_NAME);
Component component = mockComponent();
ComponentModel model = mockComponentModel();
- TypeCoercer coercer = mockTypeCoercer();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
ComponentResources resources = cpe.getComponentResources();
@@ -83,17 +84,19 @@
Page page = newPage(PAGE_NAME);
Component component = mockComponent();
ComponentModel model = mockComponentModel();
- TypeCoercer coercer = mockTypeCoercer();
Block block = mockBlock();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
ComponentResources resources = cpe.getComponentResources();
@@ -113,12 +116,14 @@
Component component = mockComponent();
ComponentModel model = mockComponentModel();
Binding binding = mockBinding();
- TypeCoercer coercer = mockTypeCoercer();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
train_getParameterModel(model, "barney", null);
@@ -126,7 +131,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
ComponentResources resources = cpe.getComponentResources();
assertFalse(resources.isBound("fred"));
@@ -145,18 +150,20 @@
Page page = newPage(PAGE_NAME);
Component component = mockComponent();
ComponentModel model = mockComponentModel();
- TypeCoercer coercer = mockTypeCoercer();
Block block1 = mockBlock();
Block block2 = mockBlock();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.addBlock("myblock", block1);
@@ -181,13 +188,15 @@
Component component = mockComponent();
ComponentModel model = mockComponentModel();
Binding binding = mockBinding();
- TypeCoercer coercer = mockTypeCoercer();
ParameterModel pmodel = mockParameterModel();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
train_getParameterNames(model, "barney");
train_getParameterModel(model, "barney", pmodel);
@@ -196,7 +205,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.bindParameter("barney", binding);
@@ -212,12 +221,14 @@
Component component = mockComponent();
ComponentModel model = mockComponentModel();
ParameterModel pmodel = mockParameterModel();
- TypeCoercer coercer = mockTypeCoercer();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
train_getParameterNames(model, "barney");
train_getParameterModel(model, "barney", pmodel);
@@ -227,7 +238,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.containingPageDidLoad();
@@ -244,12 +255,14 @@
ComponentModel model = mockComponentModel();
ParameterModel pmodel = mockParameterModel();
Location l = mockLocation();
- TypeCoercer coercer = mockTypeCoercer();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
train_getComponentResources(container, containerResources);
@@ -274,7 +287,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, container, "myid", null, ins, l, null);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, container, "myid", null, ins, l, pr);
try
{
@@ -290,108 +303,18 @@
verify();
}
- @Test
- public void is_invariant()
+ protected final PageResources mockPageResources(Logger componentLogger, Logger eventLogger)
{
- Page page = newPage(PAGE_NAME);
- Component component = mockComponent();
- ComponentModel model = mockComponentModel();
- Binding binding = mockBinding();
- TypeCoercer coercer = mockTypeCoercer();
- ParameterModel pmodel = mockParameterModel();
- Logger logger = mockLogger();
-
- train_getLogger(model, logger);
-
- Instantiator ins = newInstantiator(component, model);
-
- train_getParameterModel(model, "barney", pmodel);
-
- train_isInvariant(binding, true);
-
- replay();
-
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
-
- assertFalse(cpe.getComponentResources().isInvariant("fred"));
-
- cpe.bindParameter("barney", binding);
+ PageResources resources = newMock(PageResources.class);
- assertFalse(cpe.getComponentResources().isInvariant("fred"));
- assertTrue(cpe.getComponentResources().isInvariant("barney"));
+ train_getEventLogger(resources, componentLogger, eventLogger);
- verify();
+ return resources;
}
- @Test
- public void read_binding()
+ protected final void train_getEventLogger(PageResources resources, Logger componentLogger, Logger eventLogger)
{
- Page page = newPage(PAGE_NAME);
- Component component = mockComponent();
- ComponentModel model = mockComponentModel();
- Binding binding = mockBinding();
- PageResources resources = mockPageResources();
- Logger logger = mockLogger();
-
- train_getLogger(model, logger);
-
- train_getSupportsInformalParameters(model, true);
-
- Long boundValue = new Long(23);
-
- Instantiator ins = newInstantiator(component, model);
-
- train_getParameterModel(model, "barney", null);
-
- train_get(binding, boundValue);
-
- train_coerce(resources, boundValue, Long.class, boundValue);
-
- replay();
-
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, resources);
-
- cpe.bindParameter("barney", binding);
-
- assertSame(cpe.getComponentResources().readParameter("barney", Long.class), boundValue);
-
- verify();
- }
-
-
- @Test
- public void write_binding()
- {
- Page page = newPage(PAGE_NAME);
- Component component = mockComponent();
- ComponentModel model = mockComponentModel();
- PageResources resources = mockPageResources();
- Binding binding = mockBinding();
- Logger logger = mockLogger();
-
- train_getLogger(model, logger);
-
- Instantiator ins = newInstantiator(component, model);
-
- train_getParameterModel(model, "barney", null);
-
- train_getSupportsInformalParameters(model, true);
-
- expect(binding.getBindingType()).andReturn(Integer.class);
-
- train_coerce(resources, 23, Integer.class, 23);
-
- binding.set(23);
-
- replay();
-
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, resources);
-
- cpe.bindParameter("barney", binding);
-
- cpe.getComponentResources().writeParameter("barney", 23);
-
- verify();
+ expect(resources.getEventLogger(componentLogger)).andReturn(eventLogger);
}
@Test
@@ -401,16 +324,22 @@
Component component = mockComponent();
ComponentModel model = mockComponentModel();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
+
+ Instantiator ins = mockInstantiator(component, model);
+ Instantiator ins2 = mockInstantiator(component, model);
- Instantiator ins = newInstantiator(component, model);
- Instantiator ins2 = newInstantiator(component, model);
+ train_getEventLogger(pr, logger, eventLogger);
+ train_isDebugEnabled(eventLogger, false);
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
- cpe.addEmbeddedElement(new ComponentPageElementImpl(page, cpe, "nested", null, ins2, null, null));
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
+ cpe.addEmbeddedElement(new ComponentPageElementImpl(page, cpe, "nested", null, ins2, null, pr));
try
{
@@ -435,17 +364,20 @@
ComponentPageElement childElement = mockComponentPageElement();
Component childComponent = mockComponent();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
+ Instantiator ins = mockInstantiator(component, model);
train_getId(childElement, "child");
train_getComponent(childElement, childComponent);
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.addEmbeddedElement(childElement);
@@ -468,10 +400,13 @@
ComponentPageElement child2 = mockComponentPageElement();
Location l = mockLocation();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(pageComponent, model);
+ Instantiator ins = mockInstantiator(pageComponent, model);
train_getId(child1, "Child");
train_getId(child2, "CHILD");
@@ -480,7 +415,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.addEmbeddedElement(child1);
@@ -504,22 +439,24 @@
Page page = newPage(PAGE_NAME);
Component component = mockComponent();
ComponentModel model = mockComponentModel();
- TypeCoercer coercer = mockTypeCoercer();
final String mixinClassName = "foo.Bar";
Component mixin = mockComponent();
ComponentModel mixinModel = mockComponentModel();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
- Instantiator mixinIns = newInstantiator(mixin, mixinModel);
+ Instantiator ins = mockInstantiator(component, model);
+ Instantiator mixinIns = mockInstantiator(mixin, mixinModel);
train_getComponentClassName(mixinModel, mixinClassName);
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.addMixin(mixinIns);
@@ -534,21 +471,23 @@
Page page = newPage(PAGE_NAME);
Component component = mockComponent();
ComponentModel model = mockComponentModel();
- TypeCoercer coercer = mockTypeCoercer();
Component mixin = mockComponent();
ComponentModel mixinModel = mockComponentModel();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
- Instantiator mixinIns = newInstantiator(mixin, mixinModel);
+ Instantiator ins = mockInstantiator(component, model);
+ Instantiator mixinIns = mockInstantiator(mixin, mixinModel);
train_getComponentClassName(mixinModel, "foo.Bar");
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.addMixin(mixinIns);
@@ -573,20 +512,22 @@
ComponentModel model = mockComponentModel();
ComponentModel mixinModel = mockComponentModel();
Component mixin = mockComponent();
- TypeCoercer coercer = mockTypeCoercer();
Binding binding = mockBinding();
Logger logger = mockLogger();
+ Logger eventLogger = mockLogger();
+ PageResources pr = mockPageResources(logger, eventLogger);
train_getLogger(model, logger);
+ train_isDebugEnabled(eventLogger, false);
- Instantiator ins = newInstantiator(component, model);
- Instantiator mixinInstantiator = newInstantiator(mixin, mixinModel);
+ Instantiator ins = mockInstantiator(component, model);
+ Instantiator mixinInstantiator = mockInstantiator(mixin, mixinModel);
train_getComponentClassName(mixinModel, "foo.Fred");
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, null);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, pr);
cpe.addMixin(mixinInstantiator);
@@ -604,7 +545,7 @@
verify();
}
- private Instantiator newInstantiator(Component component, ComponentModel model)
+ private Instantiator mockInstantiator(Component component, ComponentModel model)
{
Instantiator ins = newMock(Instantiator.class);
Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ExpansionPageElementImplTest.java Mon Dec 22 09:44:01 2008
@@ -1,25 +1,26 @@
-// Copyright 2006, 2007 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.
-
+// Copyright 2006, 2007, 2008 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.tapestry5.internal.structure;
-import org.apache.tapestry5.Binding;
-import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.runtime.RenderQueue;
-import org.testng.annotations.Test;
+import org.apache.tapestry5.Binding;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.runtime.RenderCommand;
+import org.apache.tapestry5.runtime.RenderQueue;
+import org.testng.annotations.Test;
public class ExpansionPageElementImplTest extends InternalBaseTestCase
{
@@ -37,7 +38,7 @@
replay();
- PageElement element = new ExpansionPageElement(binding, coercer);
+ RenderCommand element = new ExpansionPageElement(binding, coercer);
verify();
@@ -76,7 +77,7 @@
replay();
- PageElement element = new ExpansionPageElement(binding, coercer);
+ RenderCommand element = new ExpansionPageElement(binding, coercer);
verify();
Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java Mon Dec 22 09:44:01 2008
@@ -22,7 +22,6 @@
import org.apache.tapestry5.internal.services.*;
import org.apache.tapestry5.internal.structure.ComponentPageElement;
import org.apache.tapestry5.internal.structure.Page;
-import org.apache.tapestry5.internal.structure.PageElement;
import org.apache.tapestry5.internal.structure.PageResources;
import org.apache.tapestry5.ioc.*;
import org.apache.tapestry5.ioc.def.ContributionDef;
@@ -37,6 +36,7 @@
import org.apache.tapestry5.model.EmbeddedComponentModel;
import org.apache.tapestry5.model.MutableComponentModel;
import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.runtime.RenderCommand;
import org.apache.tapestry5.runtime.RenderQueue;
import org.apache.tapestry5.services.ComponentClassResolver;
import org.apache.tapestry5.services.Request;
@@ -239,9 +239,9 @@
expect(model.getComponentClassName()).andReturn(className).atLeastOnce();
}
- protected final PageElement mockPageElement()
+ protected final RenderCommand mockRenderCommand()
{
- return newMock(PageElement.class);
+ return newMock(RenderCommand.class);
}
protected final void train_getParameterNames(EmbeddedComponentModel model, String... names)
Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/RenderPhaseMethodWorkerTest.java Mon Dec 22 09:44:01 2008
@@ -23,10 +23,6 @@
import org.apache.tapestry5.test.TapestryTestCase;
import org.testng.annotations.Test;
-/**
- * Of course, we're committing the cardinal sin of testing the code that's generated, rather than the *behavior* of the
- * generated code. Fortunately, we back all this up with lots and lots of integration testing.
- */
public class RenderPhaseMethodWorkerTest extends TapestryTestCase
{
@Test
Modified: tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-core/src/test/resources/log4j.properties Mon Dec 22 09:44:01 2008
@@ -23,5 +23,8 @@
log4j.category.org.apache.tapestry5.integration.app2=debug
+log4j.category.tapestry.render=debug
+log4j.category.org.apache.tapestry5.internal.services.InternalModule.PageResponseRenderer=debug
+
# log4j.category.org.apache.tapestry5.corelib.components=debug
Modified: tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-hibernate/pom.xml Mon Dec 22 09:44:01 2008
@@ -12,7 +12,7 @@
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.18</version>
+ <version>5.0.19-SNAPSHOT</version>
</parent>
<inceptionYear>2007</inceptionYear>
Modified: tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-ioc/pom.xml Mon Dec 22 09:44:01 2008
@@ -8,7 +8,7 @@
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.18</version>
+ <version>5.0.19-SNAPSHOT</version>
</parent>
<name>Tapestry Inversion of Control Container</name>
<description>
Modified: tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java Mon Dec 22 09:44:01 2008
@@ -15,8 +15,8 @@
package org.apache.tapestry5.ioc.internal.services;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.*;
-import static org.apache.tapestry5.ioc.internal.util.Defense.notNull;
+import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newList;
+import org.apache.tapestry5.ioc.internal.util.Defense;
import org.apache.tapestry5.ioc.internal.util.InheritanceSearch;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.services.ClassFabUtils;
@@ -28,53 +28,75 @@
public class TypeCoercerImpl implements TypeCoercer
{
- // Read only after constructor
+ // Constructed from the service's configuration.
private final Map<Class, List<CoercionTuple>> sourceTypeToTuple = CollectionFactory.newMap();
- // Access to the cache must be thread safe
-
- private final Map<CacheKey, Coercion> cache = CollectionFactory.newConcurrentMap();
-
- static class CacheKey
+ /**
+ * A coercion to a specific target type. Manages a cache of coercions to specific types.
+ */
+ private class TargetCoercion
{
- private final Class sourceClass;
+ private final Class type;
- private final Class targetClass;
+ private final Map<Class, Coercion> cache = CollectionFactory.newConcurrentMap();
- CacheKey(final Class sourceClass, final Class targetClass)
+ TargetCoercion(Class type)
{
- this.sourceClass = sourceClass;
- this.targetClass = targetClass;
+ this.type = type;
}
- @Override
- public boolean equals(Object obj)
+ void clearCache()
{
- if (obj == null) return false;
+ cache.clear();
+ }
- if (!(obj instanceof CacheKey)) return false;
+ Object coerce(Object input)
+ {
+
+ Class sourceType = input != null ? input.getClass() : void.class;
+
+ if (type.isAssignableFrom(sourceType)) return input;
- CacheKey other = (CacheKey) obj;
+ Coercion c = getCoercion(sourceType);
- return sourceClass.equals(other.sourceClass)
- && targetClass.equals(other.targetClass);
+ try
+ {
+ return type.cast(c.coerce(input));
+ }
+ catch (Exception ex)
+ {
+ throw new RuntimeException(ServiceMessages.failedCoercion(
+ input,
+ type,
+ c,
+ ex), ex);
+ }
}
- @Override
- public int hashCode()
+ String explain(Class sourceType)
{
- return sourceClass.hashCode() * 27 % targetClass.hashCode();
+ return getCoercion(sourceType).toString();
}
- @Override
- public String toString()
+ private Coercion getCoercion(Class sourceType)
{
- return String.format("CacheKey[%s --> %s]", sourceClass.getName(), targetClass
- .getName());
+ Coercion c = cache.get(sourceType);
+
+ if (c == null)
+ {
+ c = findOrCreateCoercion(sourceType, type);
+ cache.put(sourceType, c);
+ }
+ return c;
}
}
+ /**
+ * Map from a target type to a TargetCoercion for that type.
+ */
+ private final Map<Class, TargetCoercion> typeToTargetCoercion = new WeakHashMap<Class, TargetCoercion>();
+
private static final Coercion COERCION_NULL_TO_OBJECT = new Coercion<Void, Object>()
{
public Object coerce(Void input)
@@ -102,49 +124,20 @@
@SuppressWarnings("unchecked")
public Object coerce(Object input, Class targetType)
{
- notNull(targetType, "targetType");
-
- // Treat null as void in terms of locating a coercion.
-
- Class sourceType = input != null ? input.getClass() : void.class;
-
- // The caller may ask for the value in a primitive type, but the best we can do is the
- // equivalent wrapper type.
+ Defense.notNull(targetType, "targetType");
Class effectiveTargetType = ClassFabUtils.getWrapperType(targetType);
- // Is a coercion even necessary? Not if the target type is assignable from the
- // input value.
-
- if (effectiveTargetType.isAssignableFrom(sourceType)) return input;
+ if (effectiveTargetType.isInstance(input)) return input;
- Coercion coercion = findCoercion(sourceType, effectiveTargetType);
-
- Object result;
-
- try
- {
- result = coercion.coerce(input);
- }
- catch (Exception ex)
- {
- throw new RuntimeException(ServiceMessages.failedCoercion(
- input,
- targetType,
- coercion,
- ex), ex);
- }
-
- // Double check that the coercer provided a result of the correct type
-
- return effectiveTargetType.cast(result);
+ return getTargetCoercion(effectiveTargetType).coerce(input);
}
@SuppressWarnings("unchecked")
public <S, T> String explain(Class<S> inputType, Class<T> targetType)
{
- notNull(inputType, "inputType");
- notNull(targetType, "targetType");
+ Defense.notNull(inputType, "inputType");
+ Defense.notNull(targetType, "targetType");
Class effectiveTargetType = ClassFabUtils.getWrapperType(targetType);
@@ -153,29 +146,35 @@
if (effectiveTargetType.isAssignableFrom(inputType)) return "";
- Coercion coercion = findCoercion(inputType, effectiveTargetType);
-
- return coercion.toString();
+ return getTargetCoercion(targetType).explain(inputType);
}
- private Coercion findCoercion(Class sourceType, Class targetType)
+ private synchronized TargetCoercion getTargetCoercion(Class targetType)
{
- CacheKey key = new CacheKey(sourceType, targetType);
-
- Coercion result = cache.get(key);
+ TargetCoercion tc = typeToTargetCoercion.get(targetType);
- if (result == null)
+ if (tc == null)
{
- result = findOrCreateCoercion(sourceType, targetType);
- cache.put(key, result);
+ tc = new TargetCoercion(targetType);
+ typeToTargetCoercion.put(targetType, tc);
}
- return result;
+ return tc;
}
- public void clearCache()
+ public synchronized void clearCache()
{
- cache.clear();
+ // There's no need to clear the typeToTargetCoercion map, as it is a WeakHashMap and
+ // will release the keys for classes that are no longer in existence. On the other hand,
+ // there's likely all sorts of references to unloaded classes inside each TargetCoercion's
+ // individual cache, so clear all those.
+
+ for (TargetCoercion tc : typeToTargetCoercion.values())
+ {
+ // Can tc ever be null?
+
+ tc.clearCache();
+ }
}
/**
@@ -211,8 +210,8 @@
// a tuple twice, but it's more likely that different threads are looking
// for different source/target coercions.
- Set<CoercionTuple> consideredTuples = newSet();
- LinkedList<CoercionTuple> queue = newLinkedList();
+ Set<CoercionTuple> consideredTuples = CollectionFactory.newSet();
+ LinkedList<CoercionTuple> queue = CollectionFactory.newLinkedList();
seedQueue(sourceType, consideredTuples, queue);
@@ -378,5 +377,4 @@
}
}
}
-
}
Modified: tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/CollectionFactory.java Mon Dec 22 09:44:01 2008
@@ -39,14 +39,12 @@
*/
public final class CollectionFactory
{
- private static final int INITIAL_HASHMAP_CAPACITY = 31;
-
/**
* Constructs and returns a generic {@link HashMap} instance.
*/
public static <K, V> Map<K, V> newMap()
{
- return new HashMap<K, V>(INITIAL_HASHMAP_CAPACITY);
+ return new HashMap<K, V>();
}
/**
@@ -84,7 +82,7 @@
*/
public static <K, V> ConcurrentMap<K, V> newConcurrentMap()
{
- return new ConcurrentHashMap<K, V>(INITIAL_HASHMAP_CAPACITY);
+ return new ConcurrentHashMap<K, V>();
}
/**
Modified: tapestry/tapestry5/branches/5.0/tapestry-project.ipr
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-project.ipr?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-project.ipr (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-project.ipr Mon Dec 22 09:44:01 2008
@@ -152,6 +152,7 @@
<facet-type id="Spring" />
</autodetection-disabled>
</component>
+ <component name="FacetManager" />
<component name="IdProvider" IDEtalkID="5869BD07806E60386FB39DF824C84757" />
<component name="InspectionProjectProfileManager">
<option name="PROJECT_PROFILE" value="Project Default" />
@@ -243,6 +244,7 @@
</list>
</option>
</component>
+ <component name="NewModuleRootManager" />
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
@@ -452,36 +454,6 @@
<entry key="$PROJECT_DIR$">
<value>
<SvnBranchConfiguration>
- <option name="branchMap">
- <map>
- <entry key="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches">
- <value>
- <list>
- <SvnBranchItem>
- <option name="creationDateMillis" value="1228328601230" />
- <option name="revision" value="722998" />
- <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.0" />
- </SvnBranchItem>
- <SvnBranchItem>
- <option name="creationDateMillis" value="1221736060801" />
- <option name="revision" value="696628" />
- <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.1-dev" />
- </SvnBranchItem>
- <SvnBranchItem>
- <option name="creationDateMillis" value="1211309495890" />
- <option name="revision" value="658390" />
- <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/hlship-20080520" />
- </SvnBranchItem>
- <SvnBranchItem>
- <option name="creationDateMillis" value="1178591494728" />
- <option name="revision" value="536042" />
- <option name="url" value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/hlship-20070503" />
- </SvnBranchItem>
- </list>
- </value>
- </entry>
- </map>
- </option>
<option name="branchUrls">
<list>
<option value="https://svn.apache.org/repos/asf/tapestry/tapestry5/branches" />
Modified: tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-spring/pom.xml Mon Dec 22 09:44:01 2008
@@ -12,7 +12,7 @@
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.18</version>
+ <version>5.0.19-SNAPSHOT</version>
</parent>
<dependencies>
Modified: tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-test/pom.xml Mon Dec 22 09:44:01 2008
@@ -10,7 +10,7 @@
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.18</version>
+ <version>5.0.19-SNAPSHOT</version>
</parent>
<dependencies>
Modified: tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-tutorial1/pom.xml Mon Dec 22 09:44:01 2008
@@ -19,7 +19,7 @@
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.18</version>
+ <version>5.0.19-SNAPSHOT</version>
</parent>
<dependencies>
Modified: tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-tutorial1/tutorial1.iml Mon Dec 22 09:44:01 2008
@@ -19,19 +19,19 @@
<packaging>
<containerElement type="module" name="tapestry-hibernate">
<attribute name="method" value="5" />
- <attribute name="URI" value="/WEB-INF/lib/tapestry-hibernate-5.0.17-SNAPSHOT.jar" />
+ <attribute name="URI" value="/WEB-INF/lib/tapestry-hibernate-5.0.19-SNAPSHOT.jar" />
</containerElement>
<containerElement type="module" name="tapestry-core">
<attribute name="method" value="5" />
- <attribute name="URI" value="/WEB-INF/lib/tapestry-core-5.0.17-SNAPSHOT.jar" />
+ <attribute name="URI" value="/WEB-INF/lib/tapestry-core-5.0.19-SNAPSHOT.jar" />
</containerElement>
<containerElement type="module" name="tapestry-ioc">
<attribute name="method" value="5" />
- <attribute name="URI" value="/WEB-INF/lib/tapestry-ioc-5.0.17-SNAPSHOT.jar" />
+ <attribute name="URI" value="/WEB-INF/lib/tapestry-ioc-5.0.19-SNAPSHOT.jar" />
</containerElement>
<containerElement type="module" name="tapestry-annotations">
<attribute name="method" value="5" />
- <attribute name="URI" value="/WEB-INF/lib/tapestry5-annotations-5.0.17-SNAPSHOT.jar" />
+ <attribute name="URI" value="/WEB-INF/lib/tapestry5-annotations-5.0.19-SNAPSHOT.jar" />
</containerElement>
<containerElement type="library" name="Maven: javassist:javassist:3.8.0.GA" level="project">
<attribute name="method" value="1" />
@@ -159,5 +159,6 @@
<orderEntry type="library" name="Maven: junit:junit:3.8.1" level="project" />
<orderEntry type="library" name="Maven: org.easymock:easymock:2.4" level="project" />
</component>
+ <component name="SvnBranchConfigurationManager" />
</module>
Modified: tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml?rev=728732&r1=728731&r2=728732&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml (original)
+++ tapestry/tapestry5/branches/5.0/tapestry-upload/pom.xml Mon Dec 22 09:44:01 2008
@@ -13,7 +13,7 @@
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.18</version>
+ <version>5.0.19-SNAPSHOT</version>
</parent>
<inceptionYear>2007</inceptionYear>