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 2011/05/28 20:43:10 UTC

svn commit: r1128745 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/model/ main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/services/ test/groovy/org/apache/tapestry5/internal/s...

Author: hlship
Date: Sat May 28 18:43:10 2011
New Revision: 1128745

URL: http://svn.apache.org/viewvc?rev=1128745&view=rev
Log:
Add ComponentModel.isPage(), change PageTemplateLocator to use it

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassResolver.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java?rev=1128745&r1=1128744&r2=1128745&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java Sat May 28 18:43:10 2011
@@ -46,6 +46,8 @@ public final class MutableComponentModel
 
     private final Logger logger;
 
+    private final boolean pageClass;
+
     private Map<String, ParameterModel> parameters;
 
     private Map<String, EmbeddedComponentModel> embeddedComponents;
@@ -69,13 +71,14 @@ public final class MutableComponentModel
 
     private Map<String, Boolean> handledEvents;
 
-    public MutableComponentModelImpl(String componentClassName, Logger logger,
-            Resource baseResource, ComponentModel parentModel)
+    public MutableComponentModelImpl(String componentClassName, Logger logger, Resource baseResource,
+            ComponentModel parentModel, boolean pageClass)
     {
         this.componentClassName = componentClassName;
         this.logger = logger;
         this.baseResource = baseResource;
         this.parentModel = parentModel;
+        this.pageClass = pageClass;
 
         // Pre-allocate names from the parent, to avoid name collisions.
 
@@ -109,8 +112,8 @@ public final class MutableComponentModel
         return componentClassName;
     }
 
-    public void addParameter(String name, boolean required, boolean allowNull,
-            String defaultBindingPrefix, boolean cached)
+    public void addParameter(String name, boolean required, boolean allowNull, String defaultBindingPrefix,
+            boolean cached)
     {
         assert InternalUtils.isNonBlank(name);
         assert InternalUtils.isNonBlank(defaultBindingPrefix);
@@ -118,15 +121,12 @@ public final class MutableComponentModel
             parameters = CollectionFactory.newCaseInsensitiveMap();
 
         if (parameters.containsKey(name))
-            throw new IllegalArgumentException(ModelMessages.duplicateParameter(name,
-                    componentClassName));
+            throw new IllegalArgumentException(ModelMessages.duplicateParameter(name, componentClassName));
 
-        parameters.put(name, new ParameterModelImpl(name, required, allowNull,
-                defaultBindingPrefix, cached));
+        parameters.put(name, new ParameterModelImpl(name, required, allowNull, defaultBindingPrefix, cached));
     }
 
-    public void addParameter(String name, boolean required, boolean allowNull,
-            String defaultBindingPrefix)
+    public void addParameter(String name, boolean required, boolean allowNull, String defaultBindingPrefix)
     {
         // assume /false/ for the default because:
         // if the parameter is actually cached, the only effect will be to reduce that optimization
@@ -145,7 +145,7 @@ public final class MutableComponentModel
 
         return result;
     }
-    
+
     public boolean isFormalParameter(String parameterName)
     {
         return getParameterModel(parameterName) != null;
@@ -171,19 +171,18 @@ public final class MutableComponentModel
         return InternalUtils.sortedKeys(parameters);
     }
 
-    public MutableEmbeddedComponentModel addEmbeddedComponent(String id, String type,
-            String componentClassName, boolean inheritInformalParameters, Location location)
+    public MutableEmbeddedComponentModel addEmbeddedComponent(String id, String type, String componentClassName,
+            boolean inheritInformalParameters, Location location)
     {
         // TODO: Parent compent model? Or would we simply override the parent?
 
         if (embeddedComponents == null)
             embeddedComponents = CollectionFactory.newCaseInsensitiveMap();
         else if (embeddedComponents.containsKey(id))
-            throw new IllegalArgumentException(ModelMessages.duplicateComponentId(id,
-                    this.componentClassName));
+            throw new IllegalArgumentException(ModelMessages.duplicateComponentId(id, this.componentClassName));
 
-        MutableEmbeddedComponentModel embedded = new MutableEmbeddedComponentModelImpl(id, type,
-                componentClassName, this.componentClassName, inheritInformalParameters, location);
+        MutableEmbeddedComponentModel embedded = new MutableEmbeddedComponentModelImpl(id, type, componentClassName,
+                this.componentClassName, inheritInformalParameters, location);
 
         embeddedComponents.put(id, embedded);
 
@@ -368,4 +367,9 @@ public final class MutableComponentModel
     {
         return InternalUtils.get(mixinOrders, mixinClassName);
     }
+
+    public boolean isPage()
+    {
+        return pageClass;
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java?rev=1128745&r1=1128744&r2=1128745&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassResolverImpl.java Sat May 28 18:43:10 2011
@@ -447,6 +447,17 @@ public class ComponentClassResolverImpl 
         });
     }
 
+    public boolean isPage(final String pageClassName)
+    {
+        return barrier.withRead(new Invokable<Boolean>()
+        {
+            public Boolean invoke()
+            {
+                return locate(pageClassName, pageClassNameToLogicalName) != null;
+            }
+        });
+    }
+
     public List<String> getPageNames()
     {
         return barrier.withRead(new Invokable<List<String>>()

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java?rev=1128745&r1=1128744&r2=1128745&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java Sat May 28 18:43:10 2011
@@ -51,12 +51,13 @@ import org.apache.tapestry5.plastic.Plas
 import org.apache.tapestry5.plastic.PlasticClassListener;
 import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.plastic.PlasticManager;
-import org.apache.tapestry5.plastic.TransformationOption;
 import org.apache.tapestry5.plastic.PlasticManager.PlasticManagerBuilder;
 import org.apache.tapestry5.plastic.PlasticManagerDelegate;
 import org.apache.tapestry5.plastic.PlasticUtils;
+import org.apache.tapestry5.plastic.TransformationOption;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentResourcesAware;
+import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.InvalidationListener;
 import org.apache.tapestry5.services.UpdateListener;
 import org.apache.tapestry5.services.UpdateListenerHub;
@@ -90,6 +91,8 @@ public final class ComponentInstantiator
     private final InternalComponentInvalidationEventHub invalidationHub;
 
     private final boolean productionMode;
+    
+    private final ComponentClassResolver resolver;
 
     // These change whenever the invalidation event hub sends an invalidation notification
 
@@ -126,6 +129,8 @@ public final class ComponentInstantiator
 
     @Symbol(SymbolConstants.PRODUCTION_MODE)
     boolean productionMode,
+    
+    ComponentClassResolver resolver,
 
     InternalComponentInvalidationEventHub invalidationHub)
     {
@@ -138,6 +143,7 @@ public final class ComponentInstantiator
         this.tracker = tracker;
         this.invalidationHub = invalidationHub;
         this.productionMode = productionMode;
+        this.resolver = resolver;
 
         // For now, we just need the keys of the configuration. When there are more types of controlled
         // packages, we'll need to do more.
@@ -316,8 +322,10 @@ public final class ComponentInstantiator
                             implementComponentInterface(plasticClass);
                         }
 
-                        MutableComponentModel model = new MutableComponentModelImpl(plasticClass.getClassName(),
-                                logger, baseResource, parentModel);
+                        boolean isPage = resolver.isPage(className);
+
+                        MutableComponentModel model = new MutableComponentModelImpl(className, logger, baseResource,
+                                parentModel, isPage);
 
                         transformerChain.transform(plasticClass, new TransformationSupport()
                         {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassResolver.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassResolver.java?rev=1128745&r1=1128744&r2=1128745&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassResolver.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassResolver.java Sat May 28 18:43:10 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 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.
@@ -133,4 +133,13 @@ public interface ComponentClassResolver
      * @since 5.3.0
      */
     Map<String, ControlledPackageType> getControlledPackageMapping();
+
+    /**
+     * Returns true if the class name is specifically a page class, and not a component, mixin or base class.
+     * 
+     * @param pageClassName
+     * @return true if a page class
+     * @since 5.3.0
+     */
+    boolean isPage(final String pageClassName);
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy?rev=1128745&r1=1128744&r2=1128745&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/internal/services/templates/PageTemplateLocatorTest.groovy Sat May 28 18:43:10 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 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.
@@ -14,36 +14,36 @@
 
 package org.apache.tapestry5.internal.services.templates;
 
-import java.util.Locale;
+import java.util.Locale
 
-import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.testng.annotations.Test 
+import org.apache.tapestry5.internal.test.InternalBaseTestCase
+import org.testng.annotations.Test
 
 class PageTemplateLocatorTest extends InternalBaseTestCase
 {
     void execute(root, resolver, closure) {
-        
+
         replay()
-        
+
         closure.call(new PageTemplateLocator(root, resolver))
-        
+
         verify()
     }
-    
+
     @Test
     void not_a_page_class() {
         def model = mockComponentModel()
         def root = mockResource()
         def resolver = mockComponentClassResolver()
-        
-        train_getComponentClassName(model, "foo.bar.Baz")
-        
-        execute (root, resolver) { 
-            
+
+        expect(model.page).andReturn(false)
+
+        execute (root, resolver) {
+
             assert it.locateTemplate (model, Locale.FRENCH) == null
-        }        
+        }
     }
-    
+
     @Test
     void template_found() {
         def model = mockComponentModel()
@@ -53,49 +53,52 @@ class PageTemplateLocatorTest extends In
         def resolver = mockComponentClassResolver()
         def locale = Locale.FRENCH
         def className = "myapp.pages.Foo"
-        
-        train_getComponentClassName(model, className)
-        
+
+        expect(model.page).andReturn(true)
+
+        train_getComponentClassName model, className
+
         train_resolvePageClassNameToPageName(resolver, className, "Foo")
-        
+
         train_forFile(root, "Foo.tml", withExtension)
         train_forLocale(withExtension, locale, forLocale)
-        
+
         execute (root, resolver) {
-            
+
             assertSame it.locateTemplate(model, locale), forLocale
         }
     }
-    
+
     /**
      * Because of how Tapestry maps class names to logical page names, part of the name may be have been stripped off
      * and we want to make sure we get it back.
      */
     @Test
     void uses_simple_class_name_in_folders() {
-        
+
         def model = mockComponentModel()
         def root = mockResource()
         def withExtension = mockResource()
         def forLocale = mockResource()
         def resolver = mockComponentClassResolver()
-        
+
         def locale = Locale.FRENCH
         def className = "myapp.pages.foo.CreateFoo"
-        
-        
+
+        expect(model.page).andReturn(true)
+
         train_getComponentClassName(model, className)
         train_resolvePageClassNameToPageName (resolver, className, "foo/Create")
-        
+
         train_forFile(root, "foo/CreateFoo.tml", withExtension)
         train_forLocale(withExtension, locale, forLocale)
-        
+
         execute (root, resolver){
-            
+
             assertSame it.locateTemplate (model, locale), forLocale
         }
     }
-    
+
     @Test
     void template_not_found() {
         def model = mockComponentModel()
@@ -104,15 +107,17 @@ class PageTemplateLocatorTest extends In
         def resolver = mockComponentClassResolver()
         def locale= Locale.GERMAN;
         def className = "myapp.pages.bar.Baz"
-        
+
+        expect (model.page).andReturn(true)
+
         train_getComponentClassName (model, className)
         train_resolvePageClassNameToPageName (resolver, className, "bar/Baz")
-        
+
         train_forFile(root, "bar/Baz.tml", withExtension)
         train_forLocale(withExtension, locale, null)
-        
+
         execute (root, resolver)  {
-            
+
             assertNull it.locateTemplate(model, locale)
         }
     }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java?rev=1128745&r1=1128744&r2=1128745&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/model/MutableComponentModelImplTest.java Sat May 28 18:43:10 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2011 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.
@@ -46,11 +46,11 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertTrue(model.isRootClass());
 
-        MutableComponentModel subModel = new MutableComponentModelImpl(CLASS_NAME, logger, r, model);
+        MutableComponentModel subModel = new MutableComponentModelImpl(CLASS_NAME, logger, r, model, false);
 
         assertFalse(subModel.isRootClass());
 
@@ -65,7 +65,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertTrue(model.getParameterNames().isEmpty());
 
@@ -100,7 +100,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.addParameter("fred", true, true, BindingConstants.PROP);
         model.addParameter("wilma", true, true, BindingConstants.PROP);
@@ -123,7 +123,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         model.addParameter("fred", true, true, BindingConstants.PROP);
         model.addParameter("wilma", true, true, BindingConstants.PROP);
@@ -143,7 +143,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.addParameter("fred", true, true, BindingConstants.PROP);
 
@@ -171,7 +171,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertNull(model.getParameterModel("foo"));
 
@@ -186,7 +186,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
         model.addParameter("fred", true, true, BindingConstants.PROP);
 
         assertNull(model.getParameterModel("barney"));
@@ -203,7 +203,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertTrue(model.getEmbeddedComponentIds().isEmpty());
 
@@ -241,7 +241,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.addEmbeddedComponent("fred", "Fred1", COMPONENT_CLASS_NAME, false, null);
 
@@ -268,7 +268,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertTrue(model.getEmbeddedComponentIds().isEmpty());
 
@@ -291,7 +291,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.addEmbeddedComponent("fred", "Fred1", COMPONENT_CLASS_NAME, false, null);
 
@@ -317,7 +317,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred", COMPONENT_CLASS_NAME, false,
                                                                         null);
@@ -342,7 +342,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred", COMPONENT_CLASS_NAME, false,
                                                                         null);
@@ -371,7 +371,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred", COMPONENT_CLASS_NAME, false,
                                                                         null);
@@ -389,7 +389,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred", COMPONENT_CLASS_NAME, false,
                                                                         null);
