Update of
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/portlets/newsletter
In directory
james.mmbase.org:/tmp/cvs-serv5890/src/java/com/finalist/portlets/newsletter
Modified Files:
NewsletterContentPortlet.java
Log Message:
CMSC-867,modify Newsletter Content Portlet.
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/portlets/newsletter
See also: http://www.mmbase.org/jira/browse/CMSC-867
Index: NewsletterContentPortlet.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/portlets/newsletter/NewsletterContentPortlet.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- NewsletterContentPortlet.java 28 Mar 2008 05:13:33 -0000 1.15
+++ NewsletterContentPortlet.java 23 Apr 2008 11:03:16 -0000 1.16
@@ -1,151 +1,179 @@
package com.finalist.portlets.newsletter;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
-import java.util.ResourceBundle;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletPreferences;
-import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
+import net.sf.mmapps.commons.util.StringUtil;
+
+import com.finalist.cmsc.beans.om.ContentElement;
import com.finalist.cmsc.beans.om.NavigationItem;
-import com.finalist.cmsc.beans.om.Page;
+import com.finalist.cmsc.navigation.ServerUtil;
import com.finalist.cmsc.portalImpl.PortalConstants;
import com.finalist.cmsc.portlets.AbstractContentPortlet;
import com.finalist.cmsc.services.sitemanagement.SiteManagement;
-import com.finalist.newsletter.util.NewsletterSubscriptionUtil;
import com.finalist.newsletter.util.NewsletterUtil;
public class NewsletterContentPortlet extends AbstractContentPortlet {
- private static final String KEY_DUPLICATEHANDLERS = "duplicatehandlers";
- private static final String KEY_DEFAULTTHEME = "defaulttheme";
- private static final String KEY_ADDITIONAL_THEMES = "additionalthemes";
- private static final String KEY_DEFAULTARTICLES = "defaultarticles";
-
- private static ResourceBundle rb =
ResourceBundle.getBundle("portlets-newslettercontent");
-
- public static final String KEY_ARTICLES = "articles";
-
- public static final String KEY_DISPLAYTYPE = "displaytype";
- public static final String DISPLAYTYPE_NORMAL = "all";
- public static final String DISPLAYTYPE_PERSONALIZED = "personalized";
- public static final String DISPLAYTYPE_DEFAULT = DISPLAYTYPE_NORMAL;
-
- public static final String DUPLICATE_HANDLING_TYPE = "duplicatehandling";
- public static final String DUPLICATE_HANDLING_SHOW =
rb.getString("duplicatehandling.show");
- public static final String DUPLICATE_HANDLING_HIDE =
rb.getString("duplicatehandling.hide");
- public static final String DUPLICATE_HANDLING_TYPE_DEFAULT =
DUPLICATE_HANDLING_HIDE;
-
- private static List<String> duplicateHandlers = new ArrayList<String>();
-
- static {
- duplicateHandlers.add(NewsletterContentPortlet.DUPLICATE_HANDLING_HIDE);
- duplicateHandlers.add(NewsletterContentPortlet.DUPLICATE_HANDLING_SHOW);
- }
-
-
- private String determineDisplayType(RenderRequest request) {
- String displayType = (String) request.getAttribute(KEY_DISPLAYTYPE);
- if (displayType == null) {
- displayType = DISPLAYTYPE_DEFAULT;
- }
- return displayType;
- }
+ protected static final String DISPLAYTYPE_PARAM = "displayType";
+ protected static final String USE_PAGING = "usePaging";
+ protected static final String OFFSET = "pager.offset";
+ protected static final String SHOW_PAGES = "showPages";
+ protected static final String ELEMENTS_PER_PAGE = "elementsPerPage";
+ protected static final String PAGES_INDEX = "pagesIndex";
+ protected static final String INDEX_POSITION = "position";
+
+ protected static final String KEY_DEFAULTARTICLES = "defaultarticles";
+ protected static final String ARTICLES_SORT_ORDERBY = "orderby";
+ protected static final String ARTICLES_SORT_DIRECTION = "direction";
+ protected static final String ARCHIVE_PAGE = "archivepage";
+ protected static final String START_INDEX = "startindex";
+ protected static final String TOTAL_ELEMENTS = "totalElements";
+ protected static final String ELEMENTS = "elements";
+ protected static final String TYPES = "types";
+ protected static final String MAX_ELEMENTS = "maxElements";
@Override
protected void doEditDefaults(RenderRequest request, RenderResponse
response) throws IOException, PortletException {
- request.setAttribute(KEY_DUPLICATEHANDLERS, duplicateHandlers);
super.doEditDefaults(request, response);
}
@Override
- protected void doView(RenderRequest request, RenderResponse res) throws
PortletException, java.io.IOException {
-
+ protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, java.io.IOException {
PortletPreferences preferences = request.getPreferences();
- PortletSession session = request.getPortletSession(true);
String template =
preferences.getValue(PortalConstants.CMSC_PORTLET_VIEW_TEMPLATE, null);
- String duplicateHandling = preferences.getValue(DUPLICATE_HANDLING_TYPE,
null);
-
String currentPath = getUrlPath(request);
NavigationItem result =
SiteManagement.getNavigationItemFromPath(currentPath);
if (result != null) {
int itemNumber = result.getId();
+ addContentElements(request,itemNumber);
+ }
+ else {
+ throw new RuntimeException("The page number could not be found");
+ }
+ doInclude("view", template, request, response);
+ }
+ protected void addContentElements(RenderRequest req, int itemNumber) {
+ String elementId = req.getParameter(ELEMENT_ID);
+ if (StringUtil.isEmpty(elementId)) {
+ PortletPreferences preferences = req.getPreferences();
+ String portletId =
preferences.getValue(PortalConstants.CMSC_OM_PORTLET_ID, null);
+ List<String> contenttypes = SiteManagement.getContentTypes(portletId);
- if (NewsletterUtil.isNewsletterOrPublication(itemNumber)) {
- String displayType = determineDisplayType(request);
+ int offset = 0;
+ String currentOffset = req.getParameter(OFFSET);
+ if (!StringUtil.isEmpty(currentOffset)) {
+ offset = Integer.parseInt(currentOffset);
+ }
+ int startIndex = Integer.parseInt(preferences.getValue(START_INDEX,
"1")) - 1;
+ if (startIndex > 0) {
+ offset = offset + startIndex;
+ }
+ setAttribute(req, "offset", offset);
+
+ String orderby = preferences.getValue(ARTICLES_SORT_ORDERBY, null);
+ String direction = preferences.getValue(ARTICLES_SORT_DIRECTION,
null);
+ String useLifecycle = preferences.getValue(USE_LIFECYCLE, null);
- int defaultTheme = NewsletterUtil.getDefaultTheme(itemNumber);
- List<Integer> defaultArticles =
NewsletterUtil.getArticlesForTheme(defaultTheme);
- if (defaultArticles != null && defaultArticles.size() > 0) {
- request.setAttribute(KEY_DEFAULTTHEME, defaultTheme);
- request.setAttribute(KEY_DEFAULTARTICLES, defaultArticles);
+ int maxElements = Integer.parseInt(preferences.getValue(MAX_ELEMENTS,
"-1"));
+ if (maxElements <= 0) {
+ maxElements = Integer.MAX_VALUE;
}
+ int elementsPerPage =
Integer.parseInt(preferences.getValue(ELEMENTS_PER_PAGE, "-1"));
+ if (elementsPerPage <= 0) {
+ elementsPerPage = Integer.MAX_VALUE;
+ }
+ elementsPerPage = Math.min(elementsPerPage, maxElements);
+
- List<Integer> additionalThemes = null;
- List<Integer> availableThemes =
NewsletterUtil.getAllThemes(itemNumber);
- if (availableThemes != null && availableThemes.size() > 0) {
- if (displayType.equals(DISPLAYTYPE_PERSONALIZED)) {
- String userName = getUserName(session);
- if (userName != null) {
- additionalThemes =
NewsletterSubscriptionUtil.compareToUserSubscribedThemes(availableThemes,
userName, itemNumber);
+ boolean useLifecycleBool =
Boolean.valueOf(useLifecycle).booleanValue();
+ if (useLifecycleBool && ServerUtil.isLive()) {
+ // A live server will remove expired nodes.
+ useLifecycleBool = false;
}
- } else {
- additionalThemes = availableThemes;
+
+ int totalItems = countContentElements(itemNumber);
+ if (startIndex > 0) {
+ totalItems = totalItems - startIndex;
}
+
+ List<ContentElement> elements =
getContentElements(req,itemNumber,offset,elementsPerPage, orderby, direction);
+
+ setAttribute(req, ELEMENTS, elements);
+ if (contenttypes != null && !contenttypes.isEmpty()) {
+ setAttribute(req, TYPES, contenttypes);
}
+ setAttribute(req, TOTAL_ELEMENTS, Math.min(maxElements, totalItems));
+ setAttribute(req, ELEMENTS_PER_PAGE, elementsPerPage);
- if (additionalThemes != null && additionalThemes.size() > 0) {
- List<Integer> temporaryArticleListing = new
ArrayList<Integer>();
- temporaryArticleListing.addAll(defaultArticles);
+ String pagesIndex = preferences.getValue(PAGES_INDEX, null);
+ if (StringUtil.isEmpty(pagesIndex)) {
+ setAttribute(req, PAGES_INDEX, "center");
+ }
- for (int i = 0; i < additionalThemes.size(); i++) {
- int themeNumber = additionalThemes.get(i);
- List<Integer> articles =
NewsletterUtil.getArticlesForTheme(themeNumber);
- if (duplicateHandling != null &&
duplicateHandling.equals(DUPLICATE_HANDLING_HIDE)) {
- articles =
NewsletterUtil.removeDuplicates(temporaryArticleListing, articles);
+ String showPages = preferences.getValue(SHOW_PAGES, null);
+ if (StringUtil.isEmpty(showPages)) {
+ setAttribute(req, SHOW_PAGES, 10);
}
- if (articles != null && articles.size() > 0) {
- request.setAttribute(KEY_ARTICLES + themeNumber,
articles);
- for (int a = 0; a < articles.size(); a++) {
- temporaryArticleListing.add(articles.get(a));
+
+ boolean usePaging = Boolean.valueOf(preferences.getValue(USE_PAGING,
"true"));
+ if (usePaging) {
+ usePaging = totalItems > elementsPerPage;
}
- } else {
-
additionalThemes.remove(additionalThemes.indexOf(themeNumber));
- i--;
+ setAttribute(req, USE_PAGING, usePaging);
+
+ String indexPosition = preferences.getValue(INDEX_POSITION, null);
+ if (StringUtil.isEmpty(indexPosition)) {
+ setAttribute(req, INDEX_POSITION, "bottom");
}
}
- request.setAttribute(KEY_ADDITIONAL_THEMES, additionalThemes);
+ else {
+ setMetaData(req, elementId);
}
- } else {
- throw new RuntimeException("Newsletterportlet placed on
non-newsletter node");
}
- } else {
- throw new RuntimeException("The page number could not be found");
+
+ protected int countContentElements(int itemNumber) {
+ int totalItems = NewsletterUtil.countArticlesByNewsletter(itemNumber);
+
+ return totalItems;
}
- doInclude("view", template, request, res);
+
+ protected List<ContentElement> getContentElements(RenderRequest req, int
itemNumber,int offset,int elementsPerPage, String orderBy, String direction) {
+
+ List<ContentElement> elements =
NewsletterUtil.getArticlesByNewsletter(itemNumber,offset,elementsPerPage,orderBy,direction);
+ return elements;
}
- private String getUserName(PortletSession session) {
- String userName = (String) session.getAttribute("userName",
PortletSession.APPLICATION_SCOPE);
- return userName;
+
+ public int getOffset(int currentPage, int pageSize) {
+ return ((currentPage - 1) * pageSize) + 1;
}
@Override
public void processEditDefaults(ActionRequest request, ActionResponse
response) throws PortletException, IOException {
PortletPreferences preferences = request.getPreferences();
String portletId =
preferences.getValue(PortalConstants.CMSC_OM_PORTLET_ID, null);
- String duplicateHandling = request.getParameter(DUPLICATE_HANDLING_TYPE);
- if (duplicateHandling == null) {
- duplicateHandling = DUPLICATE_HANDLING_TYPE_DEFAULT;
- }
- setPortletParameter(portletId, DUPLICATE_HANDLING_TYPE,
duplicateHandling);
+
+ String orderBy = request.getParameter(ARTICLES_SORT_ORDERBY);
+ String direction = request.getParameter(ARTICLES_SORT_DIRECTION);
+ setPortletParameter(portletId, ARTICLES_SORT_ORDERBY, orderBy);
+ setPortletParameter(portletId, ARTICLES_SORT_DIRECTION, direction);
+
+ setPortletParameter(portletId, USE_LIFECYCLE,
request.getParameter(USE_LIFECYCLE));
+ setPortletParameter(portletId, ELEMENTS_PER_PAGE,
request.getParameter(ELEMENTS_PER_PAGE));
+ setPortletParameter(portletId, SHOW_PAGES,
request.getParameter(SHOW_PAGES));
+ setPortletParameter(portletId, USE_PAGING,
request.getParameter(USE_PAGING));
+ setPortletParameter(portletId, PAGES_INDEX,
request.getParameter(PAGES_INDEX));
+ setPortletParameter(portletId, INDEX_POSITION,
request.getParameter(INDEX_POSITION));
+ setPortletParameter(portletId, MAX_ELEMENTS,
request.getParameter(MAX_ELEMENTS));
super.processEditDefaults(request, response);
}
}
\ No newline at end of file
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs