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/03/30 00:19:55 UTC

cvs commit: jakarta-tapestry/framework/src/java/org/apache/tapestry/form Form.java

hlship      2005/03/29 14:19:55

  Modified:    framework/src/java/org/apache/tapestry/describe
                        HTMLDescriptionReceiver.java HTMLDescriberImpl.java
               portlet/src/descriptor/META-INF
                        tapestry.portlet.services.xml hivemodule.xml
               portlet/src/java/org/apache/tapestry/portlet
                        PortletRendererImpl.java PortletLink.java
                        PortletWebSession.java
               framework/src/descriptor/META-INF tapestry.describe.xml
                        hivemodule.xml tapestry.globals.xml
               framework/src/java/org/apache/tapestry/web
                        ServletWebSession.java WebSession.java
               framework/src/java/org/apache/tapestry/engine
                        RequestCycle.java
               framework/src/java/org/apache/tapestry/services
                        Infrastructure.java ApplicationGlobals.java
               portlet/src/test/org/apache/tapestry/portlet
                        TestPortletWebSession.java TestPortletRenderer.java
               framework/src/java/org/apache/tapestry IRequestCycle.java
                        TapestryUtils.java
               framework/src/java/org/apache/tapestry/html Body.java
                        Describe.jwc
               framework/src/java/org/apache/tapestry/services/impl
                        ApplicationGlobalsImpl.java
                        AbstractSetupApplicationGlobals.java
                        InfrastructureImpl.java
               framework/src/java/org/apache/tapestry/form Form.java
  Added:       framework/src/java/org/apache/tapestry/describe
                        HTMLDescriptionReceiverStyles.java
               portlet/src/java/org/apache/tapestry/portlet
                        PortletSessionDescribableAdapter.java
  Log:
  Allow objects described inside a portlet to make use of the defined Portlet CSS styles.
  Add a describable adapter for PortletSession.
  Only generate a Form name during true render (when it is legal to obtain the portlet namespace).
  
  Revision  Changes    Path
  1.3       +14 -4     jakarta-tapestry/framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiver.java
  
  Index: HTMLDescriptionReceiver.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiver.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HTMLDescriptionReceiver.java	14 Mar 2005 22:29:47 -0000	1.2
  +++ HTMLDescriptionReceiver.java	29 Mar 2005 22:19:54 -0000	1.3
  @@ -46,13 +46,23 @@
   
       private DescribableAdapter _adapter;
   
  +    private HTMLDescriptionReceiverStyles _styles;
  +
       public HTMLDescriptionReceiver(IMarkupWriter writer, DescribableAdapter adapter)
       {
  +        this(writer, adapter, new HTMLDescriptionReceiverStyles());
  +    }
  +
  +    public HTMLDescriptionReceiver(IMarkupWriter writer, DescribableAdapter adapter,
  +            HTMLDescriptionReceiverStyles styles)
  +    {
           Defense.notNull(writer, "writer");
           Defense.notNull(adapter, "adapter");
  +        Defense.notNull(styles, "styles");
   
           _writer = writer;
           _adapter = adapter;
  +        _styles = styles;
       }
   
       public void describe(Object object)
  @@ -122,20 +132,20 @@
               _emitDefault = false;
   
               _writer.begin("div");
  -            _writer.attribute("class", "described-object-title");
  +            _writer.attribute("class", _styles.getHeaderClass());
               _writer.print(_title);
               _writer.end();
               _writer.println();
   
               _writer.begin("table");
  -            _writer.attribute("class", "described-object");
  +            _writer.attribute("class", _styles.getTableClass());
               _writer.println();
           }
   
           if (_section != null)
           {
               _writer.begin("tr");
  -            _writer.attribute("class", "section");
  +            _writer.attribute("class", _styles.getSubheaderClass());
               _writer.begin("th");
               _writer.attribute("colspan", 2);
               _writer.print(_section);
  @@ -188,7 +198,7 @@
               return;
           }
   
  -        new HTMLDescriptionReceiver(_writer, _adapter).describe(value);
  +        new HTMLDescriptionReceiver(_writer, _adapter, _styles).describe(value);
       }
   
       public void property(String key, boolean value)
  
  
  
  1.2       +18 -1     jakarta-tapestry/framework/src/java/org/apache/tapestry/describe/HTMLDescriberImpl.java
  
  Index: HTMLDescriberImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/describe/HTMLDescriberImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HTMLDescriberImpl.java	7 Mar 2005 19:51:54 -0000	1.1
  +++ HTMLDescriberImpl.java	29 Mar 2005 22:19:54 -0000	1.2
  @@ -24,9 +24,11 @@
   {
       private DescribableAdapter _adapter;
   
  +    private HTMLDescriptionReceiverStyles _styles = new HTMLDescriptionReceiverStyles();
  +
       public void describeObject(Object object, IMarkupWriter writer)
       {
  -        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, _adapter);
  +        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, _adapter, _styles);
   
           dr.describe(object);
       }
  @@ -35,4 +37,19 @@
       {
           _adapter = adapter;
       }
  +
  +    public void setTableClass(String tableClass)
  +    {
  +        _styles.setTableClass(tableClass);
  +    }
  +
  +    public void setHeaderClass(String headerClass)
  +    {
  +        _styles.setHeaderClass(headerClass);
  +    }
  +
  +    public void setSubheaderClass(String subheaderClass)
  +    {
  +        _styles.setSubheaderClass(subheaderClass);
  +    }
   }
  \ No newline at end of file
  
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiverStyles.java
  
  Index: HTMLDescriptionReceiverStyles.java
  ===================================================================
  // Copyright 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.describe;
  
  /**
   * Holds the style information used by {@link org.apache.tapestry.describe.HTMLDescriptionReceiver}.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class HTMLDescriptionReceiverStyles
  {
      private String _tableClass = "described-object";
  
      private String _headerClass = "described-object-title";
  
      private String _subheaderClass = "section";
  
      public String getHeaderClass()
      {
          return _headerClass;
      }
  
      public void setHeaderClass(String headerClass)
      {
          _headerClass = headerClass;
      }
  
      public String getSubheaderClass()
      {
          return _subheaderClass;
      }
  
      public void setSubheaderClass(String subheaderClass)
      {
          _subheaderClass = subheaderClass;
      }
  
      public String getTableClass()
      {
          return _tableClass;
      }
  
      public void setTableClass(String tableClass)
      {
          _tableClass = tableClass;
      }
  }
  
  
  1.6       +3 -1      jakarta-tapestry/portlet/src/descriptor/META-INF/tapestry.portlet.services.xml
  
  Index: tapestry.portlet.services.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/descriptor/META-INF/tapestry.portlet.services.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- tapestry.portlet.services.xml	25 Mar 2005 20:36:58 -0000	1.5
  +++ tapestry.portlet.services.xml	29 Mar 2005 22:19:54 -0000	1.6
  @@ -45,10 +45,12 @@
       
       Service used to render a named page.
       
  -    <invoke-factory model="primitive">
  +    <invoke-factory>
         <construct class="PortletRendererImpl">
           <set-object property="markupWriterSource" value="infrastructure:markupWriterSource"/>
           <set-object property="response" value="infrastructure:response"/>       
  +        <set-object property="assetService" value="engine-service:asset"/>
  +        <set-object property="applicationId" value="infrastructure:applicationId"/>
         </construct>
       </invoke-factory>
     </service-point>
  
  
  
  1.7       +18 -0     jakarta-tapestry/portlet/src/descriptor/META-INF/hivemodule.xml
  
  Index: hivemodule.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/descriptor/META-INF/hivemodule.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- hivemodule.xml	22 Mar 2005 21:54:39 -0000	1.6
  +++ hivemodule.xml	29 Mar 2005 22:19:54 -0000	1.7
  @@ -203,6 +203,7 @@
         <set-service property="responseRenderer" service-id="tapestry.portlet.services.ResponseRenderer"/>
         <set-service property="linkFactory" service-id="PortletLinkFactory"/>
         <set-configuration property="factoryServices" configuration-id="tapestry.portlet.services.FactoryServices"/>
  +      <set-service property="HTMLDescriber" service-id="PortletHTMLDescriber"/>      
       </construct>
     </invoke-factory>
    </service-point>
  @@ -211,4 +212,21 @@
     <command id="SetupServletApplicationGlobals" object="service:SetupPortletApplicationGlobals"/>
    </contribution> 
     
  +	<service-point id="PortletHTMLDescriber" interface="org.apache.tapestry.describe.HTMLDescriber">
  +		
  +		Describes an object in an HTML format.
  +		
  +		<invoke-factory>
  +			<construct class="org.apache.tapestry.describe.HTMLDescriberImpl">
  +				<set-service property="adapter" service-id="tapestry.describe.DescribeAdaptor"/>
  +        <set property="headerClass" value="portlet-section-header"/>
  +        <set property="subheaderClass" value="portlet-section-subheader"/>
  +        <set property="tableClass" value="portlet-section-body"/>
  +			</construct>
  +		</invoke-factory>
  +	</service-point>
  +  
  +	<contribution configuration-id="tapestry.describe.DescribeAdaptors">
  +    <adapter class="javax.portlet.PortletSession" object="instance:PortletSessionDescribableAdapter"/>
  +  </contribution>    
   </module>
  \ No newline at end of file
  
  
  
  1.3       +43 -3     jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
  
  Index: PortletRendererImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PortletRendererImpl.java	22 Mar 2005 13:40:53 -0000	1.2
  +++ PortletRendererImpl.java	29 Mar 2005 22:19:54 -0000	1.3
  @@ -16,12 +16,18 @@
   
   import java.io.IOException;
   import java.io.PrintWriter;
  +import java.util.Date;
   
   import org.apache.tapestry.IMarkupWriter;
   import org.apache.tapestry.IPage;
   import org.apache.tapestry.IRequestCycle;
  +import org.apache.tapestry.PageRenderSupport;
  +import org.apache.tapestry.Tapestry;
  +import org.apache.tapestry.TapestryUtils;
  +import org.apache.tapestry.engine.IEngineService;
   import org.apache.tapestry.markup.MarkupWriterSource;
   import org.apache.tapestry.util.ContentType;
  +import org.apache.tapestry.util.PageRenderSupportImpl;
   import org.apache.tapestry.web.WebResponse;
   
   /**
  @@ -38,8 +44,11 @@
   
       private MarkupWriterSource _markupWriterSource;
   
  -    public void renderPage(IRequestCycle cycle, String pageName)
  -            throws IOException
  +    private IEngineService _assetService;
  +
  +    private String _applicationId;
  +
  +    public void renderPage(IRequestCycle cycle, String pageName) throws IOException
       {
           cycle.activate(pageName);
   
  @@ -51,7 +60,28 @@
   
           IMarkupWriter writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
   
  -        cycle.renderPage(writer);
  +        PageRenderSupportImpl support = new PageRenderSupportImpl(_assetService, null);
  +
  +        TapestryUtils.storePageRenderSupport(cycle, support);
  +
  +        IMarkupWriter nested = writer.getNestedWriter();
  +
  +        cycle.renderPage(nested);
  +
  +        String id = "Tapestry Portlet " + _applicationId + " " + _response.getNamespace();
  +
  +        writer.comment("BEGIN " + id);
  +        writer.comment("Page: " + page.getPageName());
  +        writer.comment("Generated: " + new Date());
  +        writer.comment("Framework version: " + Tapestry.VERSION);
  +
  +        support.writeBodyScript(writer, cycle);
  +
  +        nested.close();
  +
  +        support.writeInitializationScript(writer);
  +
  +        writer.comment("END " + id);
   
           writer.close();
   
  @@ -67,4 +97,14 @@
       {
           _response = response;
       }
  +
  +    public void setAssetService(IEngineService assetService)
  +    {
  +        _assetService = assetService;
  +    }
  +
  +    public void setApplicationId(String applicationId)
  +    {
  +        _applicationId = applicationId;
  +    }
   }
  \ No newline at end of file
  
  
  
  1.3       +2 -1      jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletLink.java
  
  Index: PortletLink.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletLink.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PortletLink.java	22 Mar 2005 21:54:39 -0000	1.2
  +++ PortletLink.java	29 Mar 2005 22:19:54 -0000	1.3
  @@ -113,7 +113,8 @@
               String name = names[i];
               String[] values = _parameters.getParameterValues(name);
   
  -            _portletURL.setParameter(name, values);
  +            if (values != null)
  +                _portletURL.setParameter(name, values);
           }
       }
   
  
  
  
  1.2       +7 -4      jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java
  
  Index: PortletWebSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PortletWebSession.java	10 Mar 2005 13:23:31 -0000	1.1
  +++ PortletWebSession.java	29 Mar 2005 22:19:54 -0000	1.2
  @@ -19,6 +19,7 @@
   import javax.portlet.PortletSession;
   
   import org.apache.hivemind.util.Defense;
  +import org.apache.tapestry.describe.DescriptionReceiver;
   import org.apache.tapestry.web.WebSession;
   import org.apache.tapestry.web.WebUtils;
   
  @@ -39,6 +40,11 @@
           _portletSession = portletSession;
       }
   
  +    public void describeTo(DescriptionReceiver receiver)
  +    {
  +        receiver.describeAlternate(_portletSession);
  +    }
  +
       public String getId()
       {
           return _portletSession.getId();
  @@ -61,10 +67,7 @@
   
       public void setAttribute(String name, Object attribute)
       {
  -        if (attribute == null)
  -            _portletSession.removeAttribute(name);
  -        else
  -            _portletSession.setAttribute(name, attribute);
  +        _portletSession.setAttribute(name, attribute);
       }
   
   }
  \ No newline at end of file
  
  
  
  1.1                  jakarta-tapestry/portlet/src/java/org/apache/tapestry/portlet/PortletSessionDescribableAdapter.java
  
  Index: PortletSessionDescribableAdapter.java
  ===================================================================
  // Copyright 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.portlet;
  
  import java.util.Date;
  import java.util.Iterator;
  
  import javax.portlet.PortletSession;
  
  import org.apache.tapestry.describe.DescribableAdapter;
  import org.apache.tapestry.describe.DescriptionReceiver;
  import org.apache.tapestry.web.WebUtils;
  
  /**
   * Describes {@link javax.portlet.PortletSession}.
   * 
   * @author Howard M. Lewis Ship
   * @since 3.1
   */
  public class PortletSessionDescribableAdapter implements DescribableAdapter
  {
      public void describeObject(Object object, DescriptionReceiver receiver)
      {
          PortletSession session = (PortletSession) object;
  
          receiver.title("PortletSession");
  
          receiver.property("creationTime", new Date(session.getCreationTime()));
          receiver.property("id", session.getId());
          receiver.property("lastAccessedTime", new Date(session.getLastAccessedTime()));
          receiver.property("maxInactiveInterval", session.getMaxInactiveInterval());
          receiver.property("new", session.isNew());
  
          receiver.section("Attributes");
          Iterator i = WebUtils.toSortedList(session.getAttributeNames()).iterator();
          while (i.hasNext())
          {
              String key = (String) i.next();
              receiver.property(key, session.getAttribute(key));
          }
      }
  }
  
  
  1.2       +1 -1      jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.describe.xml
  
  Index: tapestry.describe.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.describe.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- tapestry.describe.xml	7 Mar 2005 19:51:58 -0000	1.1
  +++ tapestry.describe.xml	29 Mar 2005 22:19:54 -0000	1.2
  @@ -61,7 +61,7 @@
   		
   		<invoke-factory>
   			<construct class="DefaultRenderableAdapter">
  -				<set-service property="describer" service-id="HTMLDescriber"/>
  +				<set-object property="describer" value="infrastructure:HTMLDescriber"/>
   			</construct>
   		</invoke-factory>
   	</service-point>
  
  
  
  1.35      +1 -0      jakarta-tapestry/framework/src/descriptor/META-INF/hivemodule.xml
  
  Index: hivemodule.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/hivemodule.xml,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- hivemodule.xml	22 Mar 2005 21:54:39 -0000	1.34
  +++ hivemodule.xml	29 Mar 2005 22:19:54 -0000	1.35
  @@ -87,6 +87,7 @@
           <set-service property="context" service-id="tapestry.globals.WebContext"/>
           <set-service property="threadLocale" service-id="hivemind.ThreadLocale"/>
           <set-service property="markupWriterSource" service-id="tapestry.markup.MarkupWriterSource"/>
  +        <set-object property="HTMLDescriber" value="service-property:tapestry.globals.ApplicationGlobals:HTMLDescriber"/>
         </construct>
       </invoke-factory>
       
  
  
  
  1.14      +1 -0      jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.globals.xml
  
  Index: tapestry.globals.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.globals.xml,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- tapestry.globals.xml	22 Mar 2005 21:54:39 -0000	1.13
  +++ tapestry.globals.xml	29 Mar 2005 22:19:54 -0000	1.14
  @@ -97,6 +97,7 @@
         <set-service property="responseRenderer" service-id="tapestry.request.ResponseRenderer"/>
         <set-service property="linkFactory" service-id="tapestry.url.LinkFactory"/>
         <set-configuration property="factoryServices" configuration-id="tapestry.services.FactoryServices"/>
  +      <set-service property="HTMLDescriber" service-id="tapestry.describe.HTMLDescriber"/>
       </construct>
     </invoke-factory>
    </service-point>
  
  
  
  1.3       +6 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/web/ServletWebSession.java
  
  Index: ServletWebSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/web/ServletWebSession.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ServletWebSession.java	25 Feb 2005 15:01:53 -0000	1.2
  +++ ServletWebSession.java	29 Mar 2005 22:19:54 -0000	1.3
  @@ -19,6 +19,7 @@
   import javax.servlet.http.HttpSession;
   
   import org.apache.hivemind.util.Defense;
  +import org.apache.tapestry.describe.DescriptionReceiver;
   
   /**
    * Adapts {@link javax.servlet.http.HttpSession}&nbsp; as
  @@ -38,6 +39,11 @@
           _httpSession = session;
       }
   
  +    public void describeTo(DescriptionReceiver receiver)
  +    {
  +        receiver.describeAlternate(_httpSession);
  +    }
  +    
       public List getAttributeNames()
       {
           return WebUtils.toSortedList(_httpSession.getAttributeNames());
  
  
  
  1.3       +3 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/web/WebSession.java
  
  Index: WebSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/web/WebSession.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WebSession.java	25 Feb 2005 15:01:53 -0000	1.2
  +++ WebSession.java	29 Mar 2005 22:19:54 -0000	1.3
  @@ -14,13 +14,15 @@
   
   package org.apache.tapestry.web;
   
  +import org.apache.tapestry.describe.Describable;
  +
   /**
    * Primarily concerned with maintaining server-side state as attributes.
    * 
    * @author Howard M. Lewis Ship
    * @since 3.1
    */
  -public interface WebSession extends AttributeHolder
  +public interface WebSession extends AttributeHolder, Describable
   {
       /**
        * Returns a unique string identifier used to identify the session. This value is provided by
  
  
  
  1.16      +6 -21     jakarta-tapestry/framework/src/java/org/apache/tapestry/engine/RequestCycle.java
  
  Index: RequestCycle.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/engine/RequestCycle.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- RequestCycle.java	27 Mar 2005 17:42:23 -0000	1.15
  +++ RequestCycle.java	29 Mar 2005 22:19:54 -0000	1.16
  @@ -101,7 +101,7 @@
   
       private boolean _rewinding = false;
   
  -    private Map _attributes;
  +    private Map _attributes = new HashMap();
   
       private int _actionId;
   
  @@ -194,9 +194,6 @@
   
       public Object getAttribute(String name)
       {
  -        if (_attributes == null)
  -            return null;
  -
           return _attributes.get(name);
       }
   
  @@ -331,9 +328,6 @@
           if (LOG.isDebugEnabled())
               LOG.debug("Removing attribute " + name);
   
  -        if (_attributes == null)
  -            return;
  -
           _attributes.remove(name);
       }
   
  @@ -351,11 +345,6 @@
           _actionId = -1;
           _targetActionId = 0;
   
  -        // Forget any attributes from a previous render cycle.
  -
  -        if (_attributes != null)
  -            _attributes.clear();
  -
           try
           {
               _page.renderPage(writer, this);
  @@ -378,6 +367,7 @@
           {
               _actionId = 0;
               _targetActionId = 0;
  +            _attributes.clear();
           }
   
           _monitor.pageRenderEnd(pageName);
  @@ -405,9 +395,6 @@
   
           _monitor.pageRewindBegin(pageName);
   
  -        if (_attributes != null)
  -            _attributes.clear();
  -
           // Fake things a little for getNextActionId() / isRewound()
   
           _targetActionId = Integer.parseInt(targetActionId, 16);
  @@ -454,6 +441,8 @@
               _monitor.pageRewindEnd(pageName);
   
               _rewinding = false;
  +
  +            _attributes.clear();
           }
       }
   
  @@ -475,9 +464,6 @@
   
           _monitor.pageRewindBegin(pageName);
   
  -        if (_attributes != null)
  -            _attributes.clear();
  -
           _actionId = -1;
   
           // Parse the action Id as hex since that's whats generated
  @@ -520,6 +506,8 @@
               _monitor.pageRewindEnd(pageName);
   
               _rewinding = false;
  +
  +            _attributes.clear();
           }
   
       }
  @@ -529,9 +517,6 @@
           if (LOG.isDebugEnabled())
               LOG.debug("Set attribute " + name + " to " + value);
   
  -        if (_attributes == null)
  -            _attributes = new HashMap();
  -
           _attributes.put(name, value);
       }
   
  
  
  
  1.25      +3 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/Infrastructure.java
  
  Index: Infrastructure.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/Infrastructure.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- Infrastructure.java	24 Mar 2005 14:42:08 -0000	1.24
  +++ Infrastructure.java	29 Mar 2005 22:19:54 -0000	1.25
  @@ -19,6 +19,7 @@
   import org.apache.hivemind.ClassResolver;
   import org.apache.hivemind.Resource;
   import org.apache.tapestry.IMarkupWriter;
  +import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.engine.IPageSource;
   import org.apache.tapestry.engine.IPropertySource;
   import org.apache.tapestry.engine.IScriptSource;
  @@ -206,4 +207,6 @@
       public String getOutputEncoding();
   
       public MarkupWriterSource getMarkupWriterSource();
  +    
  +    public HTMLDescriber getHTMLDescriber();
   }
  \ No newline at end of file
  
  
  
  1.11      +5 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java
  
  Index: ApplicationGlobals.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ApplicationGlobals.java	22 Mar 2005 21:54:39 -0000	1.10
  +++ ApplicationGlobals.java	29 Mar 2005 22:19:54 -0000	1.11
  @@ -16,6 +16,7 @@
   
   import java.util.List;
   
  +import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.spec.IApplicationSpecification;
   import org.apache.tapestry.web.WebActivator;
   import org.apache.tapestry.web.WebContext;
  @@ -89,4 +90,8 @@
       public void storeLinkFactory(LinkFactory linkFactory);
   
       public LinkFactory getLinkFactory();
  +    
  +    public void storeHTMLDescriber(HTMLDescriber describer );
  +    
  +    public HTMLDescriber getHTMLDescriber();
   }
  \ No newline at end of file
  
  
  
  1.2       +0 -15     jakarta-tapestry/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java
  
  Index: TestPortletWebSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/test/org/apache/tapestry/portlet/TestPortletWebSession.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestPortletWebSession.java	10 Mar 2005 13:23:36 -0000	1.1
  +++ TestPortletWebSession.java	29 Mar 2005 22:19:55 -0000	1.2
  @@ -87,21 +87,6 @@
           verifyControls();
       }
   
  -    public void testSetAttributeToNull()
  -    {
  -        MockControl control = newControl(PortletSession.class);
  -        PortletSession session = (PortletSession) control.getMock();
  -
  -        session.removeAttribute("tonull");
  -
  -        replayControls();
  -
  -        WebSession ws = new PortletWebSession(session);
  -
  -        ws.setAttribute("tonull", null);
  -
  -        verifyControls();
  -    }
   
       public void testGetId()
       {
  
  
  
  1.3       +51 -2     jakarta-tapestry/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java
  
  Index: TestPortletRenderer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestPortletRenderer.java	22 Mar 2005 13:40:53 -0000	1.2
  +++ TestPortletRenderer.java	29 Mar 2005 22:19:55 -0000	1.3
  @@ -17,12 +17,18 @@
   import java.io.CharArrayWriter;
   import java.io.PrintWriter;
   
  +import org.apache.hivemind.test.AggregateArgumentsMatcher;
  +import org.apache.hivemind.test.ArgumentMatcher;
   import org.apache.hivemind.test.HiveMindTestCase;
  +import org.apache.hivemind.test.RegexpMatcher;
  +import org.apache.hivemind.test.TypeMatcher;
   import org.apache.tapestry.IMarkupWriter;
   import org.apache.tapestry.IPage;
   import org.apache.tapestry.IRequestCycle;
  +import org.apache.tapestry.engine.IEngineService;
   import org.apache.tapestry.markup.MarkupWriterSource;
   import org.apache.tapestry.util.ContentType;
  +import org.apache.tapestry.util.PageRenderSupportImpl;
   import org.apache.tapestry.web.WebResponse;
   import org.easymock.MockControl;
   
  @@ -44,6 +50,11 @@
           return new PrintWriter(new CharArrayWriter());
       }
   
  +    private IEngineService newAssetService()
  +    {
  +        return (IEngineService) newMock(IEngineService.class);
  +    }
  +
       private WebResponse newWebResponse(ContentType contentType, PrintWriter writer)
               throws Exception
       {
  @@ -53,6 +64,9 @@
           response.getPrintWriter(contentType);
           control.setReturnValue(writer);
   
  +        response.getNamespace();
  +        control.setReturnValue("NAMESPACE");
  +
           return response;
       }
   
  @@ -75,6 +89,9 @@
   
           page.getResponseContentType();
           control.setReturnValue(contentType);
  +        
  +        page.getPageName();
  +        control.setReturnValue("ZePage");
   
           return page;
       }
  @@ -89,6 +106,14 @@
           cycle.getPage();
           control.setReturnValue(page);
   
  +        cycle.getAttribute("org.apache.tapestry.PageRenderSupport");
  +        control.setReturnValue(null);
  +
  +        cycle.setAttribute("org.apache.tapestry.PageRenderSupport", new PageRenderSupportImpl(
  +                newAssetService(), null));
  +        control.setMatcher(new AggregateArgumentsMatcher(new ArgumentMatcher[]
  +        { null, new TypeMatcher() }));
  +
           return cycle;
       }
   
  @@ -97,14 +122,35 @@
           ContentType ct = new ContentType("text/html");
           PrintWriter pw = newPrintWriter();
           WebResponse response = newWebResponse(ct, pw);
  -        IMarkupWriter writer = newWriter();
  +        IMarkupWriter nested = newWriter();
  +
  +        MockControl control = newControl(IMarkupWriter.class);
  +        IMarkupWriter writer = (IMarkupWriter) control.getMock();
  +
  +        writer.getNestedWriter();
  +        control.setReturnValue(nested);
  +
           MarkupWriterSource source = newSource(pw, ct, writer);
           IPage page = newPage(ct);
  +        IEngineService assetService = newAssetService();
   
           IRequestCycle cycle = newCycle("ZePage", page);
   
  -        cycle.renderPage(writer);
  +        cycle.renderPage(nested);
   
  +        writer.comment("BEGIN Tapestry Portlet appId NAMESPACE");
  +        writer.comment("Page: ZePage");
  +        
  +        writer.comment("Generated:.*");
  +        control.setMatcher(new AggregateArgumentsMatcher(new RegexpMatcher()));
  +     
  +        writer.comment("Framework version:.*");
  +        
  +        
  +        nested.close();
  + 
  +        writer.comment("END Tapestry Portlet appId NAMESPACE");
  +        
           writer.close();
   
           replayControls();
  @@ -112,10 +158,13 @@
           PortletRendererImpl r = new PortletRendererImpl();
           r.setMarkupWriterSource(source);
           r.setResponse(response);
  +        r.setAssetService(assetService);
  +        r.setApplicationId("appId");
   
           r.renderPage(cycle, "ZePage");
   
           verifyControls();
       }
   
  +    // TODO: Tests that prove the RenderPageSupport is working properly.
   }
  \ No newline at end of file
  
  
  
  1.15      +10 -6     jakarta-tapestry/framework/src/java/org/apache/tapestry/IRequestCycle.java
  
  Index: IRequestCycle.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/IRequestCycle.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- IRequestCycle.java	29 Mar 2005 13:35:42 -0000	1.14
  +++ IRequestCycle.java	29 Mar 2005 22:19:55 -0000	1.15
  @@ -80,7 +80,7 @@
       /**
        * Retrieves a previously stored attribute, returning null if not found. Attributes allow
        * components to locate each other; primarily they allow a wrapped component to locate a
  -     * component which wraps it.
  +     * component which wraps it. Attributes are cleared at the end of the render (or rewind).
        */
   
       public Object getAttribute(String name);
  @@ -148,6 +148,7 @@
        * id is reached.
        * 
        * @see IAction
  +     * @see org.apache.tapestry.link.ActionLink
        */
   
       public void rewindPage(String targetActionId, IComponent targetComponent);
  @@ -160,6 +161,8 @@
        * This is used by components to locate each other. A component, such as
        * {@link org.apache.tapestry.html.Body}, will write itself under a well-known name into the
        * request cycle, and components it wraps can locate it by that name.
  +     * <p>
  +     * Attributes are cleared at the end of each render or rewind phase.
        */
   
       public void setAttribute(String name, Object value);
  @@ -264,7 +267,7 @@
       public String getParameter(String name);
   
       /**
  -     * Returns all query parameter values for the given name. Returns null if no value were
  +     * Returns all query parameter values for the given name. Returns null if no values were
        * provided.
        * 
        * @since 3.1
  @@ -272,8 +275,9 @@
       public String[] getParameters(String name);
   
       /**
  -     * Converts a partial URL into an absoluate URL. Prefixes the provided URL with servlet context
  -     * path (if any), then expands it to a full URL by prepending with the scheme, server and port.
  +     * Converts a partial URL into an absolute URL. Prefixes the provided URL with servlet context
  +     * path (if any), then expands it to a full URL by prepending with the scheme, server and port
  +     * (determined from the current {@link org.apache.tapestry.web.WebRequest request}.
        * 
        * @since 3.1
        */
  @@ -291,8 +295,8 @@
       public void forgetPage(String name);
   
       /**
  -     * Returns the central {@link org.apache.tapestry.services.Infrastructure}object used to manage
  -     * the processing of the request.
  +     * Returns the central {@link org.apache.tapestry.services.Infrastructure}&nbsp;object used to
  +     * manage the processing of the request.
        * 
        * @since 3.1
        */
  
  
  
  1.2       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryUtils.java
  
  Index: TapestryUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/TapestryUtils.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TapestryUtils.java	29 Mar 2005 13:35:42 -0000	1.1
  +++ TapestryUtils.java	29 Mar 2005 22:19:55 -0000	1.2
  @@ -62,7 +62,7 @@
        * Stores the support object using {@link #storeUniqueAttribute(IRequestCycle, String, Object)}.
        */
   
  -    public static void storeRenderPageSupport(IRequestCycle cycle, PageRenderSupport support)
  +    public static void storePageRenderSupport(IRequestCycle cycle, PageRenderSupport support)
       {
           storeUniqueAttribute(cycle, PAGE_RENDER_SUPPORT_ATTRIBUTE, support);
       }
  
  
  
  1.7       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/html/Body.java
  
  Index: Body.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/html/Body.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Body.java	29 Mar 2005 13:35:42 -0000	1.6
  +++ Body.java	29 Mar 2005 22:19:55 -0000	1.7
  @@ -120,7 +120,7 @@
   
       protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
       {
  -        TapestryUtils.storeRenderPageSupport(cycle, this);
  +        TapestryUtils.storePageRenderSupport(cycle, this);
   
           IMarkupWriter nested = writer.getNestedWriter();
   
  
  
  
  1.2       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/html/Describe.jwc
  
  Index: Describe.jwc
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/html/Describe.jwc,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Describe.jwc	7 Mar 2005 19:51:57 -0000	1.1
  +++ Describe.jwc	29 Mar 2005 22:19:55 -0000	1.2
  @@ -34,5 +34,5 @@
         </description>
     </parameter>
     
  -  <inject property="describer" object="service:tapestry.describe.HTMLDescriber"/>
  +  <inject property="describer" object="infrastructure:HTMLDescriber"/>
   </component-specification>
  
  
  
  1.10      +13 -0     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java
  
  Index: ApplicationGlobalsImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ApplicationGlobalsImpl.java	22 Mar 2005 21:54:39 -0000	1.9
  +++ ApplicationGlobalsImpl.java	29 Mar 2005 22:19:55 -0000	1.10
  @@ -16,6 +16,7 @@
   
   import java.util.List;
   
  +import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.services.ApplicationGlobals;
   import org.apache.tapestry.services.LinkFactory;
   import org.apache.tapestry.services.ResponseRenderer;
  @@ -43,6 +44,8 @@
   
       private LinkFactory _linkFactory;
   
  +    private HTMLDescriber _htmlDescriber;
  +
       public void storeActivator(WebActivator activator)
       {
           _activator = activator;
  @@ -107,4 +110,14 @@
       {
           _linkFactory = linkFactory;
       }
  +
  +    public HTMLDescriber getHTMLDescriber()
  +    {
  +        return _htmlDescriber;
  +    }
  +
  +    public void storeHTMLDescriber(HTMLDescriber describer)
  +    {
  +        _htmlDescriber = describer;
  +    }
   }
  \ No newline at end of file
  
  
  
  1.2       +9 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java
  
  Index: AbstractSetupApplicationGlobals.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractSetupApplicationGlobals.java	22 Mar 2005 21:54:39 -0000	1.1
  +++ AbstractSetupApplicationGlobals.java	29 Mar 2005 22:19:55 -0000	1.2
  @@ -16,6 +16,7 @@
   
   import java.util.List;
   
  +import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.services.ApplicationGlobals;
   import org.apache.tapestry.services.LinkFactory;
   import org.apache.tapestry.services.ResponseRenderer;
  @@ -38,11 +39,14 @@
   
       private LinkFactory _linkFactory;
   
  +    private HTMLDescriber _HTMLDescriber;
  +
       protected void initialize()
       {
           _globals.storeFactoryServices(_factoryServices);
           _globals.storeResponseRenderer(_responseRenderer);
           _globals.storeLinkFactory(_linkFactory);
  +        _globals.storeHTMLDescriber(_HTMLDescriber);
       }
   
       public void setGlobals(ApplicationGlobals globals)
  @@ -64,4 +68,9 @@
       {
           _linkFactory = linkFactory;
       }
  +
  +    public void setHTMLDescriber(HTMLDescriber describer)
  +    {
  +        _HTMLDescriber = describer;
  +    }
   }
  \ No newline at end of file
  
  
  
  1.25      +13 -0     jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java
  
  Index: InfrastructureImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- InfrastructureImpl.java	22 Mar 2005 13:40:54 -0000	1.24
  +++ InfrastructureImpl.java	29 Mar 2005 22:19:55 -0000	1.25
  @@ -19,6 +19,7 @@
   import org.apache.hivemind.ClassResolver;
   import org.apache.hivemind.Resource;
   import org.apache.hivemind.service.ThreadLocale;
  +import org.apache.tapestry.describe.HTMLDescriber;
   import org.apache.tapestry.engine.IPageSource;
   import org.apache.tapestry.engine.IPropertySource;
   import org.apache.tapestry.engine.IScriptSource;
  @@ -102,6 +103,8 @@
   
       private MarkupWriterSource _markupWriterSource;
   
  +    private HTMLDescriber _htmlDescriber;
  +
       public String getApplicationId()
       {
           return _applicationId;
  @@ -362,4 +365,14 @@
       {
           _markupWriterSource = markupWriterSource;
       }
  +
  +    public HTMLDescriber getHTMLDescriber()
  +    {
  +        return _htmlDescriber;
  +    }
  +
  +    public void setHTMLDescriber(HTMLDescriber htmlDescriber)
  +    {
  +        _htmlDescriber = htmlDescriber;
  +    }
   }
  \ No newline at end of file
  
  
  
  1.13      +7 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/form/Form.java
  
  Index: Form.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/Form.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Form.java	29 Mar 2005 15:24:29 -0000	1.12
  +++ Form.java	29 Mar 2005 22:19:55 -0000	1.13
  @@ -343,10 +343,6 @@
       {
           String actionId = cycle.getNextActionId();
   
  -        // Integrate the namespace into the form name;
  -
  -        _name = getDisplayName() + actionId + getResponse().getNamespace();
  -
           boolean renderForm = !cycle.isRewinding();
           boolean rewound = cycle.isRewound(this);
   
  @@ -362,10 +358,17 @@
   
           IMarkupWriter nested = writer.getNestedWriter();
   
  +        // Note: not safe to invoke getNamespace() in Portlet world
  +        // except during a RenderRequest.
  +
  +        if (renderForm)
  +            _name = getDisplayName() + actionId + getResponse().getNamespace();
  +
           renderBody(nested, cycle);
   
           if (renderForm)
           {
  +
               ILink link = getLink(cycle, actionId);
   
               writeAttributes(writer, link);
  
  
  

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