@@ -410,7 +410,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         MutableEmbeddedComponentModel fred = model.addEmbeddedComponent("fred", "Fred", COMPONENT_CLASS_NAME, false,
                                                                         null);
@@ -442,7 +442,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertTrue(model.getPersistentFieldNames().isEmpty());
 
@@ -457,7 +457,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertEquals(model.setFieldPersistenceStrategy("fred", "session"), "fred");
         assertEquals(model.setFieldPersistenceStrategy("barney", "client"), "barney");
@@ -475,11 +475,11 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertEquals(parent.setFieldPersistenceStrategy("wilma", "session"), "wilma");
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         assertEquals(model.setFieldPersistenceStrategy("fred", "session"), "fred");
         assertEquals(model.setFieldPersistenceStrategy("barney", "client"), "barney");
@@ -497,10 +497,10 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
         assertEquals(parent.setFieldPersistenceStrategy("wilma", "session"), "wilma");
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         assertEquals(model.setFieldPersistenceStrategy("wilma", "session"), "wilma_0");
 
@@ -517,7 +517,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.setFieldPersistenceStrategy("fred", "session");
         model.setFieldPersistenceStrategy("barney", "client");
@@ -536,7 +536,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         try
         {
@@ -559,8 +559,8 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         parent.setFieldPersistenceStrategy("wilma", "parent");
 
@@ -579,7 +579,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertFalse(model.getSupportsInformalParameters());
 
@@ -597,7 +597,7 @@ public class MutableComponentModelImplTe
         Logger logger = mockLogger();
 
         replay();
-        ComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        ComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         assertTrue(model.getMixinClassNames().isEmpty());
 
@@ -612,11 +612,11 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         parent.addMixinClassName("Wilma");
 
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         child.addMixinClassName("Fred");
         child.addMixinClassName("Barney");
@@ -634,8 +634,8 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         assertSame(child.getParentModel(), parent);
         assertNull(parent.getParentModel());
@@ -651,7 +651,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.setMeta("fred", "flintstone");
         model.setMeta("barney", "rubble");
@@ -675,8 +675,8 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         parent.setMeta("fred", "flintstone");
 
@@ -693,8 +693,8 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         parent.setMeta("fred", "flintstone");
 
@@ -711,8 +711,8 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         parent.setMeta("fred", "flintstone");
         child.setMeta("fred", "mcmurray");
@@ -734,7 +734,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
 
         assertFalse(model.getHandledRenderPhases().contains(BeginRender.class));
@@ -753,7 +753,7 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
+        MutableComponentModel model = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
 
         model.addRenderPhase(BeginRender.class);
 
@@ -773,8 +773,8 @@ public class MutableComponentModelImplTe
 
         replay();
 
-        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null);
-        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent);
+        MutableComponentModel parent = new MutableComponentModelImpl(CLASS_NAME, logger, r, null, false);
+        MutableComponentModel child = new MutableComponentModelImpl(CLASS_NAME, logger, r, parent, false);
 
         parent.addRenderPhase(BeginRender.class);