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 2005/01/29 02:03:17 UTC

cvs commit: jakarta-tapestry/framework/src/java/org/apache/tapestry/services BindingSource.java BindingFactory.java

hlship      2005/01/28 17:03:17

  Modified:    framework/src/java/org/apache/tapestry/services/impl
                        BindingSourceImpl.java
                        BindingPrefixContribution.java
                        ComponentTemplateLoaderImpl.java
                        EngineManagerImpl.java
                        RequestLocaleManagerImpl.java
                        ComponentTemplateLoaderLogic.java
               framework/src/java/org/apache/tapestry/bean
                        BindingBeanInitializer.java
               framework/src/descriptor/META-INF tapestry.bindings.xml
                        tapestry.request.xml
               framework/src/java/org/apache/tapestry/spec
                        IBindingSpecification.java BindingType.java
                        SpecFactory.java
               framework/src/java/org/apache/tapestry/parse
                        SpecificationParser.java
               src/documentation/content/xdocs/UsersGuide hivemind.xml
                        common.ent state.xml template.xml
               framework/src/test/org/apache/tapestry/services/impl
                        TestBindingSource.java
                        TestRequestLocaleManager.java
                        TestEngineManager.java
               src/documentation/content/xdocs links.ent
               framework/src/test/org/apache/tapestry/junit
                        TapestryTestCase.java
               framework/src/java/org/apache/tapestry
                        ApplicationServlet.java TapestryConstants.java
               framework/src/java/org/apache/tapestry/pageload
                        EstablishDefaultParameterValuesVisitor.java
                        PageLoader.java
  Added:       framework/src/java/org/apache/tapestry/binding
                        BindingSource.java ComponentBindingFactory.java
                        StateBindingFactory.java LiteralBindingFactory.java
                        BindingFactory.java AbstractBindingFactory.java
                        ListenerBindingFactory.java BeanBindingFactory.java
                        MessageBindingFactory.java OGNLBindingFactory.java
                        AssetBindingFactory.java StateBinding.java
               framework/src/test/org/apache/tapestry/binding
                        TestStateBinding.java
  Removed:     framework/src/java/org/apache/tapestry/services/impl
                        OGNLBindingFactory.java LiteralBindingFactory.java
                        AssetBindingFactory.java MessageBindingFactory.java
                        BeanBindingFactory.java
                        ComponentBindingFactory.java
                        ListenerBindingFactory.java
               framework/src/java/org/apache/tapestry/services
                        BindingSource.java BindingFactory.java
  Log:
  Move binding factory implementations into the bindings package.
  Add more documentation on state and application state objects.
  Add state: binding prefix (checks to see if an ASO exists).
  
  Revision  Changes    Path
  1.5       +2 -2      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/BindingSourceImpl.java
  
  Index: BindingSourceImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/BindingSourceImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BindingSourceImpl.java	6 Jan 2005 02:17:11 -0000	1.4
  +++ BindingSourceImpl.java	29 Jan 2005 01:03:16 -0000	1.5
  @@ -22,8 +22,8 @@
   import org.apache.hivemind.Location;
   import org.apache.tapestry.IBinding;
   import org.apache.tapestry.IComponent;
  -import org.apache.tapestry.services.BindingFactory;
  -import org.apache.tapestry.services.BindingSource;
  +import org.apache.tapestry.binding.BindingFactory;
  +import org.apache.tapestry.binding.BindingSource;
   
   /**
    * Implementation of the <code>tapestry.bindings.BindingSource</code> service.
  
  
  
  1.3       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/BindingPrefixContribution.java
  
  Index: BindingPrefixContribution.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/BindingPrefixContribution.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BindingPrefixContribution.java	6 Jan 2005 02:17:11 -0000	1.2
  +++ BindingPrefixContribution.java	29 Jan 2005 01:03:16 -0000	1.3
  @@ -15,7 +15,7 @@
   package org.apache.tapestry.services.impl;
   
   import org.apache.hivemind.impl.BaseLocatable;
  -import org.apache.tapestry.services.BindingFactory;
  +import org.apache.tapestry.binding.BindingFactory;
   
   /**
    * Contribution to the <code>tapestry.bindings.BindingFactories</code>
  
  
  
  1.3       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
  
  Index: ComponentTemplateLoaderImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ComponentTemplateLoaderImpl.java	6 Jan 2005 02:17:11 -0000	1.2
  +++ ComponentTemplateLoaderImpl.java	29 Jan 2005 01:03:16 -0000	1.3
  @@ -18,9 +18,9 @@
   import org.apache.tapestry.IRender;
   import org.apache.tapestry.IRequestCycle;
   import org.apache.tapestry.ITemplateComponent;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.engine.IPageLoader;
   import org.apache.tapestry.parse.ComponentTemplate;
  -import org.apache.tapestry.services.BindingSource;
   import org.apache.tapestry.services.ComponentTemplateLoader;
   import org.apache.tapestry.services.TemplateSource;
   
  
  
  
  1.5       +7 -52     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/EngineManagerImpl.java
  
  Index: EngineManagerImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/EngineManagerImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EngineManagerImpl.java	5 Jan 2005 23:16:57 -0000	1.4
  +++ EngineManagerImpl.java	29 Jan 2005 01:03:16 -0000	1.5
  @@ -27,42 +27,24 @@
   
   /**
    * Implementation of service {@link org.apache.tapestry.services.EngineManager}.
  - *
  + * Service point tapestry.request.EngineManager.
  + * 
    * @author Howard Lewis Ship
    * @since 3.1
    */
   public class EngineManagerImpl implements EngineManager
   {
       private ObjectPool _enginePool;
  -    private HttpServletRequest _request;
  -    private String _servletName;
  -    private String _engineKey;
  -    private EngineFactory _engineFactory;
  -    private RequestLocaleManager _localeManager;
   
  -    static final String ENGINE_KEY_PREFIX = "org.apache.tapestry.engine:";
  +    private EngineFactory _engineFactory;
   
  -    public void initializeService()
  -    {
  -        _engineKey = ENGINE_KEY_PREFIX + _servletName;
  -    }
  +    private RequestLocaleManager _localeManager;
   
       public IEngine getEngineInstance()
       {
  -        HttpSession session = getSession();
  -        IEngine result = null;
  -
  -        if (session != null)
  -        {
  -            result = (IEngine) session.getAttribute(_engineKey);
  -
  -            if (result != null)
  -                return result;
  -        }
  -
           Locale locale = _localeManager.extractLocaleForCurrentRequest();
   
  -        result = (IEngine) _enginePool.get(locale);
  +        IEngine result = (IEngine) _enginePool.get(locale);
   
           // This happens when either the pool is empty, or when a session exists
           // but the engine has not been stored into it (which should never happen, and
  @@ -74,26 +56,9 @@
           return result;
       }
   
  -    private HttpSession getSession()
  -    {
  -        return _request.getSession(false);
  -    }
  -
       public void storeEngineInstance(IEngine engine)
       {
  -        HttpSession session = getSession();
  -
  -        if (session == null)
  -        {
  -            _enginePool.store(engine.getLocale(), engine);
  -            return;
  -        }
  -
  -        // TODO: We've lost the optimizations for only storing the engine when dirty.
  -        // However, since (I believe) in 3.1, the engine will no longer be session persistent,
  -        // this is OK.
  -
  -        session.setAttribute(_engineKey, engine);
  +        _enginePool.store(engine.getLocale(), engine);
       }
   
       public void setEngineFactory(EngineFactory factory)
  @@ -110,14 +75,4 @@
       {
           _localeManager = manager;
       }
  -
  -    public void setRequest(HttpServletRequest request)
  -    {
  -        _request = request;
  -    }
  -
  -    public void setServletName(String string)
  -    {
  -        _servletName = string;
  -    }
  -}
  +}
  \ No newline at end of file
  
  
  
  1.5       +3 -2      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/RequestLocaleManagerImpl.java
  
  Index: RequestLocaleManagerImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/RequestLocaleManagerImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- RequestLocaleManagerImpl.java	6 Jan 2005 02:17:11 -0000	1.4
  +++ RequestLocaleManagerImpl.java	29 Jan 2005 01:03:16 -0000	1.5
  @@ -20,6 +20,7 @@
   
   import org.apache.hivemind.util.Defense;
   import org.apache.tapestry.ApplicationServlet;
  +import org.apache.tapestry.TapestryConstants;
   import org.apache.tapestry.services.CookieSource;
   import org.apache.tapestry.services.RequestLocaleManager;
   import org.apache.tapestry.util.StringSplitter;
  @@ -42,7 +43,7 @@
   
       public Locale extractLocaleForCurrentRequest()
       {
  -        String localeName = _cookieSource.readCookieValue(ApplicationServlet.LOCALE_COOKIE_NAME);
  +        String localeName = _cookieSource.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME);
   
           _requestLocale = (localeName != null) ? getLocale(localeName) : _request.getLocale();
   
  @@ -56,7 +57,7 @@
           if (locale.equals(_requestLocale))
               return;
   
  -        _cookieSource.writeCookieValue(ApplicationServlet.LOCALE_COOKIE_NAME, locale.toString());
  +        _cookieSource.writeCookieValue(TapestryConstants.LOCALE_COOKIE_NAME, locale.toString());
       }
   
       private Locale getLocale(String name)
  
  
  
  1.6       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
  
  Index: ComponentTemplateLoaderLogic.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ComponentTemplateLoaderLogic.java	6 Jan 2005 02:17:11 -0000	1.5
  +++ ComponentTemplateLoaderLogic.java	29 Jan 2005 01:03:16 -0000	1.6
  @@ -29,6 +29,7 @@
   import org.apache.tapestry.IRequestCycle;
   import org.apache.tapestry.ITemplateComponent;
   import org.apache.tapestry.Tapestry;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.binding.LiteralBinding;
   import org.apache.tapestry.engine.IPageLoader;
   import org.apache.tapestry.parse.CloseToken;
  @@ -38,7 +39,6 @@
   import org.apache.tapestry.parse.TemplateToken;
   import org.apache.tapestry.parse.TextToken;
   import org.apache.tapestry.parse.TokenType;
  -import org.apache.tapestry.services.BindingSource;
   import org.apache.tapestry.services.TemplateSource;
   import org.apache.tapestry.spec.IComponentSpecification;
   import org.apache.tapestry.spec.IContainedComponent;
  
  
  
  1.4       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/bean/BindingBeanInitializer.java
  
  Index: BindingBeanInitializer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/bean/BindingBeanInitializer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BindingBeanInitializer.java	6 Jan 2005 02:17:31 -0000	1.3
  +++ BindingBeanInitializer.java	29 Jan 2005 01:03:16 -0000	1.4
  @@ -19,7 +19,7 @@
   import org.apache.tapestry.IBeanProvider;
   import org.apache.tapestry.IBinding;
   import org.apache.tapestry.IComponent;
  -import org.apache.tapestry.services.BindingSource;
  +import org.apache.tapestry.binding.BindingSource;
   
   /**
    * An {@link org.apache.tapestry.bean.IBeanInitializer}&nbsp; implementation that uses an
  
  
  
  1.7       +29 -15    jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.bindings.xml
  
  Index: tapestry.bindings.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.bindings.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- tapestry.bindings.xml	6 Jan 2005 02:17:26 -0000	1.6
  +++ tapestry.bindings.xml	29 Jan 2005 01:03:16 -0000	1.7
  @@ -19,12 +19,12 @@
     
     Services for creating instance of IBinding.
     
  -  <service-point id="OGNLBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="OGNLBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Creates bindings where the path is a OGNL expression.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.OGNLBindingFactory">
  +      <construct class="org.apache.tapestry.binding.OGNLBindingFactory">
           <set-service property="expressionEvaluator" service-id="tapestry.ognl.ExpressionEvaluator"/>
           <set-service property="expressionCache" service-id="tapestry.ognl.ExpressionCache"/>
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
  @@ -32,24 +32,24 @@
       </invoke-factory>
     </service-point>
   
  -  <service-point id="MessageBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="MessageBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Creates bindings where the path is a localized message key for the component.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.MessageBindingFactory">
  +      <construct class="org.apache.tapestry.binding.MessageBindingFactory">
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>  
         </construct>
       </invoke-factory>
       
     </service-point>
     
  -  <service-point id="LiteralBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="LiteralBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Creates bindings where the path is the literal (aka static) value.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.LiteralBindingFactory">
  +      <construct class="org.apache.tapestry.binding.LiteralBindingFactory">
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>  
         </construct>
       </invoke-factory> 
  @@ -57,53 +57,66 @@
     </service-point>
     
   
  -  <service-point id="AssetBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="AssetBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Creates bindings where the path is the name of an asset of the component.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.AssetBindingFactory">
  +      <construct class="org.apache.tapestry.binding.AssetBindingFactory">
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
         </construct>
       </invoke-factory>    
       
     </service-point>
   
  -  <service-point id="BeanBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="BeanBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Creates bindings where the path is the name of a managed bean defined by the component.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.BeanBindingFactory">
  +      <construct class="org.apache.tapestry.binding.BeanBindingFactory">
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
         </construct>
       </invoke-factory>    
       
     </service-point>
   
  -  <service-point id="ListenerBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="ListenerBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Binding factory where the path is the name of a component listener method.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.ListenerBindingFactory">
  +      <construct class="org.apache.tapestry.binding.ListenerBindingFactory">
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
         </construct>
       </invoke-factory>    
       
     </service-point>
   
  -  <service-point id="ComponentBindingFactory" interface="org.apache.tapestry.services.BindingFactory">
  +  <service-point id="ComponentBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
       
       Binding factory where the path is the is of a nested component.
       
       <invoke-factory>
  -      <construct class="org.apache.tapestry.services.impl.ComponentBindingFactory">
  +      <construct class="org.apache.tapestry.binding.ComponentBindingFactory">
           <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
         </construct>
       </invoke-factory>    
       
     </service-point>
  +  
  +  <service-point id="StateBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
  +    
  +    Creates bindings where the path is the name of an asset of the component.
  +    
  +    <invoke-factory>
  +      <construct class="org.apache.tapestry.binding.StateBindingFactory">
  +        <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
  +        <set-object property="applicationStateManager" object="infrastructure:applicationStateManager"/> 
  +      </construct>
  +    </invoke-factory>    
  +    
  +  </service-point>  
   
     
     <configuration-point id="BindingFactories">
  @@ -138,9 +151,10 @@
       <binding prefix="bean" service-id="BeanBindingFactory"/>
       <binding prefix="listener" service-id="ListenerBindingFactory"/>
       <binding prefix="component" service-id="ComponentBindingFactory"/>
  +    <binding prefix="state" service-id="StateBindingFactory"/>
     </contribution>
     
  -  <service-point id="BindingSource" interface="org.apache.tapestry.services.BindingSource">
  +  <service-point id="BindingSource" interface="org.apache.tapestry.binding.BindingSource">
       
       <invoke-factory>
         <construct class="org.apache.tapestry.services.impl.BindingSourceImpl">
  
  
  
  1.9       +0 -2      jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.request.xml
  
  Index: tapestry.request.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.request.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- tapestry.request.xml	28 Jan 2005 21:07:15 -0000	1.8
  +++ tapestry.request.xml	29 Jan 2005 01:03:16 -0000	1.9
  @@ -63,8 +63,6 @@
       <invoke-factory>
         <construct class="org.apache.tapestry.services.impl.EngineManagerImpl">
           <set-service property="enginePool" service-id="EnginePool"/>
  -        <set-service property="request" service-id="tapestry.globals.HttpServletRequest"/>
  -        <set-object property="servletName" value="service-property:tapestry.globals.ApplicationGlobals:servletName"/>
           <set-service property="engineFactory" service-id="EngineFactory"/>
           <set-service property="localeManager" service-id="RequestLocaleManager"/>
         </construct>
  
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/BindingSource.java
  
  Index: BindingSource.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  
  /**
   * Used to convert a binding string (from a template or a specification) into an instance of
   * {@link IBinding}.
   * 
   * @since 3.1
   */
  public interface BindingSource
  {
      /**
       * Creates a new binding. The locator is used to identify the <em>type</em> of binding to
       * create as well as configure the binding instance. 
       * The locator is either a literal value (resulting in a
       * {@link org.apache.tapestry.binding.LiteralBinding literal binding}) or consists of prefix and
       * a path, i.e., <code>ognl:myProperty</code>.
       * <p>
       * When a prefix exists and is identified, it is used to select the correct
       * {@link BindingFactory}, and the remainder of the path (i.e., <code>myProperty</code)
       * is passed to the factory.  An unrecognized prefix is treated as a literal value
       * (it is often "javascript:" or "http:", etc.).
       * 
       * @param component the component for which the binding is created; the component is used
       * as a kind of context for certain types of bindings (for example, the root object when
       * evaluating OGNL expressions).
       * @param description {@link IBinding#getDescription() description} for the new binding
       * @param locator the binding to be created, possibly including a prefix to define the type
       * @param location location used to report errors in the binding
       */
      public IBinding createBinding(IComponent component, String description, String locator, Location location);
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/ComponentBindingFactory.java
  
  Index: ComponentBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  
  /**
   * Factory for {@link org.apache.tapestry.binding.ComponentBinding}instances, which are mapped to
   * the "component:" prefix.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class ComponentBindingFactory extends AbstractBindingFactory
  {
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
          return new ComponentBinding(root, path, description, getValueConverter(), location);
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/StateBindingFactory.java
  
  Index: StateBindingFactory.java
  ===================================================================
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.engine.state.ApplicationStateManager;
  
  /**
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class StateBindingFactory extends AbstractBindingFactory
  {
      private ApplicationStateManager _applicationStateManager;
  
      public void setApplicationStateManager(ApplicationStateManager applicationStateManager)
      {
          _applicationStateManager = applicationStateManager;
      }
  
      public IBinding createBinding(IComponent root, String bindingDescription, String path,
              Location location)
      {
          return new StateBinding(bindingDescription, getValueConverter(), location,
                  _applicationStateManager, path);
      }
  
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/LiteralBindingFactory.java
  
  Index: LiteralBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.coerce.ValueConverter;
  
  /**
   * Implementation of {@link org.apache.tapestry.binding.BindingFactory}that constructs
   * {@link org.apache.tapestry.binding.LiteralBinding}instances.
   * 
   * @author Howard Lewis Ship
   * @since 3.1
   */
  public class LiteralBindingFactory extends AbstractBindingFactory
  {
  
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
          return new LiteralBinding(description, path, getValueConverter(), location);
      }
  
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/BindingFactory.java
  
  Index: BindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  
  /**
   * Creates a new instance of {@link org.apache.tapestry.IBinding}.
   * 
   * @author Howard Lewis Ship
   * @since 3.1
   */
  public interface BindingFactory
  {
      /**
       * Creates a new binding instance.
       * 
       * @param root
       *            the component that is the source of properties or messages (or etc.). When the
       *            path is "evaluated", the root component provides a context.
       * @param description
       *            The {@link IBinding#getDescription() description}of the binding.
       * @param path
       *            The path used to get (or update) a value for the path. This may be an OGNL
       *            expression, a message key, a literal value, or otherwise defined by the type of
       *            binding.
       * @param location
       *            The location of the binding, used to report any errors related to the binding, or
       *            to the component parameter the binding is bound to.
       */
      public IBinding createBinding(IComponent root, String bindingDescription, String path,
              Location location);
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/AbstractBindingFactory.java
  
  Index: AbstractBindingFactory.java
  ===================================================================
  package org.apache.tapestry.binding;
  
  import org.apache.tapestry.coerce.ValueConverter;
  
  /**
   * @author Howard M. Lewis Ship
   */
  public abstract class AbstractBindingFactory implements BindingFactory
  {
  
      private ValueConverter _valueConverter;
  
      public ValueConverter getValueConverter()
      {
          return _valueConverter;
      }
  
      public void setValueConverter(ValueConverter valueConverter)
      {
          _valueConverter = valueConverter;
      }
  
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/ListenerBindingFactory.java
  
  Index: ListenerBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  
  /**
   * Factory of {@link org.apache.tapestry.binding.ListenerMethodBinding}, mapped to the "listener:"
   * prefix.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class ListenerBindingFactory extends AbstractBindingFactory
  {
  
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
          return new ListenerMethodBinding(root, path, description, getValueConverter(), location);
      }
  
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/BeanBindingFactory.java
  
  Index: BeanBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.coerce.ValueConverter;
  
  /**
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class BeanBindingFactory extends AbstractBindingFactory
  {
  
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
          return new BeanBinding(root, path, description, getValueConverter(), location);
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/MessageBindingFactory.java
  
  Index: MessageBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.coerce.ValueConverter;
  
  /**
   * Constructs instances of {@link org.apache.tapestry.binding.MessageBinding}.
   * 
   * @author Howard Lewis Ship
   * @since 3.1
   */
  public class MessageBindingFactory extends AbstractBindingFactory
  {
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
          return new MessageBinding(root, description, path, getValueConverter(), location);
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/OGNLBindingFactory.java
  
  Index: OGNLBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  import org.apache.tapestry.services.ExpressionCache;
  import org.apache.tapestry.services.ExpressionEvaluator;
  
  /**
   * Implementation of {@link org.apache.tapestry.binding.BindingFactory}that creates
   * {@link org.apache.tapestry.binding.ExpressionBinding}instances.
   * 
   * @author Howard Lewis Ship
   * @since 3.1
   */
  public class OGNLBindingFactory extends AbstractBindingFactory
  {
      private ExpressionEvaluator _expressionEvaluator;
  
      private ExpressionCache _expressionCache;
  
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
          return new ExpressionBinding(root, description, path, getValueConverter(), location,
                  _expressionEvaluator, _expressionCache);
      }
  
      public void setExpressionCache(ExpressionCache expressionCache)
      {
          _expressionCache = expressionCache;
      }
  
      public void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator)
      {
          _expressionEvaluator = expressionEvaluator;
      }
  
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/AssetBindingFactory.java
  
  Index: AssetBindingFactory.java
  ===================================================================
  // Copyright 2004, 2005 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //     http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.Location;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.IComponent;
  
  /**
   * Factory for instances of {@link org.apache.tapestry.binding.AssetBinding}.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class AssetBindingFactory extends AbstractBindingFactory
  {
      public IBinding createBinding(IComponent root, String description, String path,
              Location location)
      {
  
          return new AssetBinding(root, path, description, getValueConverter(), location);
      }
  }
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/binding/StateBinding.java
  
  Index: StateBinding.java
  ===================================================================
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.ApplicationRuntimeException;
  import org.apache.hivemind.Location;
  import org.apache.hivemind.util.Defense;
  import org.apache.tapestry.coerce.ValueConverter;
  import org.apache.tapestry.engine.state.ApplicationStateManager;
  
  /**
   * Binding used to efficiently query whether an application state object (visit, global and friends)
   * exists without actually creating it (or creating a session).
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class StateBinding extends AbstractBinding
  {
      private ApplicationStateManager _applicationStateManager;
  
      private String _objectName;
  
      public StateBinding(String description, ValueConverter valueConverter, Location location,
              ApplicationStateManager applicationStateManager, String objectName)
      {
          super(description, valueConverter, location);
  
          Defense.notNull(applicationStateManager, "applicationStateManager");
          Defense.notNull(objectName, "objectName");
  
          _applicationStateManager = applicationStateManager;
          _objectName = objectName;
      }
  
      public Object getObject()
      {
          try
          {
              boolean exists = _applicationStateManager.exists(_objectName);
  
              return exists ? Boolean.TRUE : Boolean.FALSE;
          }
          catch (Exception ex)
          {
              throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
          }
      }
  }
  
  
  1.5       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/spec/IBindingSpecification.java
  
  Index: IBindingSpecification.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/spec/IBindingSpecification.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- IBindingSpecification.java	6 Jan 2005 02:17:14 -0000	1.4
  +++ IBindingSpecification.java	29 Jan 2005 01:03:17 -0000	1.5
  @@ -37,7 +37,7 @@
        * For a prefixed binding specification (the typical type), the value is a binding reference; a
        * string used to contruct the actual binding, and consists of a prefix (such as "ognl:" or
        * "message:") and a locator. The prefix selects a
  -     * {@link org.apache.tapestry.services.BindingFactory}, and the locator is passed to the
  +     * {@link org.apache.tapestry.binding.BindingFactory}, and the locator is passed to the
        * factory, which uses it to construct the {@link org.apache.tapestry.IBinding}instance.
        */
   
  
  
  
  1.4       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/spec/BindingType.java
  
  Index: BindingType.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/spec/BindingType.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BindingType.java	5 Jan 2005 23:17:29 -0000	1.3
  +++ BindingType.java	29 Jan 2005 01:03:17 -0000	1.4
  @@ -28,7 +28,7 @@
   {
       /**
        * Indicates that the binding value is a prefixed locator, ready for use
  -     * with {@link org.apache.tapestry.services.BindingSource}.
  +     * with {@link org.apache.tapestry.binding.BindingSource}.
        */
   
       public static final BindingType PREFIXED = new BindingType("PREFIXED");
  
  
  
  1.7       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/spec/SpecFactory.java
  
  Index: SpecFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/spec/SpecFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SpecFactory.java	6 Jan 2005 02:17:14 -0000	1.6
  +++ SpecFactory.java	29 Jan 2005 01:03:17 -0000	1.7
  @@ -18,7 +18,7 @@
   import org.apache.tapestry.bean.ExpressionBeanInitializer;
   import org.apache.tapestry.bean.IBeanInitializer;
   import org.apache.tapestry.bean.MessageBeanInitializer;
  -import org.apache.tapestry.services.BindingSource;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.services.ExpressionEvaluator;
   
   /**
  
  
  
  1.16      +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/parse/SpecificationParser.java
  
  Index: SpecificationParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/parse/SpecificationParser.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SpecificationParser.java	8 Jan 2005 19:52:20 -0000	1.15
  +++ SpecificationParser.java	29 Jan 2005 01:03:17 -0000	1.16
  @@ -36,7 +36,7 @@
   import org.apache.tapestry.INamespace;
   import org.apache.tapestry.Tapestry;
   import org.apache.tapestry.bean.BindingBeanInitializer;
  -import org.apache.tapestry.services.BindingSource;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.services.ExpressionEvaluator;
   import org.apache.tapestry.spec.BeanLifecycle;
   import org.apache.tapestry.spec.BindingType;
  
  
  
  1.4       +2 -1      jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/hivemind.xml
  
  Index: hivemind.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/hivemind.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- hivemind.xml	5 Jan 2005 23:17:21 -0000	1.3
  +++ hivemind.xml	29 Jan 2005 01:03:17 -0000	1.4
  @@ -67,7 +67,7 @@
                 <li>The application specification's &spec.meta; properties</li>
                 <li>The servlet's &init-parameter; elements</li>
                 <li>The servlet context's &init-parameter; elements</li>
  -              <li>The delegate property source (a &lt;spec.extension;)</li>
  +              <li>The delegate property source (a &spec.extension;)</li>
                 <li>A HiveMind symbol</li>
               </ul></td>
               <td>
  @@ -75,6 +75,7 @@
               </td>
           </tr>
           <tr>
  +          <td>engine-service</td>
             <td>The locator is the name of an engine service (an instance of &IEngineService;).</td>
             <td>engine-service:page</td>
           </tr>
  
  
  
  1.13      +2 -1      jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/common.ent
  
  Index: common.ent
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/common.ent,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- common.ent	27 Jan 2005 22:02:23 -0000	1.12
  +++ common.ent	29 Jan 2005 01:03:17 -0000	1.13
  @@ -44,12 +44,13 @@
   
   <!ENTITY imageroot					'&projectroot;images/UsersGuide'>
   
  -<!ENTITY binding-reference			'binding reference'>
  +<!ENTITY binding-reference			'<link href="template.html#templates.components.parameters">binding reference</link>'>
   <!ENTITY listener-method			'listener method'>
   <!ENTITY hivemind-descriptor		'<link href="site:hivemind">HiveMind module deployment descriptor</link>'>
   
   <!ENTITY configuration-property		'<link href="configuration.html#configuration.search-path">configuration property</link>'>
   <!ENTITY configuration.character-sets
   									'<link href="configuration.html#configuration.character-sets">Character Sets</link>'>
  +<!ENTITY aso						'<link href="state.html#state.aso">application state object</link>'>
   									
   <!ENTITY init-parameter				'&lt;init-parameter&gt;'>
  \ No newline at end of file
  
  
  
  1.9       +64 -174   jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/state.xml
  
  Index: state.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/state.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- state.xml	8 Jan 2005 19:52:21 -0000	1.8
  +++ state.xml	29 Jan 2005 01:03:17 -0000	1.9
  @@ -46,8 +46,8 @@
   </p>
   
   <p>
  -Tapestry takes a different tack; it defines server-side state in terms of the Engine,
  -the Visit and Global objects, and persistent page properties.
  +Tapestry takes a different tack; it defines server side state in terms of
  +either entire objects (&aso;s) or by allowing specific page or component properties to be persistent.
   </p>
   
   <section id="state.general">
  @@ -126,173 +126,13 @@
   
   </section>  <!-- state.general -->
   
  -<section id="state.engine">
  -	<title>Engine</title>
  -	
  -<p>
  -The engine, a class which implements the interface &IEngine;, is the central object that is
  -responsible for managing server-side state (among its many other
  -responsibilities).  The engine is itself stored as an HttpSession attribute.
  -</p>
  -
  -<p>
  -Because the internal state of the engine can change, the framework will re-store
  -the engine into the HttpSession at the end of most requests.  This ensures that
  -any changes to the
  -<link href="#state.visit">Visit object</link>	are properly replicated.
  -</p>
  -
  -<p>
  -The simplest way to replicate server-side state is simply not to have any.  With some
  -care, Tapestry applications can
  -<link href="#state.stateless">run stateless</link>, at least until some
  -actual server-side state is necessary.
  -</p>
  -
  -</section>  <!-- state.engine -->
  -
  -<section id="state.visit">
  -	<title>Visit object</title>
  -	
  -<p>
  -The Visit object is an application-defined object that may be obtained from the engine (via the
  -visit property of the &IEngine; or &IPage;).  By convention, the class is usually named <code>Visit</code>, but it can be
  -any class whatsoever, even Map.
  -</p>
  -
  -
  -<p>
  -The name, "Visit", was selected to emphasize that whatever data is stored in the Visit
  -concerns just a single visit to the web application.
  -</p>
  -
  -<note>
  -	Another good name would have been "session", but that name is heavily overloaded throughout Java
  -	and J2EE.
  -</note>
  -
  -
  -<p>
  -Tapestry doesn't mandate anything about the Visit object's class. The type of the
  -visit	property is Object. In Java code, accessing the Visit object
  -involves a cast from Object to an application-specific class.
  -The following example demonstrates how a &listener-method;
  -may access the Visit object.
  -</p>
  -
  -<source>
  -public void formSubmit(&IRequestCycle; cycle)
  -{
  -  MyVisit visit = (MyVisit)getPage().getVisit();
  -    
  -  visit.<em>doSomething()</em>;   
  -}
  -</source>
  -
  -<p>
  -In most cases, listener methods, such as <code>formSubmit()</code>, are implemented directly
  -within the page.  In that case, the first line can be abbreviated to:
  -</p>
  -
  -<source>
  -  MyVisit visit = (MyVisit)getVisit();
  -</source>
  -
  -<p>
  -The Visit object is instantiated lazily, the first time it is needed.  Method
  -<code>createVisit()</code> of &AbstractEngine; is responsible for this.
  -</p>
  -
  -<p>
  -In most cases, the Visit object is an ordinary JavaBean, and therefore, has a no-arguments
  -constructor.  In this case, the complete class name of the
  -Visit is specified as 
  -&configuration-property;
  -org.apache.tapestry.visit-class.
  -</p>
  -
  -<p>
  -Typically, the Visit class is defined in the application specification, or
  -as a &lt;init-parameter&gt; in the web deployment descriptor (web.xml).
  -</p>
  -
  -<source><![CDATA[
  -<application name="My Application">
  -  <property name="org.apache.tapestry.visit-class" value="mypackage.MyVisit"/>
  -
  -  ...
  -]]>
  -</source>
  -
  -<p>
  -In cases where the Visit object does not have a no-arguments contructor, or
  -has other special initialization requirements, the method
  -<code>createVisit()</code> of &AbstractEngine; can be overridden.
  -</p>
  -
  -<p>
  -There is a crucial difference between accessing the visit via the 
  -visit property of &IPage; and the
  -visit property of &IEngine;.  In the former case, accessing the Visit object
  -via the page, the Visit object <em>will</em> be created if it does not already exist.
  -</p>
  -
  -<p>
  -Accessing the visit property of the &IEngine; is different, the Visit object will <em>not</em>
  -be created if it does not already exist.
  -</p>
  -
  -<p>
  -Carefully crafted applications will take heed of this difference and try to avoid
  -creating the visit unnecessarilly.  It is not just the creation of this one object that is
  -to be avoided ... creating the visit will likely force the entire application
  -to go stateful (create an HttpSession), and applications are more efficient
  -while <link href="#state.stateless">stateless</link>.
  -</p>
  -
  -</section> <!-- state.visit -->
  -
  -<section id="state.global">
  -	<title>Global object</title>
  -	
  -<p>
  -The  Global object is very similar to the  Visit object with some key differences.
  -The Global object is shared by all instances of the application engine; ultimately, it is stored
  -as a ServletContext attribute.  The Global object is therefore not persistent in any way.
  -The Global object is specific to an individual server within a cluster; each server will have its own instance
  -of the Global object.
  -  In a failover, 
  -the engine will connect to a new instance of the Global object within the new server.
  -</p>
  -
  -<p>
  -The Global object may be accessed using the global property of either the
  -page or the engine (unlike the visit property, they are completely equivalent).
  -</p>
  -
  -<p>
  -Care should be taken that the Global object is threadsafe; since many engines (from many sessions,
  -in many threads) will access it simultanenously.  The default Global object is a synchronized
  -HashMap.  This can be overriden with
  -&configuration-property;
  -org.apache.tapestry.global-class.
  -</p>
  -
  -<p>
  -The most typical use of the Global object is to interface to J2EE resources such as EJB home and remote
  -interfaces or JDBC data sources.  The shared Global object can cache home and remote interfaces that 
  -are efficiently shared by all engine instances.	
  -</p>
  -
  -</section>  <!-- state.global -->
  -
   <section id="state.page-properties">
   	<title>Persistent page properties</title>
   	
   <p>
   Servlets, and by extension, JavaServer Pages, are inherently stateless.  That is, they will be used
   simultaneously by many threads and clients.  Because of this, they must not store (in instance variables)
  -any properties or values that are specified to any single client.
  +any properties or values that are specific to any single client.
   </p>
   
   <p>
  @@ -375,7 +215,7 @@
   <note>
   Starting with Tapestry 3.1, persistence strategies are pluggable. In theory, properties can be stored 
   can be stored in query parameters or HTTP cookies, or by other means. The persist attribute of the
  -&lt;property; element defines the stategy used, but only the "session" strategy is provided with
  +&spec.property; element defines the stategy used, but only the "session" strategy is provided with
   the framework.
   </note>
   
  @@ -492,6 +332,57 @@
   	
   </section> <!-- state.page-properties -->
   
  +<section id="state.aso">
  +  <title>Application state objects</title>
  +  
  +<p>
  +What happens when you have objects that are needed by multiple pages?  For that, you need an
  +<em>application state object</em>.  ASO's are global objects that can be accessed from any page
  +or component in the application [[ Well, soon anyway ]].  Each ASO has a unique name (the two default
  +ASO's are called "visit" and "global" for historical reasons).  An ASO is created when first referenced by any page.
  +ASO's with session scope are stored into the HttpSession at the end of the request (and 
  +<link href="#state.stateless">may force the creation of
  +the session</link>).  ASOs in the application scope are available to any and all users.
  +</p>  
  +
  +<note>
  +Tapestry 3.0 had a more limited form of ASO:  The Visit object and the Global object. The Visit object is session scope, the Global object is
  +application scope. This concept has been extended in Tapestry 3.1 to allow any number of ASOs with any desired scope, and lots
  +of flexibility on how ASOs get created. The Visit and Global still exist in 3.1, as default ASOs you can use or override.
  +</note>
  +
  +<section id="state.aso.defining">
  +  <title>Defining new ASOs</title>
  +  
  +<p>
  +To create a new ASO, you must update your &hivemind-descriptor; and add a contribution to the
  +&tapestry.state.ApplicationObjects; configuration point:
  +</p>  
  +
  +<source><![CDATA[
  +<contribution configuration-id="hivemind.state.ApplicationObjects">
  +  <state-object name="registration-data" scope="session">
  +    <create-instance class="org.example.registration.RegistrationData"/>
  +  </state-object>  
  +</contribution>
  +]]></source>
  +  
  +<p>
  +This defines an ASO named registration-data that is session scoped (stored in the HttpSession once created). The first
  +time it is referenced, an instance of RegistrationData is created and stored into the session.
  +</p>  
  +
  +<p>
  +If your data object can't be created using a simple constructor, then you can supply an &lt;invoke-factory&gt; element instead
  +of &lt;create-instance&gt;.  &lt;invoke-factory&gt; allows you to reference and object or service that implements
  +the &StateObjectFactory; interface.
  +</p>
  +  
  +</section> <!-- state.aso.defining -->
  +
  +  
  +</section>  <!-- state.aso -->
  +
   <section id="state.stateless">
   	<title>Stateless applications</title>
   	
  @@ -512,16 +403,9 @@
   </p>
   
   <p>
  -Tapestry defers creation of the HttpSession until one of two things happens:  When
  -the Visit object is created, or when the first persistent page property is recorded.  At this point,
  -Tapestry will create the HttpSession and store the engine into it.
  -</p>
  -
  -<p>
  -Earlier, we said that the &IEngine; instance is stored in the HttpSession, but this is not always the case.
  -Tapestry maintains an object pool of &IEngine; instances that are used for stateless requests.  An instance
  -is checked out of the pool and used to process a single request, then checked back into the pool for
  -reuse in a later request, by the same or different client.
  +Tapestry defers creation of the HttpSession until one of two things happens:  When a session-scoped ASO is
  +first created, or when the first persistent page property is recorded.  At this point,
  +Tapestry will create the HttpSession to hold the object or property.
   </p>
   
   
  @@ -532,6 +416,12 @@
   speed the initial display of the application, since no processing time will be used in creating the HttpSession.
   </p>	
   
  +<p>
  +The <code>state:</code> &binding-reference; combined with the &Conditional; component makes it easy for you to skip
  +portions of a page if a particular ASO does not already exist; this allows you to avoid accidentally force its
  +creation on first reference.
  +</p>
  +
   <note>
   There are plans for Tapestry 3.1 to allow some persistent state to be stored as HTTP cookies or in hidden form fields (and as query parameters
   inside URLs). In these cases, a web application would be "stateful" without necessarily using an HttpSession. What remains to be seen
  
  
  
  1.11      +6 -0      jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/template.xml
  
  Index: template.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/template.xml,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- template.xml	7 Jan 2005 00:31:05 -0000	1.10
  +++ template.xml	29 Jan 2005 01:03:17 -0000	1.11
  @@ -368,6 +368,12 @@
       <td></td>
     </tr>
     
  +  <tr>
  +    <td>state</td>
  +    <td>True of false dependening on whether the named &aso; exists.</td>
  +    <td>state:visit</td>
  +    <td></td>
  +  </tr>
   </table>
   
   <note>
  
  
  
  1.1                  jakarta-tapestry/framework/src/test/org/apache/tapestry/binding/TestStateBinding.java
  
  Index: TestStateBinding.java
  ===================================================================
  package org.apache.tapestry.binding;
  
  import org.apache.hivemind.ApplicationRuntimeException;
  import org.apache.hivemind.Location;
  import org.apache.hivemind.test.HiveMindTestCase;
  import org.apache.tapestry.IBinding;
  import org.apache.tapestry.coerce.ValueConverter;
  import org.apache.tapestry.engine.state.ApplicationStateManager;
  import org.easymock.MockControl;
  
  /**
   * Tests for {@link org.apache.tapestry.binding.StateBinding}and
   * {@link org.apache.tapestry.binding.StateBindingFactory}.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class TestStateBinding extends HiveMindTestCase
  {
  
      private ValueConverter newValueConverter()
      {
          return (ValueConverter) newMock(ValueConverter.class);
      }
  
      private IBinding newBinding(String objectName, ValueConverter vc, ApplicationStateManager asm,
              Location location)
      {
          StateBindingFactory f = new StateBindingFactory();
          f.setValueConverter(vc);
          f.setApplicationStateManager(asm);
  
          return f.createBinding(null, "binding description", objectName, location);
      }
  
      public void testSuccess()
      {
          MockControl asmc = newControl(ApplicationStateManager.class);
          ApplicationStateManager asm = (ApplicationStateManager) asmc.getMock();
  
          asm.exists("fred");
          asmc.setReturnValue(true);
  
          ValueConverter vc = newValueConverter();
  
          replayControls();
  
          IBinding b = newBinding("fred", vc, asm, null);
  
          assertEquals(Boolean.TRUE, b.getObject());
  
          verifyControls();
      }
  
      public void testFailure()
      {
          Location l = fabricateLocation(22);
  
          Throwable t = new RuntimeException("Nested exception.");
  
          MockControl asmc = newControl(ApplicationStateManager.class);
          ApplicationStateManager asm = (ApplicationStateManager) asmc.getMock();
  
          asm.exists("fred");
          asmc.setThrowable(t);
  
          ValueConverter vc = newValueConverter();
  
          replayControls();
  
          IBinding b = newBinding("fred", vc, asm, l);
  
          
          try
          {
              b.getObject();
              unreachable();
          }
          catch (ApplicationRuntimeException ex)
          {
              assertEquals("Nested exception.", ex.getMessage());
              assertSame(l, ex.getLocation());
              assertSame(t, ex.getRootCause());
          }
  
          verifyControls();
      }
  
  }
  
  
  1.4       +1 -1      jakarta-tapestry/framework/src/test/org/apache/tapestry/services/impl/TestBindingSource.java
  
  Index: TestBindingSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/services/impl/TestBindingSource.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestBindingSource.java	6 Jan 2005 02:17:19 -0000	1.3
  +++ TestBindingSource.java	29 Jan 2005 01:03:17 -0000	1.4
  @@ -20,7 +20,7 @@
   import org.apache.hivemind.test.HiveMindTestCase;
   import org.apache.tapestry.IBinding;
   import org.apache.tapestry.IComponent;
  -import org.apache.tapestry.services.BindingFactory;
  +import org.apache.tapestry.binding.BindingFactory;
   import org.easymock.MockControl;
   
   /**
  
  
  
  1.3       +5 -4      jakarta-tapestry/framework/src/test/org/apache/tapestry/services/impl/TestRequestLocaleManager.java
  
  Index: TestRequestLocaleManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/services/impl/TestRequestLocaleManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestRequestLocaleManager.java	5 Jan 2005 23:17:26 -0000	1.2
  +++ TestRequestLocaleManager.java	29 Jan 2005 01:03:17 -0000	1.3
  @@ -20,6 +20,7 @@
   
   import org.apache.hivemind.test.HiveMindTestCase;
   import org.apache.tapestry.ApplicationServlet;
  +import org.apache.tapestry.TapestryConstants;
   import org.apache.tapestry.services.CookieSource;
   import org.easymock.MockControl;
   
  @@ -41,7 +42,7 @@
   
           // Training
   
  -        source.readCookieValue(ApplicationServlet.LOCALE_COOKIE_NAME);
  +        source.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME);
           sourceControl.setReturnValue(null);
   
           request.getLocale();
  @@ -67,7 +68,7 @@
   
           // Training
   
  -        source.readCookieValue(ApplicationServlet.LOCALE_COOKIE_NAME);
  +        source.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME);
           sourceControl.setReturnValue(localeName);
   
           replayControls();
  @@ -105,7 +106,7 @@
   
           // Training
   
  -        source.writeCookieValue(ApplicationServlet.LOCALE_COOKIE_NAME, locale.toString());
  +        source.writeCookieValue(TapestryConstants.LOCALE_COOKIE_NAME, locale.toString());
   
           replayControls();
   
  @@ -127,7 +128,7 @@
   
           // Training
   
  -        source.readCookieValue(ApplicationServlet.LOCALE_COOKIE_NAME);
  +        source.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME);
           sourceControl.setReturnValue(null);
   
           request.getLocale();
  
  
  
  1.3       +0 -96     jakarta-tapestry/framework/src/test/org/apache/tapestry/services/impl/TestEngineManager.java
  
  Index: TestEngineManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/services/impl/TestEngineManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestEngineManager.java	5 Jan 2005 23:17:26 -0000	1.2
  +++ TestEngineManager.java	29 Jan 2005 01:03:17 -0000	1.3
  @@ -16,9 +16,6 @@
   
   import java.util.Locale;
   
  -import javax.servlet.http.HttpServletRequest;
  -import javax.servlet.http.HttpSession;
  -
   import org.apache.hivemind.test.HiveMindTestCase;
   import org.apache.tapestry.IEngine;
   import org.apache.tapestry.services.EngineFactory;
  @@ -34,44 +31,9 @@
    */
   public class TestEngineManager extends HiveMindTestCase
   {
  -    public void testGetFromSession()
  -    {
  -        IEngine engine = (IEngine) newMock(IEngine.class);
  -
  -        MockControl requestControl = newControl(HttpServletRequest.class);
  -        HttpServletRequest request = (HttpServletRequest) requestControl.getMock();
  -
  -        MockControl sessionControl = newControl(HttpSession.class);
  -        HttpSession session = (HttpSession) sessionControl.getMock();
  -
  -        // Training
  -
  -        request.getSession(false);
  -        requestControl.setReturnValue(session);
  -
  -        session.getAttribute(EngineManagerImpl.ENGINE_KEY_PREFIX + "george");
  -        sessionControl.setReturnValue(engine);
  -
  -        replayControls();
  -
  -        EngineManagerImpl m = new EngineManagerImpl();
  -
  -        m.setServletName("george");
  -        m.setRequest(request);
  -
  -        m.initializeService();
  -
  -        IEngine actual = m.getEngineInstance();
  -
  -        assertSame(engine, actual);
  -
  -        verifyControls();
  -    }
   
       public void testGetFromPool()
       {
  -        MockControl requestControl = newControl(HttpServletRequest.class);
  -        HttpServletRequest request = (HttpServletRequest) requestControl.getMock();
   
           MockControl extractorControl = newControl(RequestLocaleManager.class);
           RequestLocaleManager extractor = (RequestLocaleManager) extractorControl.getMock();
  @@ -81,9 +43,6 @@
   
           // Training
   
  -        request.getSession(false);
  -        requestControl.setReturnValue(null);
  -
           extractor.extractLocaleForCurrentRequest();
           extractorControl.setReturnValue(Locale.CHINESE);
   
  @@ -96,13 +55,9 @@
   
           EngineManagerImpl m = new EngineManagerImpl();
   
  -        m.setServletName("george");
  -        m.setRequest(request);
           m.setEnginePool(pool);
           m.setLocaleManager(extractor);
   
  -        m.initializeService();
  -
           IEngine actual = m.getEngineInstance();
   
           assertSame(engine, actual);
  @@ -112,8 +67,6 @@
   
       public void testGetNotInPool()
       {
  -        MockControl requestControl = newControl(HttpServletRequest.class);
  -        HttpServletRequest request = (HttpServletRequest) requestControl.getMock();
   
           MockControl extractorControl = newControl(RequestLocaleManager.class);
           RequestLocaleManager extractor = (RequestLocaleManager) extractorControl.getMock();
  @@ -123,9 +76,6 @@
   
           // Training
   
  -        request.getSession(false);
  -        requestControl.setReturnValue(null);
  -
           extractor.extractLocaleForCurrentRequest();
           extractorControl.setReturnValue(Locale.CHINESE);
   
  @@ -144,14 +94,10 @@
   
           EngineManagerImpl m = new EngineManagerImpl();
   
  -        m.setServletName("george");
  -        m.setRequest(request);
           m.setEnginePool(pool);
           m.setLocaleManager(extractor);
           m.setEngineFactory(factory);
   
  -        m.initializeService();
  -
           IEngine actual = m.getEngineInstance();
   
           assertSame(engine, actual);
  @@ -161,8 +107,6 @@
   
       public void testStoreNoSession()
       {
  -        MockControl requestControl = newControl(HttpServletRequest.class);
  -        HttpServletRequest request = (HttpServletRequest) requestControl.getMock();
   
           MockControl engineControl = newControl(IEngine.class);
           IEngine engine = (IEngine) engineControl.getMock();
  @@ -171,9 +115,6 @@
   
           // Training
   
  -        request.getSession(false);
  -        requestControl.setReturnValue(null);
  -
           engine.getLocale();
           engineControl.setReturnValue(Locale.KOREAN);
   
  @@ -183,48 +124,11 @@
   
           EngineManagerImpl m = new EngineManagerImpl();
   
  -        m.setServletName("george");
  -        m.setRequest(request);
           m.setEnginePool(pool);
   
  -        m.initializeService();
  -
           m.storeEngineInstance(engine);
   
           verifyControls();
       }
   
  -    public void setStoreIntoSession()
  -    {
  -        MockControl requestControl = newControl(HttpServletRequest.class);
  -        HttpServletRequest request = (HttpServletRequest) requestControl.getMock();
  -
  -        HttpSession session = (HttpSession) newMock(HttpSession.class);
  -
  -        MockControl engineControl = newControl(IEngine.class);
  -        IEngine engine = (IEngine) engineControl.getMock();
  -
  -        // Training
  -
  -        request.getSession(false);
  -        requestControl.setReturnValue(session);
  -
  -        engine.getLocale();
  -        engineControl.setReturnValue(Locale.KOREAN);
  -
  -        session.setAttribute(EngineManagerImpl.ENGINE_KEY_PREFIX + "george", engine);
  -
  -        replayControls();
  -
  -        EngineManagerImpl m = new EngineManagerImpl();
  -
  -        m.setServletName("george");
  -        m.setRequest(request);
  -
  -        m.initializeService();
  -
  -        m.storeEngineInstance(engine);
  -
  -        verifyControls();
  -    }
   }
  \ No newline at end of file
  
  
  
  1.7       +2 -0      jakarta-tapestry/src/documentation/content/xdocs/links.ent
  
  Index: links.ent
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/links.ent,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- links.ent	27 Jan 2005 22:02:23 -0000	1.6
  +++ links.ent	29 Jan 2005 01:03:17 -0000	1.7
  @@ -99,6 +99,7 @@
   <!ENTITY SimpleEngine 				'<link href="&apiroot;/engine/SimpleEngine.html">SimpleEngine</link>'>
   <!ENTITY SpecificationParser 		'<link href="&apiroot;/parse/SpecificationParser">SpecificationParser</link>'>
   <!ENTITY StaleLinkException 		'<link href="&apiroot;/StaleLinkException.html">StaleLinkException</link>'>
  +<!ENTITY StateObjectFactory			'<link href="&apiroot;/engine/state/StateObjectFactory.html">StateObjectFactory</link>'>
   <!ENTITY Tapestry 					'<link href="&apiroot;/Tapestry.html">Tapestry</link>'>
   <!ENTITY ValidationDelegate 		'<link href="&apiroot;/valid/ValidationDelegate.html">ValidationDelegate</link>'>
   
  @@ -173,6 +174,7 @@
   
   <!ENTITY tapestry.services.ApplicationServices '<link href="&hivedoc;/service/tapestry.services.ApplicationServices.html">tapestry.services.ApplicationServices</link>'>
   <!ENTITY tapestry.url.ServiceEncoders '<link href="&hivedoc;/config/tapestry.url.ServiceEncoders.html">tapestry.url.ServiceEncoders</link>'>
  +<!ENTITY tapestry.state.ApplicationObjects '<link href="&hivedoc;/config/tapestry.state.ApplicationObjects.html">tapestry.state.ApplicationObjects</link>'>
   
   <!-- Other useful stuff -->
   
  
  
  
  1.5       +1 -1      jakarta-tapestry/framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java
  
  Index: TapestryTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TapestryTestCase.java	6 Jan 2005 02:17:09 -0000	1.4
  +++ TapestryTestCase.java	29 Jan 2005 01:03:17 -0000	1.5
  @@ -28,10 +28,10 @@
   import org.apache.tapestry.IBinding;
   import org.apache.tapestry.IComponent;
   import org.apache.tapestry.Tapestry;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.binding.LiteralBinding;
   import org.apache.tapestry.coerce.ValueConverter;
   import org.apache.tapestry.parse.SpecificationParser;
  -import org.apache.tapestry.services.BindingSource;
   import org.apache.tapestry.services.ExpressionCache;
   import org.apache.tapestry.services.ExpressionEvaluator;
   import org.apache.tapestry.services.impl.ExpressionCacheImpl;
  
  
  
  1.8       +0 -6      jakarta-tapestry/framework/src/java/org/apache/tapestry/ApplicationServlet.java
  
  Index: ApplicationServlet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/ApplicationServlet.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ApplicationServlet.java	6 Jan 2005 02:17:12 -0000	1.7
  +++ ApplicationServlet.java	29 Jan 2005 01:03:17 -0000	1.8
  @@ -77,12 +77,6 @@
   public class ApplicationServlet extends HttpServlet
   {
       /**
  -     * Name of the cookie written to the client web browser to identify the locale.
  -     */
  -
  -    public static final String LOCALE_COOKIE_NAME = "org.apache.tapestry.locale";
  -
  -    /**
        * The application specification, which is read once and kept in memory thereafter.
        */
   
  
  
  
  1.2       +5 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryConstants.java
  
  Index: TapestryConstants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryConstants.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TapestryConstants.java	28 Jan 2005 21:07:15 -0000	1.1
  +++ TapestryConstants.java	29 Jan 2005 01:03:17 -0000	1.2
  @@ -48,6 +48,11 @@
        */
       
       public static final String STALE_SESSION_PAGE = "StaleSession";
  +    /**
  +     * Name of the cookie written to the client web browser to identify the locale.
  +     */
  +    
  +    public static final String LOCALE_COOKIE_NAME = "org.apache.tapestry.locale";
   
       private TapestryConstants()
       {
  
  
  
  1.9       +2 -2      jakarta-tapestry/framework/src/java/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java
  
  Index: EstablishDefaultParameterValuesVisitor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- EstablishDefaultParameterValuesVisitor.java	6 Jan 2005 02:17:21 -0000	1.8
  +++ EstablishDefaultParameterValuesVisitor.java	29 Jan 2005 01:03:17 -0000	1.9
  @@ -19,8 +19,8 @@
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.tapestry.IBinding;
   import org.apache.tapestry.IComponent;
  -import org.apache.tapestry.services.BindingFactory;
  -import org.apache.tapestry.services.BindingSource;
  +import org.apache.tapestry.binding.BindingFactory;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.spec.IComponentSpecification;
   import org.apache.tapestry.spec.IParameterSpecification;
   
  
  
  
  1.14      +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/pageload/PageLoader.java
  
  Index: PageLoader.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/pageload/PageLoader.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- PageLoader.java	28 Jan 2005 21:07:16 -0000	1.13
  +++ PageLoader.java	29 Jan 2005 01:03:17 -0000	1.14
  @@ -36,6 +36,7 @@
   import org.apache.tapestry.IRequestCycle;
   import org.apache.tapestry.ITemplateComponent;
   import org.apache.tapestry.asset.AssetSource;
  +import org.apache.tapestry.binding.BindingSource;
   import org.apache.tapestry.binding.ExpressionBinding;
   import org.apache.tapestry.binding.ListenerBinding;
   import org.apache.tapestry.coerce.ValueConverter;
  @@ -44,7 +45,6 @@
   import org.apache.tapestry.event.PageDetachListener;
   import org.apache.tapestry.resolver.ComponentSpecificationResolver;
   import org.apache.tapestry.services.BSFManagerFactory;
  -import org.apache.tapestry.services.BindingSource;
   import org.apache.tapestry.services.ComponentConstructor;
   import org.apache.tapestry.services.ComponentConstructorFactory;
   import org.apache.tapestry.services.ComponentTemplateLoader;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org