Author: ate
Date: Tue Sep  4 07:47:41 2007
New Revision: 572694

URL: http://svn.apache.org/viewvc?rev=572694&view=rev
Log:
WICKET-926: New Wicket Portlet support: Support for detached/popup pages
See: https://issues.apache.org/jira/browse/WICKET-926
- Implementing a somewhat "hacky" solution which involves setting a temporary 
flag in RequestCycle to indicate the next urlFor call is targetted at a popup 
page
- Hooking this solution in the Link and ModalWindow as example
  There are maybe more locations in the codebase requesting page urls for popup 
usage, but this should already cover most cases.

Modified:
    
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
    
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java

Modified: 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java?rev=572694&r1=572693&r2=572694&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
 (original)
+++ 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/ModalWindow.java
 Tue Sep  4 07:47:41 2007
@@ -927,6 +927,7 @@
                        {
                                throw new WicketRuntimeException("Error 
creating page for modal dialog.");
                        }
+                       RequestCycle.get().setNextUrlForNewWindow();
                        buffer.append("settings.src=\"" + 
RequestCycle.get().urlFor(page) + "\";\n");
 
                        if (getPageMapName() != null)

Modified: 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?rev=572694&r1=572693&r2=572694&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
 (original)
+++ 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
 Tue Sep  4 07:47:41 2007
@@ -267,6 +267,13 @@
 
        /** The current response. */
        protected Response response;
+       
+       /**
+        * Boolean if the next urlFor call is intended for a new window 
(ModalWindow, popup, tab).
+        * This temporary flag is specifically needed for portlet-support as 
then such a page needs a special target (Resource) url.
+        * After each urlFor call, this flag is reset to false.
+        */
+       private transient boolean nextUrlForNewWindow;
 
        /**
         * Constructor. This instance will be set as the current one for this
@@ -687,6 +694,30 @@
        }
 
        /**
+        * @return true if the page is intended to be displayed in a new window 
(ModalWindow, popup, tab).
+        */
+       public final boolean isNextUrlForNewWindow()
+       {
+               return nextUrlForNewWindow;
+       }
+       
+       /**
+        * Indicate if the next urlFor call is intended for a new window 
(ModalWindow, popup, tab).
+        * This temporary flag is specifically needed for portlet-support as 
then such a page needs a special target (Resource) url.
+        * After each urlFor call, this flag is reset to false.
+        */
+       public final void setNextUrlForNewWindow()
+       {
+               nextUrlForNewWindow = true;
+       }
+       
+       private final CharSequence resetNextUrlForNewWindow(CharSequence url)
+       {
+               nextUrlForNewWindow = false;
+               return url;
+       }
+       
+       /**
         * Returns a bookmarkable URL that references a given page class using a
         * given set of page parameters. Since the URL which is returned 
contains
         * all information necessary to instantiate and render the page, it can 
be
@@ -745,7 +776,7 @@
                                listener, params);
                final IRequestCodingStrategy requestCodingStrategy = 
getProcessor()
                                .getRequestCodingStrategy();
-               return requestCodingStrategy.encode(this, target);
+               return 
resetNextUrlForNewWindow(requestCodingStrategy.encode(this, target));
        }
 
        /**
@@ -788,7 +819,7 @@
                }
                final IRequestCodingStrategy requestCodingStrategy = 
getProcessor()
                                .getRequestCodingStrategy();
-               return requestCodingStrategy.encode(this, target);
+               return 
resetNextUrlForNewWindow(requestCodingStrategy.encode(this, target));
        }
 
        /**
@@ -814,7 +845,7 @@
                                : pageMap.getName(), pageClass, parameters);
                final IRequestCodingStrategy requestCodingStrategy = 
getProcessor()
                                .getRequestCodingStrategy();
-               return requestCodingStrategy.encode(this, target);
+               return 
resetNextUrlForNewWindow(requestCodingStrategy.encode(this, target));
        }
 
        /**
@@ -827,7 +858,7 @@
        public final CharSequence urlFor(final IRequestTarget requestTarget)
        {
                IRequestCodingStrategy requestCodingStrategy = 
getProcessor().getRequestCodingStrategy();
-               return requestCodingStrategy.encode(this, requestTarget);
+               return 
resetNextUrlForNewWindow(requestCodingStrategy.encode(this, requestTarget));
        }
 
        /**
@@ -877,7 +908,7 @@
                requestParameters.setParameters(parameters);
                CharSequence url = 
getProcessor().getRequestCodingStrategy().encode(this,
                                new 
SharedResourceRequestTarget(requestParameters));
-               return url;
+               return resetNextUrlForNewWindow(url);
        }
 
        /**

Modified: 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java?rev=572694&r1=572693&r2=572694&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java
 (original)
+++ 
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/link/Link.java
 Tue Sep  4 07:47:41 2007
@@ -402,6 +402,10 @@
                // Default handling for tag
                super.onComponentTag(tag);
 
+               if (popupSettings != null)
+               {
+                       RequestCycle.get().setNextUrlForNewWindow();
+               }
                // Set href to link to this link's linkClicked method
                CharSequence url = getURL();
 


Reply via email to