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