You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mf...@apache.org on 2008/02/28 21:36:58 UTC

svn commit: r632113 - /myfaces/portlet-bridge/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java

Author: mfreedman
Date: Thu Feb 28 12:36:57 2008
New Revision: 632113

URL: http://svn.apache.org/viewvc?rev=632113&view=rev
Log:
Fixes PORTLETBRIDGE-29 : ViewLink support is now implemented properly.

Modified:
    myfaces/portlet-bridge/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java

Modified: myfaces/portlet-bridge/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java?rev=632113&r1=632112&r2=632113&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java (original)
+++ myfaces/portlet-bridge/core/trunk/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java Thu Feb 28 12:36:57 2008
@@ -411,7 +411,7 @@
   @Override
   public String encodeResourceURL(String s)
   {
-    boolean containsBackLinkMarker = false, containsViewLinkMarker = false;
+    boolean containsBackLinkMarker = false, isViewLink = false;
     if (s.indexOf(Bridge.BACK_LINK) != -1)
     {
       containsBackLinkMarker = true;
@@ -420,10 +420,7 @@
     if (!isExternalURL(s))
     {
       // Only non-external URLs can be viewLinks
-      if (s.indexOf(Bridge.VIEW_LINK) != -1)
-      {
-        containsViewLinkMarker = true;
-      }
+      isViewLink = isViewLink(s);
 
       if (!s.startsWith("/"))
       {
@@ -461,12 +458,12 @@
     }
 
     // Check for backlink and viewlink markers -- if they exist replace
-    if (containsBackLinkMarker || containsViewLinkMarker)
+    if (containsBackLinkMarker || isViewLink)
     {
-      s = replaceResourceQueryStringMarkers(s, containsBackLinkMarker, containsViewLinkMarker);
+      s = replaceResourceQueryStringMarkers(s, containsBackLinkMarker, isViewLink);
     }
 
-    if (!containsViewLinkMarker)
+    if (!isViewLink)
     {
       s = mPortletResponse.encodeURL(s);
     }
@@ -1126,39 +1123,40 @@
     queryStr = new QueryString(s.substring(queryStart + 1), "UTF8");
     path = s.substring(0, queryStart);
 
-    Enumeration<String> list = queryStr.getParameterNames();
-    while (list.hasMoreElements())
+    if (hasBackLink)
     {
-      String param = list.nextElement().toString();
-      if (hasBackLink && param.equals(Bridge.BACK_LINK))
+      Enumeration<String> list = queryStr.getParameterNames();
+      while (list.hasMoreElements())
       {
-        try
+        String param = list.nextElement().toString();
+        if (hasBackLink && param.equals(Bridge.BACK_LINK))
         {
-          // Set backlink as parameter using value as param name
-          queryStr.setParameter(queryStr.getParameter(param), 
+          try
+          {
+            // Set backlink as parameter using value as param name
+            queryStr.setParameter(queryStr.getParameter(param), 
                                 encodeActionURL(context.getApplication().getViewHandler().getActionURL(context, 
                                                                                                        context.getViewRoot().getViewId())));
-          ;
-        }
-        catch (Exception e)
-        {
-          ; // do nothing -- just ignore
-        }
-        // remove the backLink param.
-        queryStr.removeParameter(Bridge.BACK_LINK);
-      }
-      else if (hasViewLink && param.equals(Bridge.VIEW_LINK))
-      {
-        try
-        {
-          queryStr.removeParameter(Bridge.VIEW_LINK);
-        }
-        catch (Exception e)
-        {
-          ; // do nothing -- just ignore
+            ;
+          }
+          catch (Exception e)
+          {
+            ; // do nothing -- just ignore
+          }
         }
       }
     }
+    
+    // Now make sure the parameters are removed
+    try
+    {
+      queryStr.removeParameter(Bridge.BACK_LINK);
+      queryStr.removeParameter(Bridge.VIEW_LINK);
+    }
+    catch (Exception e)
+    {
+      ; // do nothing -- just ignore
+    }  
 
     // Now put the string back together
     String qs = queryStr.toString();
@@ -1171,14 +1169,7 @@
       s = path;
     }
     
-    // Now transform the URL into an actionURL if this is a ViewLink
-    if (hasViewLink)
-    {
-      return encodeActionURL(s);
-    } else
-    {
-      return s;
-    }
+    return s;
   }
 
   private void mapPathsFromViewId(String viewId, List<String> mappings)
@@ -1481,15 +1472,25 @@
 
   private boolean isDirectLink(String url)
   {
+    return isTokenLink(Bridge.DIRECT_LINK, url);
+  }
+  
+  private boolean isViewLink(String url)
+  {
+    return isTokenLink(Bridge.VIEW_LINK, url);
+  }
+  
+  private boolean isTokenLink(String token, String url)
+  {
     int queryStart = url.indexOf('?');
     QueryString queryStr = null;
-    String directLink = null;
+    String tokenParam = null;
 
     if (queryStart != -1)
     {
       queryStr = new QueryString(url.substring(queryStart + 1), "UTF8");
-      directLink = queryStr.getParameter(Bridge.DIRECT_LINK);
-      return Boolean.parseBoolean(directLink);
+      tokenParam = queryStr.getParameter(token);
+      return Boolean.parseBoolean(tokenParam);
     }
 
     return false;
@@ -1497,26 +1498,26 @@
 
   private String removeDirectLink(String url)
   {
+    return removeTokenLink(Bridge.DIRECT_LINK, url);
+  }
+  
+  private String removeTokenLink(String token, String url)
+  {
     int queryStart = url.indexOf('?');
     QueryString queryStr = null;
-    String directLink = null;
 
     if (queryStart != -1)
     {
       queryStr = new QueryString(url.substring(queryStart + 1), "UTF8");
-      directLink = queryStr.getParameter(Bridge.DIRECT_LINK);
-      if (!Boolean.parseBoolean(directLink))
+      queryStr.removeParameter(token);
+      String query = queryStr.toString();
+      if (query != null && query.length() != 0)
       {
-        queryStr.removeParameter(Bridge.DIRECT_LINK);
-        String query = queryStr.toString();
-        if (query != null && query.length() != 0)
-        {
-          url = url.substring(0, queryStart + 1) + query;
-        }
-        else
-        {
-          url = url.substring(0, queryStart);
-        }
+        url = url.substring(0, queryStart + 1) + query;
+      }
+      else
+      {
+        url = url.substring(0, queryStart);
       }
     }