Update of
/var/cvs/contributions/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms
In directory
james.mmbase.org:/tmp/cvs-serv32203/subsite/src/java/com/finalist/cmsc/subsite/forms
Modified Files:
Tag: b1_4
SubSiteAction.java
Added Files:
Tag: b1_4
PPContentAction.java
Log Message:
CMSC-617 Personal Pages module
Backport to 1.4
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms
See also: http://www.mmbase.org/jira/browse/CMSC-617
PPContentAction.java is new
Index: SubSiteAction.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms/SubSiteAction.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -b -r1.1 -r1.1.2.1
--- SubSiteAction.java 1 Feb 2008 12:55:56 -0000 1.1
+++ SubSiteAction.java 25 Feb 2008 16:26:15 -0000 1.1.2.1
@@ -9,28 +9,55 @@
*/
package com.finalist.cmsc.subsite.forms;
+import java.util.Calendar;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import net.sf.mmapps.commons.util.StringUtil;
+
+import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Field;
import org.mmbase.bridge.Node;
import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeQuery;
+import org.mmbase.bridge.NotFoundException;
+import org.mmbase.bridge.util.Queries;
+import org.mmbase.bridge.util.SearchUtil;
+import org.mmbase.storage.search.Constraint;
+import org.mmbase.storage.search.FieldValueDateConstraint;
+import org.mmbase.storage.search.StepField;
+import org.mmbase.storage.search.implementation.BasicFieldValueDateConstraint;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+import com.finalist.cmsc.mmbase.PropertiesUtil;
import com.finalist.cmsc.navigation.NavigationUtil;
-import com.finalist.cmsc.struts.MMBaseAction;
+import com.finalist.cmsc.navigation.PagesUtil;
+import com.finalist.cmsc.repository.forms.SearchAction;
+import com.finalist.cmsc.repository.forms.SearchForm;
+import com.finalist.cmsc.struts.PagerAction;
+import com.finalist.cmsc.subsite.util.SubSiteUtil;
-public class SubSiteAction extends MMBaseAction {
+public class SubSiteAction extends PagerAction {
+
+ /**
+ * MMBase logging system
+ */
+ private static Logger log =
Logging.getLoggerInstance(SearchAction.class.getName());
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response, Cloud cloud)
throws Exception {
- /*System.out.println(request.getParameterNames().toString());
- System.out.println(request.getParameterMap().toString());*/
+ // Initialize
+ SearchForm searchForm = (SearchForm) form;
String subsite = request.getParameter("subsite");
@@ -41,55 +68,115 @@
* -> and put it in a List
*/
- /*
- String orderby = request.getParameter("orderby");
- String direction = request.getParameter("direction");
- if (StringUtil.isEmpty(orderby)) {
- orderby = null;
+ //Retrieve list of pages of subsite
+ Node subsiteNode = null;
+ if (StringUtils.isBlank(subsite) || !cloud.hasNode(subsite)) {
+ //If the subsiteNode does not exist or is not valid, get the first
found subsite
+ NodeManager nm = cloud.getNodeManager(SubSiteUtil.SUBSITE);
+ NodeQuery subsitesQuery = nm.createQuery();
+ SearchUtil.addLimitConstraint(subsitesQuery, 0, 1);
+ SearchUtil.addSortOrder(subsitesQuery, nm, PagesUtil.TITLE_FIELD,
"DOWN");
+ NodeList results = subsitesQuery.getList();
+ if (results.size() > 0) {
+ subsiteNode = (Node) results.get(0);
+ }
+ }
+ else {
+ subsiteNode = cloud.getNode(subsite);
+ }
+
+ request.setAttribute("subsite", String.valueOf(subsiteNode.getNumber()));
+
+ if (subsiteNode == null){ //If there are no subsites at all, return
empty list
+ searchForm.setResultCount(0);
+ NodeList results = cloud.createNodeList();
+ searchForm.setResults(results);
+ return mapping.findForward(SUCCESS);
+ }
+
+ NodeManager nodeManager = subsiteNode.getNodeManager();
+ // Order the result by:
+ String order = searchForm.getOrder();
+
+ // set default order field
+ if (order != null && StringUtil.isEmpty(order)) {
+ if (nodeManager.hasField("title")) {
+ order = "title";
+ }
+ if (nodeManager.hasField("name")) {
+ order = "name";
}
- if (StringUtil.isEmpty(direction)) {
- direction = null;
}
- */
-/* //Retrieve list of subsites
- Node subsiteNode = cloud.getNode(subsite);
- if (subsiteNode != null) {
- Node parentNode = NavigationUtil.getParent(subsiteNode);
- NodeList subsiteElements = NavigationUtil.getChildren(parentNode);
- addToRequest(request, "subsiteElements", subsiteElements);
- }*/
+ // Set the offset (used for paging).
+ int offset = 0;
+ if (searchForm.getOffset() != null &&
searchForm.getOffset().matches("\\d+")) {
+ offset = Integer.parseInt(searchForm.getOffset());
+ searchForm.setOffset(Integer.toString(offset));
+ }
- //Retrieve list of pages of subsite
- if (! subsite.equalsIgnoreCase("")) {
- Node subsiteNode = cloud.getNode(subsite);
- if (subsiteNode != null) {
- NodeList pageNodes = NavigationUtil.getChildren(subsiteNode);
- addToRequest(request, "pageNodes", pageNodes);
-// request.setAttribute("pageNodes", pageNodes);
+ // Set the maximum result size.
+ String resultsPerPage =
PropertiesUtil.getProperty(SearchAction.REPOSITORY_SEARCH_RESULTS_PER_PAGE);
+ int maxNumber = 25;
+ if (resultsPerPage != null && resultsPerPage.matches("\\d+")) {
+ maxNumber = Integer.parseInt(resultsPerPage);
}
+
+ searchForm.setKeywords(resultsPerPage);
+
+ String direction = null;
+ NodeQuery query = createLinkedElementsQuery(subsiteNode, order,
direction, offset*maxNumber, maxNumber, -1, -1, -1);
+
+ // Add the title constraint:
+ if (!StringUtil.isEmpty(searchForm.getTitle())) {
+ Field field = nodeManager.getField(PagesUtil.TITLE_FIELD);
+ Constraint titleConstraint = SearchUtil.createLikeConstraint(query,
field, searchForm.getTitle());
+ SearchUtil.addConstraint(query, titleConstraint);
}
+ log.debug("QUERY: " + query);
-/* if (!StringUtil.isEmpty(subsite)) {
- Node channel = cloud.getNode(subsite);
- NodeList elements = RepositoryUtil.getLinkedElements(channel, null,
- null, null, false, -1, -1, -1, -1, -1);
- addToRequest(request, "elements", elements);
+ int resultCount = Queries.count(query);
+ NodeList results = cloud.getList(query);
+ // Set everything on the request.
+ searchForm.setResultCount(resultCount);
+ searchForm.setResults(results);
+ return super.execute(mapping, searchForm, request, response, cloud);
+ }
- NodeList created = RepositoryUtil.getCreatedElements(channel);
- Map<String, Node> createdNumbers = new HashMap<String, Node>();
- for (Iterator<Node> iter = created.iterator(); iter.hasNext();) {
- Node createdElement = iter.next();
- createdNumbers.put(String.valueOf(createdElement.getNumber()),
- createdElement);
+ public static NodeQuery createLinkedElementsQuery(Node channel, String
orderby, String direction, int offset, int maxNumber, int year, int month, int
day) {
+ String destinationManager = SubSiteUtil.PERSONALPAGE;
+
+ NodeQuery query;
+ if (orderby == null) {
+ orderby = NavigationUtil.NAVREL + ".pos";
}
- addToRequest(request, "createdNumbers", createdNumbers);
- }*/
- return mapping.findForward(SUCCESS);
-// return super.execute(mapping, form, request, response, cloud);
+ query = SearchUtil.createRelatedNodeListQuery(channel,
destinationManager, NavigationUtil.NAVREL);
+ SearchUtil.addFeatures(query, channel, destinationManager,
NavigationUtil.NAVREL, null, null, orderby, direction);
+
+ // Precision of now is based on minutes.
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+
+ if(year != -1 || month != -1 || day != -1) {
+ Field field =
query.getCloud().getNodeManager(destinationManager).getField("publishdate");
//Does this work?
+ StepField basicStepField = query.getStepField(field);
+ if(year != -1) {
+ SearchUtil.addConstraint(query, new
BasicFieldValueDateConstraint(basicStepField, new Integer(year),
FieldValueDateConstraint.YEAR));
+ }
+ if(month != -1) {
+ SearchUtil.addConstraint(query, new
BasicFieldValueDateConstraint(basicStepField, new Integer(month),
FieldValueDateConstraint.MONTH));
+ }
+ if(day != -1) {
+ SearchUtil.addConstraint(query, new
BasicFieldValueDateConstraint(basicStepField, new Integer(day),
FieldValueDateConstraint.DAY_OF_MONTH));
+ }
+ }
+
+ SearchUtil.addLimitConstraint(query, offset, maxNumber);
+ return query;
}
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs