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 2008/10/27 18:24:02 UTC
svn commit: r708241 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java
test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java
Author: hlship
Date: Mon Oct 27 10:24:01 2008
New Revision: 708241
URL: http://svn.apache.org/viewvc?rev=708241&view=rev
Log:
TAP5-304: Tapestry outputs a warning when a component defined in the Java code (via @Component) does not have a corresponding element in the template; this should be escalated to an exception
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java?rev=708241&r1=708240&r2=708241&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageLoaderProcessor.java Mon Oct 27 10:24:01 2008
@@ -22,14 +22,7 @@
import org.apache.tapestry5.internal.parser.*;
import org.apache.tapestry5.internal.structure.*;
import org.apache.tapestry5.ioc.Location;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap;
-import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newMap;
-import org.apache.tapestry5.ioc.internal.util.IdAllocator;
-import static org.apache.tapestry5.ioc.internal.util.InternalUtils.isBlank;
-import static org.apache.tapestry5.ioc.internal.util.InternalUtils.isNonBlank;
-import org.apache.tapestry5.ioc.internal.util.OneShotLock;
-import org.apache.tapestry5.ioc.internal.util.TapestryException;
+import org.apache.tapestry5.ioc.internal.util.*;
import org.apache.tapestry5.ioc.util.Stack;
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.model.EmbeddedComponentModel;
@@ -84,7 +77,6 @@
/**
* Used as a queue of Runnable objects used to handle final setup.
*/
-
private final List<Runnable> finalization = CollectionFactory.newList();
private final IdAllocator idAllocator = new IdAllocator();
@@ -452,7 +444,7 @@
Logger logger = loadingComponentModel.getLogger();
// Don't have a case-insensitive Set, so we'll make due with a Map
- Map<String, Boolean> embeddedIds = newCaseInsensitiveMap();
+ Map<String, Boolean> embeddedIds = CollectionFactory.newCaseInsensitiveMap();
for (String id : loadingComponentModel.getEmbeddedComponentIds())
embeddedIds.put(id, true);
@@ -647,19 +639,19 @@
{
String modelType = embeddedModel.getComponentType();
- if (isNonBlank(modelType) && embeddedType != null)
- {
- Logger log = loadingComponentModel.getLogger();
- log.error(ServicesMessages.compTypeConflict(embeddedId, embeddedType, modelType));
- }
+ if (InternalUtils.isNonBlank(modelType) && embeddedType != null)
+ throw new TapestryException(ServicesMessages.compTypeConflict(embeddedId, embeddedType, modelType),
+ token, null);
embeddedType = modelType;
embeddedComponentClassName = embeddedModel.getComponentClassName();
}
- if (isBlank(embeddedType) && isBlank(embeddedComponentClassName)) throw new TapestryException(
- ServicesMessages.noTypeForEmbeddedComponent(embeddedId, loadingComponentModel.getComponentClassName()),
- token, null);
+ if (InternalUtils.isBlank(embeddedType) && InternalUtils.isBlank(embeddedComponentClassName))
+ throw new TapestryException(
+ ServicesMessages.noTypeForEmbeddedComponent(embeddedId,
+ loadingComponentModel.getComponentClassName()),
+ token, null);
final ComponentPageElement newComponent = pageElementFactory.newComponentElement(page, loadingElement,
embeddedId, embeddedType,
@@ -669,7 +661,7 @@
addMixinsToComponent(newComponent, embeddedModel, token.getMixins());
- final Map<String, Binding> newComponentBindings = newMap();
+ final Map<String, Binding> newComponentBindings = CollectionFactory.newMap();
componentIdToBindingMap.put(newComponent.getCompleteId(), newComponentBindings);
if (embeddedModel != null)
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java?rev=708241&r1=708240&r2=708241&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PageLoaderImplTest.java Mon Oct 27 10:24:01 2008
@@ -20,13 +20,12 @@
import org.apache.tapestry5.internal.parser.StartComponentToken;
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.test.InternalBaseTestCase;
import org.apache.tapestry5.ioc.Location;
+import org.apache.tapestry5.ioc.internal.util.TapestryException;
import org.apache.tapestry5.model.ComponentModel;
import org.apache.tapestry5.model.EmbeddedComponentModel;
import org.apache.tapestry5.services.ComponentClassResolver;
-import org.easymock.EasyMock;
import org.slf4j.Logger;
import org.testng.annotations.Test;
@@ -97,15 +96,10 @@
ComponentPageElement rootElement = mockComponentPageElement();
InternalComponentResources resources = mockInternalComponentResources();
ComponentModel model = mockComponentModel();
- ComponentModel childModel = mockComponentModel();
ComponentTemplate template = mockComponentTemplate();
Logger logger = mockLogger();
EmbeddedComponentModel emodel = mockEmbeddedComponentModel();
- ComponentPageElement childElement = mockComponentPageElement();
- InternalComponentResources childResources = mockInternalComponentResources();
Location l = mockLocation();
- PageElement body = mockPageElement();
- ComponentTemplate childTemplate = mockComponentTemplate();
ComponentClassResolver resolver = mockComponentClassResolver();
train_resolvePageNameToClassName(resolver, LOGICAL_PAGE_NAME, PAGE_CLASS_NAME);
@@ -118,7 +112,6 @@
train_getTemplate(templateSource, model, LOCALE, template);
-
train_isMissing(template, false);
train_getLogger(model, logger);
@@ -133,42 +126,22 @@
train_getComponentType(emodel, "Barney");
- train_getMixinClassNames(emodel);
-
- logger.error(ServicesMessages.compTypeConflict("foo", "Fred", "Barney"));
-
- train_getComponentClassName(emodel, "foo.components.Barney");
-
- train_newComponentElement(elementFactory, rootElement, "foo", "Barney", "foo.components.Barney", null, l,
- childElement);
-
- train_getCompleteId(childElement, PAGE_CLASS_NAME + "/Barney");
-
- train_getInheritInformalParameters(emodel, false);
-
- rootElement.addToTemplate(childElement);
-
- train_getParameterNames(emodel);
-
- // Alas, what comes next is the recursive call to load the child element
-
- train_getComponentResources(childElement, childResources);
- train_getComponentModel(childResources, childModel);
- train_getComponentClassName(childModel, CHILD_CLASS_NAME);
- train_getTemplate(templateSource, childModel, LOCALE, childTemplate);
- train_isMissing(childTemplate, true);
-
- // This will be the RenderBody element ...
-
- childElement.addToTemplate(EasyMock.isA(PageElement.class));
-
replay();
PageLoader loader = new PageLoaderImpl(templateSource, elementFactory, null, null, resolver);
- loader.loadPage(LOGICAL_PAGE_NAME, LOCALE);
+ try
+ {
+ loader.loadPage(LOGICAL_PAGE_NAME, LOCALE);
+ unreachable();
+ }
+ catch (TapestryException ex)
+ {
+ assertEquals(ex.getMessage(),
+ "Embedded component 'foo' provides a type attribute in the template ('Fred') as well as in the component class ('Barney'). You should not provide a type attribute in the template when defining an embedded component within the component class.");
+ assertSame(ex.getLocation(), l);
+ }
verify();
}
-
}