OK. Thanks!

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov


On Thu, Jul 17, 2014 at 5:53 PM, Andrea Del Bene <an.delb...@gmail.com>
wrote:

> I admit I've changed a very sensible part of the code :), however after
> working with it I realized that we could reduce its complexity removing a
> couple of nesting levels "merging" them in the outer if...else block. I
> think this improve code quality and its readability. Let me explain you
> what I did. The code was:
>
>         if (bufferedResponse != null)
>         {
>             logger
>                 .warn("The Buffered response should be handled by
> BufferedResponseRequestHandler");
>
>             // if there is saved response for this URL render it
> bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
>         }
>         else
>         {
>             if (shouldRenderPageAndWriteResponse(requestCycle,
> currentUrl, targetUrl)) //
>             {
>
>                 BufferedWebResponse response = renderPage(currentUrl,
> requestCycle);
>                 if (response != null)
>                 {
> response.writeTo((WebResponse)requestCycle.getResponse());
>
>                 }
>             }
>             else
>             {
>                 if (shouldRedirectToTargetUrl(requestCycle, currentUrl,
> targetUrl))
>                 {
>                     redirectTo(targetUrl, requestCycle);
>
>
>                     // note: if we had session here we would render the
> page to buffer and then
>                     // redirect to URL generated *after* page has been
> rendered (the statelessness
>                     // may change during render). this would save one
> redirect because now we have
>                     // to render to URL generated *before* page is
> rendered, render the page, get
>                     // URL after render and if the URL is different
> (meaning page is not stateless),
>                     // save the buffer and redirect again (which is pretty
> much what the next step
>                     // does)
>                 }
>                  else
> ......etc.....
>
> now is
>
>
>         if (bufferedResponse != null)
>         {
>             logger
>                 .warn("The Buffered response should be handled by
> BufferedResponseRequestHandler");
>
>             // if there is saved response for this URL render it
> bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
>         }
>         else if (shouldRenderPageAndWriteResponse(requestCycle,
> currentUrl, targetUrl))
>         {
>
>             BufferedWebResponse response = renderPage(currentUrl,
> requestCycle);
>             if (response != null)
>             {
> response.writeTo((WebResponse)requestCycle.getResponse());
>
>             }
>         }
>         else if (shouldRedirectToTargetUrl(requestCycle, currentUrl,
> targetUrl))
>         {
>
>             redirectTo(targetUrl, requestCycle);
>
>
>             // note: if we had session here we would render the page to
> buffer and then
>             // redirect to URL generated *after* page has been rendered
> (the statelessness
>             // may change during render). this would save one redirect
> because now we have
>             // to render to URL generated *before* page is rendered,
> render the page, get
>             // URL after render and if the URL is different (meaning page
> is not stateless),
>             // save the buffer and redirect again (which is pretty much
> what the next step
>             // does)
>         }
>         else
>         {
>
> two of the 'if' statements next to an 'else' have been merged with this
> one.
>
>
>
>
> On 17/07/2014 16:26, Martin Grigorov wrote:
>
>> what is/was useless ?
>> now I am even more confused what your "beautification" did with this
>> really
>> important and fragile part of Wicket code :-)
>>
>> I'm not saying that the new code is badly formatted. I was asking whether
>> "beautification" really means "code formatting"
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>>
>> On Thu, Jul 17, 2014 at 5:10 PM, Andrea Del Bene <an.delb...@gmail.com>
>> wrote:
>>
>>  Method respond had high level of "if...else" nesting, a couple of them
>>> useless. in which way the new code doesn't respect Wicket's code format?
>>> Maybe my IDE did something wrong.
>>>
>>>   Hi Andrea,
>>>
>>>> On Wed, Jul 16, 2014 at 8:33 PM, <adelb...@apache.org> wrote:
>>>>
>>>>   Repository: wicket
>>>>
>>>>> Updated Branches:
>>>>>     refs/heads/master c24d830cd -> bb9c1044e
>>>>>
>>>>>
>>>>> Code beautifying: method WebPageRenderer.respond
>>>>>
>>>>>   What exactly "beautifying" means ?
>>>>>
>>>> It is a bit hard to see what is the actual change. It doesn't look like
>>>> applying Wicket's code format.
>>>>
>>>>
>>>>   Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>>>>
>>>>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/bb9c1044
>>>>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/bb9c1044
>>>>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/bb9c1044
>>>>>
>>>>> Branch: refs/heads/master
>>>>> Commit: bb9c1044e5f1ba8902aa69073ef9fb236802d277
>>>>> Parents: c24d830
>>>>> Author: andrea del bene <adelb...@apache.org>
>>>>> Authored: Wed Jul 16 19:33:16 2014 +0200
>>>>> Committer: andrea del bene <adelb...@apache.org>
>>>>> Committed: Wed Jul 16 19:33:16 2014 +0200
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>>    .../request/handler/render/WebPageRenderer.java | 169
>>>>> +++++++++----------
>>>>>    1 file changed, 82 insertions(+), 87 deletions(-)
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>>>>> bb9c1044/wicket-core/src/main/java/org/apache/wicket/
>>>>> request/handler/render/WebPageRenderer.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>> a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/
>>>>> WebPageRenderer.java
>>>>> b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/
>>>>> WebPageRenderer.java
>>>>> index 0b5dee4..af9dbee 100644
>>>>> ---
>>>>> a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/
>>>>> WebPageRenderer.java
>>>>> +++
>>>>> b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/
>>>>> WebPageRenderer.java
>>>>> @@ -198,99 +198,94 @@ public class WebPageRenderer extends PageRenderer
>>>>>                           // if there is saved response for this URL
>>>>> render
>>>>> it
>>>>>
>>>>> bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
>>>>>                   }
>>>>> +               else if (shouldRenderPageAndWriteRespon
>>>>> se(requestCycle,
>>>>> currentUrl, targetUrl))
>>>>> +               {
>>>>> +                       BufferedWebResponse response =
>>>>> renderPage(currentUrl, requestCycle);
>>>>> +                       if (response != null)
>>>>> +                       {
>>>>> +
>>>>> response.writeTo((WebResponse)requestCycle.getResponse());
>>>>> +                       }
>>>>> +               }
>>>>> +               else if (shouldRedirectToTargetUrl(requestCycle,
>>>>> currentUrl, targetUrl))
>>>>> +               {
>>>>> +
>>>>> +                       redirectTo(targetUrl, requestCycle);
>>>>> +
>>>>> +                       // note: if we had session here we would render
>>>>> the page to buffer and then
>>>>> +                       // redirect to URL generated *after* page has
>>>>> been
>>>>> rendered (the statelessness
>>>>> +                       // may change during render). this would save
>>>>> one
>>>>> redirect because now we have
>>>>> +                       // to render to URL generated *before* page is
>>>>> rendered, render the page, get
>>>>> +                       // URL after render and if the URL is different
>>>>> (meaning page is not stateless),
>>>>> +                       // save the buffer and redirect again (which is
>>>>> pretty much what the next step
>>>>> +                       // does)
>>>>> +               }
>>>>>                   else
>>>>>                   {
>>>>> -                       if (shouldRenderPageAndWriteRespon
>>>>> se(requestCycle,
>>>>> currentUrl, targetUrl)) //
>>>>> +                       if (isRedirectToBuffer() == false &&
>>>>> logger.isDebugEnabled())
>>>>> +                       {
>>>>> +                               String details = String
>>>>> +                                       .format(
>>>>> +                                               "redirect strategy:
>>>>> '%s',
>>>>> isAjax: '%s', redirect policy: '%s', "
>>>>> +                                                       + "current url:
>>>>> '%s', target url: '%s', is new: '%s', is stateless: '%s', is temporary:
>>>>> '%s'",
>>>>> +
>>>>> Application.get().getRequestCycleSettings().getRenderStrategy(),
>>>>> +                                               isAjax(requestCycle),
>>>>> getRedirectPolicy(), currentUrl, targetUrl,
>>>>> +                                               isNewPageInstance(),
>>>>> isPageStateless(), isSessionTemporary());
>>>>> +                               logger
>>>>> +                                       .debug("Falling back to
>>>>> Redirect_To_Buffer render strategy because none of the conditions "
>>>>> +                                               + "matched. Details: "
>>>>> +
>>>>> details);
>>>>> +                       }
>>>>> +
>>>>> +                       // force creation of possible stateful page to
>>>>> get
>>>>> the final target url
>>>>> +                       getPage();
>>>>> +
>>>>> +                       Url beforeRenderUrl =
>>>>> requestCycle.mapUrlFor(getRenderPageRequestHandler());
>>>>> +
>>>>> +                       // redirect to buffer
>>>>> +                       BufferedWebResponse response =
>>>>> renderPage(beforeRenderUrl, requestCycle);
>>>>> +
>>>>> +                       if (response == null)
>>>>> +                       {
>>>>> +                               return;
>>>>> +                       }
>>>>> +
>>>>> +                       // the url might have changed after page has
>>>>> been
>>>>> rendered (e.g. the
>>>>> +                       // stateless flag might have changed because
>>>>> stateful components
>>>>> +                       // were added)
>>>>> +                       final Url afterRenderUrl = requestCycle
>>>>> +                               .mapUrlFor(
>>>>> getRenderPageRequestHandler());
>>>>> +
>>>>> +                       if
>>>>> (beforeRenderUrl.getSegments().equals(afterRenderUrl.getSegments()) ==
>>>>> false)
>>>>>                           {
>>>>> -                               BufferedWebResponse response =
>>>>> renderPage(currentUrl, requestCycle);
>>>>> -                               if (response != null)
>>>>> -                               {
>>>>> -
>>>>> response.writeTo((WebResponse)requestCycle.getResponse());
>>>>> -                               }
>>>>> +                               // the amount of segments is different
>>>>> -
>>>>> generated relative URLs
>>>>> +                               // will not work, we need to rerender
>>>>> the
>>>>> page. This can happen
>>>>> +                               // with IRequestHandlers that produce
>>>>> different URLs with
>>>>> +                               // different amount of segments for
>>>>> stateless and stateful pages
>>>>> +                               response = renderPage(afterRenderUrl,
>>>>> requestCycle);
>>>>> +                       }
>>>>> +
>>>>> +                       if (currentUrl.equals(afterRenderUrl))
>>>>> +                       {
>>>>> +                               // no need to redirect when both urls
>>>>> are
>>>>> exactly the same
>>>>> +
>>>>> response.writeTo((WebResponse)requestCycle.getResponse());
>>>>> +                       }
>>>>> +                       // if page is still stateless after render
>>>>> +                       else if (isPageStateless() &&
>>>>> !enableRedirectForStatelessPage())
>>>>> +                       {
>>>>> +                               // we don't want the redirect to happen
>>>>> for stateless page
>>>>> +                               // example:
>>>>> +                               // when a normal mounted stateful page
>>>>> is
>>>>> hit at /mount/point
>>>>> +                               // wicket renders the page to buffer
>>>>> and
>>>>> redirects to /mount/point?12
>>>>> +                               // but for stateless page the redirect
>>>>> is
>>>>> not necessary
>>>>> +                               // also for listener interface on
>>>>> stateful
>>>>> page we want to redirect
>>>>> +                               // after the listener is invoked, but
>>>>> on
>>>>> stateless page the user
>>>>> +                               // must ask for redirect explicitly
>>>>> +
>>>>> response.writeTo((WebResponse)requestCycle.getResponse());
>>>>>                           }
>>>>>                           else
>>>>>                           {
>>>>> -                               if
>>>>> (shouldRedirectToTargetUrl(requestCycle, currentUrl, targetUrl))
>>>>> -                               {
>>>>> -                                       redirectTo(targetUrl,
>>>>> requestCycle);
>>>>> -
>>>>> -                                       // note: if we had session here
>>>>> we
>>>>> would render the page to buffer and then
>>>>> -                                       // redirect to URL generated
>>>>> *after* page has been rendered (the statelessness
>>>>> -                                       // may change during render).
>>>>> this
>>>>> would save one redirect because now we have
>>>>> -                                       // to render to URL generated
>>>>> *before* page is rendered, render the page, get
>>>>> -                                       // URL after render and if the
>>>>> URL
>>>>> is different (meaning page is not stateless),
>>>>> -                                       // save the buffer and redirect
>>>>> again (which is pretty much what the next step
>>>>> -                                       // does)
>>>>> -                               }
>>>>> -                               else
>>>>> -                               {
>>>>> -                                       if (isRedirectToBuffer() ==
>>>>> false
>>>>> && logger.isDebugEnabled())
>>>>> -                                       {
>>>>> -                                               String details = String
>>>>> -                                                       .format(
>>>>> -
>>>>> "redirect
>>>>> strategy: '%s', isAjax: '%s', redirect policy: '%s', "
>>>>> -
>>>>>   +
>>>>> "current url: '%s', target url: '%s', is new: '%s', is stateless: '%s',
>>>>> is
>>>>> temporary: '%s'",
>>>>> -
>>>>> Application.get().getRequestCycleSettings().getRenderStrategy(),
>>>>> -
>>>>> isAjax(requestCycle), getRedirectPolicy(), currentUrl, targetUrl,
>>>>> -
>>>>> isNewPageInstance(), isPageStateless(), isSessionTemporary());
>>>>> -                                               logger
>>>>> -                                                       .debug("Falling
>>>>> back to Redirect_To_Buffer render strategy because none of the
>>>>> conditions "
>>>>> -                                                               +
>>>>> "matched. Details: " + details);
>>>>> -                                       }
>>>>> -
>>>>> -                                       // force creation of possible
>>>>> stateful page to get the final target url
>>>>> -                                       getPage();
>>>>> -
>>>>> -                                       Url beforeRenderUrl =
>>>>> requestCycle.mapUrlFor(getRenderPageRequestHandler());
>>>>> -
>>>>> -                                       // redirect to buffer
>>>>> -                                       BufferedWebResponse response =
>>>>> renderPage(beforeRenderUrl, requestCycle);
>>>>> -
>>>>> -                                       if (response == null)
>>>>> -                                       {
>>>>> -                                               return;
>>>>> -                                       }
>>>>> -
>>>>> -                                       // the url might have changed
>>>>> after page has been rendered (e.g. the
>>>>> -                                       // stateless flag might have
>>>>> changed because stateful components
>>>>> -                                       // were added)
>>>>> -                                       final Url afterRenderUrl =
>>>>> requestCycle
>>>>> -
>>>>> .mapUrlFor(getRenderPageRequestHandler());
>>>>> -
>>>>> -                                       if
>>>>> (beforeRenderUrl.getSegments().equals(afterRenderUrl.getSegments()) ==
>>>>> false)
>>>>> -                                       {
>>>>> -                                               // the amount of
>>>>> segments
>>>>> is different - generated relative URLs
>>>>> -                                               // will not work, we
>>>>> need
>>>>> to rerender the page. This can happen
>>>>> -                                               // with
>>>>> IRequestHandlers
>>>>> that produce different URLs with
>>>>> -                                               // different amount of
>>>>> segments for stateless and stateful pages
>>>>> -                                               response =
>>>>> renderPage(afterRenderUrl, requestCycle);
>>>>> -                                       }
>>>>> -
>>>>> -                                       if
>>>>> (currentUrl.equals(afterRenderUrl))
>>>>> -                                       {
>>>>> -                                               // no need to redirect
>>>>> when both urls are exactly the same
>>>>> -
>>>>> response.writeTo((WebResponse)requestCycle.getResponse());
>>>>> -                                       }
>>>>> -                                       // if page is still stateless
>>>>> after render
>>>>> -                                       else if (isPageStateless() &&
>>>>> !enableRedirectForStatelessPage())
>>>>> -                                       {
>>>>> -                                               // we don't want the
>>>>> redirect to happen for stateless page
>>>>> -                                               // example:
>>>>> -                                               // when a normal
>>>>> mounted
>>>>> stateful page is hit at /mount/point
>>>>> -                                               // wicket renders the
>>>>> page
>>>>> to buffer and redirects to /mount/point?12
>>>>> -                                               // but for stateless
>>>>> page
>>>>> the redirect is not necessary
>>>>> -                                               // also for listener
>>>>> interface on stateful page we want to redirect
>>>>> -                                               // after the listener
>>>>> is
>>>>> invoked, but on stateless page the user
>>>>> -                                               // must ask for
>>>>> redirect
>>>>> explicitly
>>>>> -
>>>>> response.writeTo((WebResponse)requestCycle.getResponse());
>>>>> -                                       }
>>>>> -                                       else
>>>>> -                                       {
>>>>> -
>>>>> storeBufferedResponse(afterRenderUrl, response);
>>>>> -
>>>>> -
>>>>> redirectTo(afterRenderUrl,
>>>>> requestCycle);
>>>>> -                                       }
>>>>> -                               }
>>>>> +                               storeBufferedResponse(afterRenderUrl,
>>>>> response);
>>>>> +
>>>>> +                               redirectTo(afterRenderUrl,
>>>>> requestCycle);
>>>>>                           }
>>>>>                   }
>>>>>           }
>>>>>
>>>>>
>>>>>
>>>>>
>

Reply via email to