Author: fpunt
Date: 2010-03-02 17:18:00 +0100 (Tue, 02 Mar 2010)
New Revision: 41238

Modified:
   
CMSContainer/trunk/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets/RelatedContentPortlet.java
Log:
[CMSC-1651] Relatedcontentportlet now works with renderurl

Modified: 
CMSContainer/trunk/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets/RelatedContentPortlet.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets/RelatedContentPortlet.java
        2010-03-02 16:17:49 UTC (rev 41237)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets/RelatedContentPortlet.java
        2010-03-02 16:18:00 UTC (rev 41238)
@@ -32,6 +32,11 @@
     */
    private static final String CONTENTURL_ELEMENTID_PATTERN = 
"/content/([0-9]+)";
 
+   /**
+    * This regex pattern is used to match the elementId from a renderURL.
+    */
+   private static final String RENDERURL_ELEMENTID_PATTERN = "_([0-9]+)";
+   
    @Override
    protected void saveParameters(ActionRequest request, String portletId) {
       setPortletParameter(portletId, RELATED_PAGE, 
request.getParameter(RELATED_PAGE));
@@ -71,9 +76,11 @@
     * tries to retrieve the element in the following order:
     *
     * <ol>
-    * <li>From contentelement node parameter of the specified portlet</li>
     * <li>From a given contentURL (assumes that the elementId we want is
     * exactly that elementId)</li>
+    * <li>From a given renderURL (assumes that the elementId we want is
+    * exactly that elementId)</li>
+    * <li>From contentelement node parameter of the specified portlet</li>
     * </ol>
     *
     * The first one to return a non <code>null</code> value will be returned.
@@ -88,17 +95,18 @@
     *         otherwise.
     */
    protected String getRelatedElementId(RenderRequest request, String 
relatedPage, String relatedWindow) {
-      String elementId = null;
-      if (StringUtils.isNotEmpty(relatedPage) && 
StringUtils.isNotEmpty(relatedWindow)) {
-         elementId = getElementIdFromScreen(request, relatedPage, 
relatedWindow);
-         if (StringUtils.isEmpty(elementId)) {
-            elementId = getElementIdFromContentURL(request);
-         }
-      }
-
+      String elementId = getElementIdFromContentURL(request);
+         if (StringUtils.isEmpty(elementId)) {
+                 elementId = getElementIdFromRenderURL(request);
+                 if (StringUtils.isEmpty(elementId)) {
+                         if (StringUtils.isNotEmpty(relatedPage) && 
StringUtils.isNotEmpty(relatedWindow)) {
+                                 elementId = getElementIdFromScreen(request, 
relatedPage, relatedWindow);
+                 }
+             }
+         }
       return elementId;
    }
-
+   
    private String getElementIdFromScreen(RenderRequest req, String 
relatedPage, String relatedWindow) {
       Integer pageId = Integer.valueOf(relatedPage);
       NavigationItem item = SiteManagement.getNavigationItem(pageId);
@@ -123,6 +131,15 @@
       return null;
    }
 
+   private String getElementIdFromRenderURL(RenderRequest req) {
+      String requestURL = getServletRequest(req).getRequestURL().toString();
+      Pattern pattern = Pattern.compile(RENDERURL_ELEMENTID_PATTERN);
+      Matcher matcher = pattern.matcher(requestURL);
+      if (matcher.find() && matcher.groupCount() >= 1) {
+         return matcher.group(1);
+      }
+      return null;
+   }
    private HttpServletRequest getServletRequest(RenderRequest req) {
       return (HttpServletRequest) ((PortletRequestImpl) req).getRequest();
    }

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to