Author: jdonnerstag
Date: Sun Oct 18 08:32:15 2009
New Revision: 826374

URL: http://svn.apache.org/viewvc?rev=826374&view=rev
Log:
making progress on MarkupFragment: you only need to call Component.render() now 
irrespective of Page or AJAX or ... simply call render(). And it takes care of 
prepareForRender() and afterRender() as well.

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Sun Oct 
18 08:32:15 2009
@@ -2129,21 +2129,51 @@
        }
 
        /**
-        * Performs a render of this component as part of a Page level render 
process.
-        * <p>
-        * For component level re-render (e.g. AJAX) please call {...@link 
#renderComponent()}. Though
-        * render() does seem to work, it will fail for panel children.
+        * Render the Component.
         */
        public final void render()
        {
-               // Allow currently invisible components to be re-rendered as 
well
-               MarkupStream markupStream = null;
-               if (getParent() != null)
+               RuntimeException exception = null;
+
+               try
+               {
+                       // Invoke prepareForRender only if this is the root 
component to be rendered
+                       MarkupContainer parent = getParent();
+                       if ((parent == null) || (parent.getFlag(FLAG_RENDERING) 
== false))
+                       {
+                               prepareForRender();
+                       }
+
+                       // Do the render
+                       render(null);
+               }
+               catch (final RuntimeException ex)
+               {
+                       // Remember it as the originating exception
+                       exception = ex;
+               }
+               finally
                {
-                       markupStream = findMarkupStream();
+                       try
+                       {
+                               // Cleanup
+                               afterRender();
+                       }
+                       catch (RuntimeException ex2)
+                       {
+                               // Only remember it if not already another 
exception happened
+                               if (exception == null)
+                               {
+                                       exception = ex2;
+                               }
+                       }
                }
 
-               render(markupStream);
+               // Re-throw if needed
+               if (exception != null)
+               {
+                       throw exception;
+               }
        }
 
        /**
@@ -2156,23 +2186,29 @@
         */
        public final void render(MarkupStream markupStream)
        {
+               // Remove/Cleanup when migrating to MarkupFragments. Only 
needed as long as rendering is
+               // based on MarkupStream
                if (getApplication().getMarkupFragmentEnabled())
                {
                        // Step 1: Make sure there is a markup available for 
the Component
                        IMarkupFragment markup = getMarkup();
                        if (!(this instanceof Page) && (markup == null))
                        {
-                               throw new IllegalArgumentException("jdo: Markup 
not found: " + toString());
+                               throw new 
IllegalArgumentException("MarkupFragment not found: " + toString() +
+                                       ". Please see 
Application.getMarkupFragmentEnabled() as well.");
                        }
 
                        // Step 2: A markup stream based on the markup should 
yield the same result.
-                       if (markupStream != null)
+                       if ((markupStream != null) || !(this instanceof Page))
                        {
                                MarkupStream ms = new MarkupStream(markup);
 
                                // We need to skip the component in the 
original markup stream to avoid
                                // exceptions later on.
-                               markupStream.skipComponent();
+                               if (markupStream != null)
+                               {
+                                       markupStream.skipComponent();
+                               }
 
                                // We want to use the new markup stream
                                markupStream = ms;
@@ -2289,48 +2325,6 @@
        }
 
        /**
-        * Page.renderPage() is used to render a whole page. With AJAX however 
it must be possible to
-        * render any one component contained in a page. That is what this 
method is for.
-        * <p>
-        * Note: it is not necessary that the page has previously been 
rendered. But the component must
-        * have been added (directly or indirectly) to a container with an 
associated markup file (Page,
-        * Panel or Border).
-        */
-       public final void renderComponent()
-       {
-               // If this Component is a Page
-               if (this instanceof Page)
-               {
-                       // Render as Page, with all the special logic that 
entails
-                       ((Page)this).renderPage();
-               }
-               else
-               {
-                       // Save the parent's markup stream to re-assign it at 
the end
-                       MarkupContainer parent = getParent();
-                       MarkupStream originalMarkupStream = 
parent.getMarkupStream();
-                       MarkupStream markupStream = locateMarkupStream();
-
-                       try
-                       {
-                               // Make sure that while rendering the markup 
stream is found
-                               parent.setMarkupStream(markupStream);
-
-                               prepareForRender();
-
-                               // Render the component and all its children
-                               render(markupStream);
-                       }
-                       finally
-                       {
-                               // Make sure the original markup stream is back 
in place
-                               parent.setMarkupStream(originalMarkupStream);
-                               afterRender();
-                       }
-               }
-       }
-
-       /**
         * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.
         * <p>
         * Renders the component at the current position in the given markup 
stream. The method
@@ -2342,6 +2336,12 @@
         */
        public final void renderComponent(final MarkupStream markupStream)
        {
+               if (markupStream == null)
+               {
+                       throw new NullPointerException(
+                               "Parameter 'markupStream' must not be null. 
Component: " + toString());
+               }
+
                markupIndex = markupStream.getCurrentIndex();
 
                // Get mutable copy of next tag

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
Sun Oct 18 08:32:15 2009
@@ -239,7 +239,7 @@
         *            stream to be used to render the component.
         * @return True, if component has been added
         */
-       public final boolean autoAdd(final Component component, final 
MarkupStream markupStream)
+       public final boolean autoAdd(final Component component, MarkupStream 
markupStream)
        {
                if (component == null)
                {
@@ -260,12 +260,14 @@
                {
                        if (markupStream == null)
                        {
-                               component.render();
-                       }
-                       else
-                       {
-                               component.render(markupStream);
+                               // Allow currently invisible components to be 
re-rendered as well
+                               if (component.getParent() != null)
+                               {
+                                       markupStream = 
component.findMarkupStream();
+                               }
                        }
+
+                       component.render(markupStream);
                }
                finally
                {
@@ -1561,6 +1563,11 @@
        @Override
        protected final MarkupStream findMarkupStream()
        {
+               if (getApplication().getMarkupFragmentEnabled())
+               {
+                       return new MarkupStream(getMarkup());
+               }
+
                // Start here
                MarkupContainer c = this;
 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java Sun Oct 18 
08:32:15 2009
@@ -690,98 +690,6 @@
        }
 
        /**
-        * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.
-        */
-       public final void renderPage()
-       {
-               // first try to check if the page can be rendered:
-               if (!isActionAuthorized(RENDER))
-               {
-                       if (log.isDebugEnabled())
-                       {
-                               log.debug("Page not allowed to render: " + 
this);
-                       }
-                       throw new UnauthorizedActionException(this, 
Component.RENDER);
-               }
-
-               // Make sure it is really empty
-               renderedComponents = null;
-
-               // if the page is stateless, reset the flag so that it is 
tested again
-               if (Boolean.TRUE.equals(stateless))
-               {
-                       stateless = null;
-               }
-
-               try
-               {
-                       prepareForRender();
-               }
-               catch (RuntimeException e)
-               {
-                       // if an exception is thrown then we have to call after 
render
-                       // else the components could be in a wrong state 
(rendering)
-                       try
-                       {
-                               afterRender();
-                       }
-                       catch (RuntimeException e2)
-                       {
-                               // ignore this one could be a result off.
-                       }
-                       throw e;
-               }
-
-
-               // Handle request by rendering page
-               try
-               {
-                       render(null);
-               }
-               finally
-               {
-                       afterRender();
-               }
-
-               // Check rendering if it happened fully
-               checkRendering(this);
-
-               // clean up debug meta data if component check is on
-               if (Application.get().getDebugSettings().getComponentUseCheck())
-               {
-                       visitChildren(new IVisitor<Component>()
-                       {
-                               public Object component(Component component)
-                               {
-                                       
component.setMetaData(Component.CONSTRUCTED_AT_KEY, null);
-                                       
component.setMetaData(Component.ADDED_AT_KEY, null);
-                                       return CONTINUE_TRAVERSAL;
-                               }
-                       });
-               }
-
-               if (!isPageStateless())
-               {
-                       // trigger creation of the actual session in case it 
was deferred
-                       
Session.get().getSessionStore().getSessionId(RequestCycle.get().getRequest(), 
true);
-                       // Add/touch the response page in the session (its 
pagemap).
-                       getSession().touch(this);
-               }
-
-               if 
(getApplication().getDebugSettings().isOutputMarkupContainerClassName())
-               {
-                       Class<?> klass = getClass();
-                       while (klass.isAnonymousClass())
-                       {
-                               klass = klass.getSuperclass();
-                       }
-                       getResponse().write("<!-- Page Class ");
-                       getResponse().write(klass.getName());
-                       getResponse().write(" -->\n");
-               }
-       }
-
-       /**
         * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.
         * 
         * Set the id for this Page. This method is called by PageMap when a 
Page is added because the
@@ -1248,7 +1156,27 @@
        @Override
        protected void onBeforeRender()
        {
+               // first try to check if the page can be rendered:
+               if (!isActionAuthorized(RENDER))
+               {
+                       if (log.isDebugEnabled())
+                       {
+                               log.debug("Page not allowed to render: " + 
this);
+                       }
+                       throw new UnauthorizedActionException(this, 
Component.RENDER);
+               }
+
+               // Make sure it is really empty
+               renderedComponents = null;
+
+               // if the page is stateless, reset the flag so that it is 
tested again
+               if (Boolean.TRUE.equals(stateless))
+               {
+                       stateless = null;
+               }
+
                super.onBeforeRender();
+
                // If any of the components on page is not stateless, we need 
to bind the session
                // before we start rendering components, as then jsessionid 
won't be appended
                // for links rendered before first stateful component
@@ -1259,6 +1187,53 @@
        }
 
        /**
+        * @see org.apache.wicket.Component#onAfterRender()
+        */
+       @Override
+       protected void onAfterRender()
+       {
+               super.onAfterRender();
+
+               // Check rendering if it happened fully
+               checkRendering(this);
+
+               // clean up debug meta data if component check is on
+               if (Application.get().getDebugSettings().getComponentUseCheck())
+               {
+                       visitChildren(new IVisitor<Component>()
+                       {
+                               public Object component(Component component)
+                               {
+                                       
component.setMetaData(Component.CONSTRUCTED_AT_KEY, null);
+                                       
component.setMetaData(Component.ADDED_AT_KEY, null);
+                                       return CONTINUE_TRAVERSAL;
+                               }
+                       });
+               }
+
+               if (!isPageStateless())
+               {
+                       // trigger creation of the actual session in case it 
was deferred
+                       
Session.get().getSessionStore().getSessionId(RequestCycle.get().getRequest(), 
true);
+
+                       // Add/touch the response page in the session (its 
pagemap).
+                       getSession().touch(this);
+               }
+
+               if 
(getApplication().getDebugSettings().isOutputMarkupContainerClassName())
+               {
+                       Class<?> klass = getClass();
+                       while (klass.isAnonymousClass())
+                       {
+                               klass = klass.getSuperclass();
+                       }
+                       getResponse().write("<!-- Page Class ");
+                       getResponse().write(klass.getName());
+                       getResponse().write(" -->\n");
+               }
+       }
+
+       /**
         * @see org.apache.wicket.Component#onDetach()
         */
        @Override

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java 
(original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java 
Sun Oct 18 08:32:15 2009
@@ -812,7 +812,7 @@
 
                try
                {
-                       component.renderComponent();
+                       component.render();
                }
                catch (RuntimeException e)
                {

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycle.java
 Sun Oct 18 08:32:15 2009
@@ -163,7 +163,7 @@
                                setResponse(redirectResponse);
 
                                // render the page into the buffer
-                               page.renderPage();
+                               page.render();
 
                                // re-assign the original response
                                setResponse(currentResponse);

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkableListenerInterfaceRequestTarget.java
 Sun Oct 18 08:32:15 2009
@@ -174,7 +174,7 @@
                else
                {
                        // else render the page directly
-                       page.renderPage();
+                       page.render();
                }
        }
 

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/BookmarkablePageRequestTarget.java
 Sun Oct 18 08:32:15 2009
@@ -259,7 +259,7 @@
                        else
                        {
                                // Let the page render itself
-                               getPage(requestCycle).renderPage();
+                               getPage(requestCycle).render();
                        }
                }
        }

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/ComponentRequestTarget.java
 Sun Oct 18 08:32:15 2009
@@ -72,7 +72,7 @@
                        else
                        {
                                // Render the component
-                               component.renderComponent();
+                               component.render();
                        }
                }
                finally

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
 Sun Oct 18 08:32:15 2009
@@ -88,7 +88,7 @@
                else
                {
                        // Let page render itself
-                       page.renderPage();
+                       page.render();
                }
        }
 

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java?rev=826374&r1=826373&r2=826374&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/target/component/PageRequestTarget.java
 Sun Oct 18 08:32:15 2009
@@ -60,7 +60,7 @@
                else
                {
                        // Let page render itself
-                       page.renderPage();
+                       page.render();
                }
        }
 


Reply via email to