Update of 
/var/cvs/contributions/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets
In directory 
james.mmbase.org:/tmp/cvs-serv3677/cmsc/portlets/src/java/com/finalist/cmsc/portlets

Modified Files:
        RelatedContentPortlet.java 
Log Message:
CMSC-1167 Add "Click to page" option to the RelatedContentPortlet


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets
See also: http://www.mmbase.org/jira/browse/CMSC-1167


Index: RelatedContentPortlet.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets/RelatedContentPortlet.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- RelatedContentPortlet.java  12 Jun 2008 15:38:15 -0000      1.9
+++ RelatedContentPortlet.java  29 Apr 2009 07:48:14 -0000      1.10
@@ -8,6 +8,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.portlet.ActionRequest;
 import javax.portlet.PortletException;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
@@ -19,20 +20,29 @@
 import com.finalist.cmsc.beans.om.NavigationItem;
 import com.finalist.cmsc.beans.om.Page;
 import com.finalist.cmsc.beans.om.Portlet;
-import com.finalist.cmsc.portalImpl.PortalConstants;
 import com.finalist.cmsc.services.sitemanagement.SiteManagement;
 
 public class RelatedContentPortlet extends AbstractContentPortlet {
 
+   protected static final String RELATED_PAGE = "relatedPage";
+   protected static final String RELATED_WINDOW = "relatedWindow";
+
    /**
     * This regex pattern is used to match the elementId from a contentURL.
     */
    private static final String CONTENTURL_ELEMENTID_PATTERN = 
"/content/([0-9]+)";
 
    @Override
+   protected void saveParameters(ActionRequest request, String portletId) {
+      setPortletParameter(portletId, RELATED_PAGE, 
request.getParameter(RELATED_PAGE));
+      setPortletParameter(portletId, RELATED_WINDOW, 
request.getParameter(RELATED_WINDOW));
+   }
+
+   @Override
    protected void doView(RenderRequest req, RenderResponse res) throws 
PortletException, IOException {
-      String window = req.getPreferences().getValue(WINDOW, null);
-      String elementId = getRelatedElementId(req, window);
+      String relatedPage = req.getPreferences().getValue(RELATED_PAGE, null);
+      String relatedWindow = req.getPreferences().getValue(RELATED_WINDOW, 
null);
+      String elementId = getRelatedElementId(req, relatedPage, relatedWindow);
 
       if (StringUtils.isNotEmpty(elementId)) {
          setAttribute(req, ELEMENT_ID, elementId);
@@ -42,14 +52,16 @@
 
    @Override
    protected void doEditDefaults(RenderRequest req, RenderResponse res) throws 
IOException, PortletException {
-      Integer pageid = getCurrentPageId(req);
+      String relatedPage = req.getPreferences().getValue(RELATED_PAGE, null);
+      if (StringUtils.isNotEmpty(relatedPage)) {
+         Integer pageid = Integer.valueOf(relatedPage);
       String pagepath = SiteManagement.getPath(pageid, true);
-
       if (pagepath != null) {
-         Set<String> positions = 
SiteManagement.getPagePositions(pageid.toString());
+            Set<String> positions = 
SiteManagement.getPagePositions(relatedPage);
          List<String> orderedPositions = new ArrayList<String>(positions);
          Collections.sort(orderedPositions);
-         setAttribute(req, "pagepositions", new 
ArrayList<String>(orderedPositions));
+            setAttribute(req, "relatedpagepositions", new 
ArrayList<String>(orderedPositions));
+         }
       }
       super.doEditDefaults(req, res);
    }
@@ -59,7 +71,6 @@
     * tries to retrieve the element in the following order:
     *
     * <ol>
-    * <li>From the parameter of the current request</li>
     * <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>
@@ -69,48 +80,31 @@
     *
     * @param request
     *           the render request
-    * @param window
-    *           the specified window (might be <code>null</code>)
+    *...@param relatedPage
+    *           the related page (might be <code>null</code>)
+    * @param relatedWindow
+    *           the related window (might be <code>null</code>)
     * @return elementId if an elementId could be found, <code>null</code>
     *         otherwise.
     */
-   protected String getRelatedElementId(RenderRequest request, String window) {
+   protected String getRelatedElementId(RenderRequest request, String 
relatedPage, String relatedWindow) {
       String elementId = null;
-      if (StringUtils.isNotEmpty(window)) {
-         elementId = getElementIdFromRequestParameters(request, window);
-         if (StringUtils.isEmpty(elementId)) {
-            elementId = getElementIdFromScreen(request, window);
+      if (StringUtils.isNotEmpty(relatedPage) && 
StringUtils.isNotEmpty(relatedWindow)) {
+         elementId = getElementIdFromScreen(request, relatedPage, 
relatedWindow);
             if (StringUtils.isEmpty(elementId)) {
                elementId = getElementIdFromContentURL(request);
             }
          }
-      }
-
-      return elementId;
-   }
 
-   private String getElementIdFromRequestParameters(RenderRequest req, String 
window) {
-      String requestURL = getServletRequest(req).getRequestURL().toString();
-      String paramName = "/_rp_" + window + "_elementId/1_";
-      int startIndex = requestURL.indexOf(paramName);
-      if (startIndex != -1) {
-         String elementId = requestURL.substring(startIndex + 
paramName.length());
-         int endIndex = elementId.indexOf("/");
-         if (endIndex != -1) {
-            elementId = elementId.substring(0, endIndex);
-         }
          return elementId;
       }
 
-      return null;
-   }
-
-   private String getElementIdFromScreen(RenderRequest req, String window) {
-      Integer pageId = getCurrentPageId(req);
+   private String getElementIdFromScreen(RenderRequest req, String 
relatedPage, String relatedWindow) {
+      Integer pageId = Integer.valueOf(relatedPage);
       NavigationItem item = SiteManagement.getNavigationItem(pageId);
       if (item instanceof Page) {
          Page page = (Page) item;
-         int portletId = page.getPortlet(window);
+         int portletId = page.getPortlet(relatedWindow);
          Portlet portlet = SiteManagement.getPortlet(portletId);
          if (portlet != null) {
             return portlet.getParameterValue(CONTENTELEMENT);
@@ -129,11 +123,6 @@
       return null;
    }
 
-   private Integer getCurrentPageId(RenderRequest req) {
-      String pageId = (String) 
req.getAttribute(PortalConstants.CMSC_OM_PAGE_ID);
-      return Integer.valueOf(pageId);
-   }
-
    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