Author: nico
Date: 2009-11-18 15:49:22 +0100 (Wed, 18 Nov 2009)
New Revision: 39776
Added:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AbstractSearchAction.java
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ResourceSearchAction.java
Removed:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/SearchAction.java
Modified:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AttachmentAction.java
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ImageAction.java
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/UrlAction.java
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
Log:
List and delete reactions fixed
Added:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AbstractSearchAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AbstractSearchAction.java
(rev 0)
+++
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AbstractSearchAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -0,0 +1,138 @@
+package com.finalist.cmsc.resources.forms;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts.action.*;
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.Queries;
+import org.mmbase.bridge.util.SearchUtil;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.mmbase.PropertiesUtil;
+import com.finalist.cmsc.struts.PagerAction;
+
+public abstract class AbstractSearchAction extends PagerAction {
+
+ public static final String NUMBER_FIELD = "number";
+
+ private static final String GETURL = "geturl";
+ private static final String STRICT = "strict";
+
+ private static final String OBJECTID = "objectid";
+ private static final String CONTENTTYPES = "contenttypes";
+
+ private static final String REPOSITORY_SEARCH_RESULTS_PER_PAGE =
"repository.search.results.per.page";
+
+ /**
+ * MMbase logging system
+ */
+ private static final Logger log =
Logging.getLoggerInstance(ResourceSearchAction.class.getName());
+
+ @Override
+ public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
+ HttpServletResponse response, Cloud cloud) throws Exception {
+
+ // Initialize
+ SearchForm searchForm = (SearchForm) form;
+ NodeManager nodeManager =
cloud.getNodeManager(searchForm.getContenttypes());
+ QueryStringComposer queryStringComposer = new QueryStringComposer();
+ NodeQuery query = cloud.createNodeQuery();
+
+ // First we add the contenttype parameter
+ queryStringComposer.addParameter(CONTENTTYPES,
searchForm.getContenttypes());
+
+ addStepsToQuery(cloud, searchForm, nodeManager, query);
+
+ // Order the result by:
+ String order = searchForm.getOrder();
+
+ // set default order field
+ if (StringUtils.isEmpty(order)) {
+ if (nodeManager.hasField("title")) {
+ order = "title";
+ }
+ if (nodeManager.hasField("name")) {
+ order = "name";
+ }
+ }
+
+ if (StringUtils.isNotEmpty(order)) {
+ queryStringComposer.addParameter(ORDER, order);
+ queryStringComposer.addParameter(DIRECTION, "" +
searchForm.getDirection());
+ query.addSortOrder(query.getStepField(nodeManager.getField(order)),
searchForm.getDirection());
+ }
+
+ query.setDistinct(true);
+
+ addConstraints(searchForm, nodeManager, queryStringComposer, query);
+
+ // Set the objectid constraint
+ if (StringUtils.isNotEmpty(searchForm.getObjectid())) {
+ Integer objectId = null;
+ if (searchForm.getObjectid().matches("^\\d+$")) {
+ objectId = Integer.valueOf(searchForm.getObjectid());
+ } else {
+ if (cloud.hasNode(searchForm.getObjectid())) {
+ objectId =
Integer.valueOf(cloud.getNode(searchForm.getObjectid()).getNumber());
+ } else {
+ objectId = Integer.valueOf(-1);
+ }
+ }
+ SearchUtil.addEqualConstraint(query, nodeManager, NUMBER_FIELD,
objectId);
+ queryStringComposer.addParameter(OBJECTID, searchForm.getObjectid());
+ }
+
+ // Set the maximum result size.
+ String resultsPerPage =
PropertiesUtil.getProperty(REPOSITORY_SEARCH_RESULTS_PER_PAGE);
+ if (resultsPerPage == null || !resultsPerPage.matches("\\d+")) {
+ query.setMaxNumber(25);
+ } else {
+ query.setMaxNumber(Integer.parseInt(resultsPerPage));
+ }
+
+ // Set the offset (used for paging).
+ if (searchForm.getOffset() != null &&
searchForm.getOffset().matches("\\d+")) {
+ query.setOffset(query.getMaxNumber() *
Integer.parseInt(searchForm.getOffset()));
+ queryStringComposer.addParameter(OFFSET, searchForm.getOffset());
+ }
+
+ log.debug("QUERY: " + query);
+
+ int resultCount = Queries.count(query);
+ NodeList results = nodeManager.getList(query);
+
+ // Set everyting on the request.
+ searchForm.setResultCount(resultCount);
+ searchForm.setResults(results);
+ String show = searchForm.getShow();
+ if (StringUtils.isEmpty(show)) {
+ show = "list";
+ }
+ request.setAttribute(GETURL, queryStringComposer.getQueryString() +
"&show=" + show);
+ request.setAttribute(STRICT, searchForm.getStrict());
+
+ return super.execute(mapping, form, request, response, cloud);
+ }
+
+ protected abstract void addConstraints(SearchForm searchForm, NodeManager
nodeManager,
+ QueryStringComposer queryStringComposer, NodeQuery query);
+
+ protected abstract void addStepsToQuery(Cloud cloud, SearchForm searchForm,
NodeManager nodeManager, NodeQuery query);
+
+ protected void addField(NodeManager nodeManager, QueryStringComposer
queryStringComposer, NodeQuery query,
+ String fieldname, String value) {
+ if (StringUtils.isNotEmpty(value)) {
+ Field field = nodeManager.getField(fieldname);
+ if (field.getType() == Field.TYPE_BOOLEAN) {
+ Queries.addConstraints(query, fieldname + "=" + value);
+ } else {
+ SearchUtil.addLikeConstraint(query, field, value);
+ }
+ queryStringComposer.addParameter(fieldname, value);
+ }
+ }
+
+}
Modified:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AttachmentAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AttachmentAction.java
2009-11-18 14:26:17 UTC (rev 39775)
+++
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/AttachmentAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -7,7 +7,7 @@
* @author Billy
*
*/
-public class AttachmentAction extends SearchAction {
+public class AttachmentAction extends ResourceSearchAction {
public static final String TITLE_FIELD = "title";
public static final String DESCRIPTION_FIELD = "description";
Modified:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ImageAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ImageAction.java
2009-11-18 14:26:17 UTC (rev 39775)
+++
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ImageAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -3,7 +3,7 @@
import org.mmbase.bridge.NodeManager;
import org.mmbase.bridge.NodeQuery;
-public class ImageAction extends SearchAction {
+public class ImageAction extends ResourceSearchAction {
public static final String TITLE_FIELD = "title";
public static final String DESCRIPTION_FIELD = "description";
Copied:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ResourceSearchAction.java
(from rev 39762,
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/SearchAction.java)
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ResourceSearchAction.java
(rev 0)
+++
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/ResourceSearchAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -0,0 +1,43 @@
+/*
+ *
+ * This software is OSI Certified Open Source Software. OSI Certified is a
certification mark of the Open Source
+ * Initiative.
+ *
+ * The license (Mozilla version 1.0) can be read at the MMBase site. See
http://www.MMBase.org/license
+ */
+package com.finalist.cmsc.resources.forms;
+
+import org.apache.commons.lang.StringUtils;
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.SearchUtil;
+import org.mmbase.storage.search.*;
+
+import com.finalist.cmsc.repository.RepositoryUtil;
+
+public abstract class ResourceSearchAction extends AbstractSearchAction {
+
+ protected void addStepsToQuery(Cloud cloud, SearchForm searchForm,
NodeManager nodeManager, NodeQuery query) {
+ // First add the proper step to the query.
+ // CMSC-1260 Content search also finds elements in Recycle bin
+ NodeManager channelNodeManager =
cloud.getNodeManager(RepositoryUtil.CONTENTCHANNEL);
+ Step channelStep = query.addStep(channelNodeManager);
+ Step theStep = query.addRelationStep(nodeManager,
RepositoryUtil.CREATIONREL, "SOURCE").getNext();
+ query.setNodeStep(theStep);
+
+ if (StringUtils.isNotEmpty(searchForm.getContentChannel())) {
+ Integer ContentChannelNumber =
Integer.parseInt(searchForm.getContentChannel());
+ StepField stepField = query.createStepField(channelStep,
channelNodeManager.getField("number"));
+ FieldValueConstraint channelConstraint =
query.createConstraint(stepField, FieldCompareConstraint.EQUAL,
+ ContentChannelNumber);
+ SearchUtil.addConstraint(query, channelConstraint);
+ } else {
+ Integer trashNumber =
Integer.parseInt(RepositoryUtil.getTrash(cloud));
+ StepField stepField = query.createStepField(channelStep,
channelNodeManager.getField("number"));
+ FieldValueConstraint channelConstraint =
query.createConstraint(stepField, FieldCompareConstraint.NOT_EQUAL,
+ trashNumber);
+ SearchUtil.addConstraint(query, channelConstraint);
+ }
+ query.setNodeStep(theStep);
+ }
+
+}
Deleted:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/SearchAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/SearchAction.java
2009-11-18 14:26:17 UTC (rev 39775)
+++
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/SearchAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -1,174 +0,0 @@
-/*
- *
- * This software is OSI Certified Open Source Software. OSI Certified is a
certification mark of the Open Source
- * Initiative.
- *
- * The license (Mozilla version 1.0) can be read at the MMBase site. See
http://www.MMBase.org/license
- */
-package com.finalist.cmsc.resources.forms;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-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.NodeList;
-import org.mmbase.bridge.NodeManager;
-import org.mmbase.bridge.NodeQuery;
-import org.mmbase.bridge.util.Queries;
-import org.mmbase.bridge.util.SearchUtil;
-import org.mmbase.storage.search.FieldCompareConstraint;
-import org.mmbase.storage.search.FieldValueConstraint;
-import org.mmbase.storage.search.Step;
-import org.mmbase.storage.search.StepField;
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-import com.finalist.cmsc.mmbase.PropertiesUtil;
-import com.finalist.cmsc.repository.RepositoryUtil;
-import com.finalist.cmsc.struts.PagerAction;
-
-public abstract class SearchAction extends PagerAction {
-
- public static final String NUMBER_FIELD = "number";
-
- private static final String GETURL = "geturl";
- private static final String STRICT = "strict";
-
- private static final String OBJECTID = "objectid";
- private static final String CONTENTTYPES = "contenttypes";
-
- private static final String REPOSITORY_SEARCH_RESULTS_PER_PAGE =
"repository.search.results.per.page";
-
- /**
- * MMbase logging system
- */
- private static final Logger log =
Logging.getLoggerInstance(SearchAction.class.getName());
-
- @Override
- public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
- HttpServletResponse response, Cloud cloud) throws Exception {
-
- // Initialize
- SearchForm searchForm = (SearchForm) form;
- NodeManager nodeManager =
cloud.getNodeManager(searchForm.getContenttypes());
- QueryStringComposer queryStringComposer = new QueryStringComposer();
- NodeQuery query = cloud.createNodeQuery();
-
- // First we add the contenttype parameter
- queryStringComposer.addParameter(CONTENTTYPES,
searchForm.getContenttypes());
-
- // First add the proper step to the query.
- // CMSC-1260 Content search also finds elements in Recycle bin
- NodeManager channelNodeManager =
cloud.getNodeManager(RepositoryUtil.CONTENTCHANNEL);
- Step channelStep = query.addStep(channelNodeManager);
- Step theStep = query.addRelationStep(nodeManager,
RepositoryUtil.CREATIONREL, "SOURCE").getNext();
- query.setNodeStep(theStep);
-
- if (StringUtils.isNotEmpty(searchForm.getContentChannel())) {
- Integer ContentChannelNumber =
Integer.parseInt(searchForm.getContentChannel());
- StepField stepField = query.createStepField(channelStep,
channelNodeManager.getField("number"));
- FieldValueConstraint channelConstraint =
query.createConstraint(stepField, FieldCompareConstraint.EQUAL,
- ContentChannelNumber);
- SearchUtil.addConstraint(query, channelConstraint);
- } else if (!"reaction".equalsIgnoreCase(searchForm.getContenttypes())) {
- Integer trashNumber =
Integer.parseInt(RepositoryUtil.getTrash(cloud));
- StepField stepField = query.createStepField(channelStep,
channelNodeManager.getField("number"));
- FieldValueConstraint channelConstraint =
query.createConstraint(stepField, FieldCompareConstraint.NOT_EQUAL,
- trashNumber);
- SearchUtil.addConstraint(query, channelConstraint);
- }
- query.setNodeStep(theStep);
-
- // Order the result by:
- String order = searchForm.getOrder();
-
- // set default order field
- if (StringUtils.isEmpty(order)) {
- if (nodeManager.hasField("title")) {
- order = "title";
- }
- if (nodeManager.hasField("name")) {
- order = "name";
- }
- }
-
- if (StringUtils.isNotEmpty(order)) {
- queryStringComposer.addParameter(ORDER, order);
- queryStringComposer.addParameter(DIRECTION, "" +
searchForm.getDirection());
- query.addSortOrder(query.getStepField(nodeManager.getField(order)),
searchForm.getDirection());
- }
-
- query.setDistinct(true);
-
- addConstraints(searchForm, nodeManager, queryStringComposer, query);
-
- // Set the objectid constraint
- if (StringUtils.isNotEmpty(searchForm.getObjectid())) {
- Integer objectId = null;
- if (searchForm.getObjectid().matches("^\\d+$")) {
- objectId = Integer.valueOf(searchForm.getObjectid());
- } else {
- if (cloud.hasNode(searchForm.getObjectid())) {
- objectId =
Integer.valueOf(cloud.getNode(searchForm.getObjectid()).getNumber());
- } else {
- objectId = Integer.valueOf(-1);
- }
- }
- SearchUtil.addEqualConstraint(query, nodeManager, NUMBER_FIELD,
objectId);
- queryStringComposer.addParameter(OBJECTID, searchForm.getObjectid());
- }
-
- // Set the maximum result size.
- String resultsPerPage =
PropertiesUtil.getProperty(REPOSITORY_SEARCH_RESULTS_PER_PAGE);
- if (resultsPerPage == null || !resultsPerPage.matches("\\d+")) {
- query.setMaxNumber(25);
- } else {
- query.setMaxNumber(Integer.parseInt(resultsPerPage));
- }
-
- // Set the offset (used for paging).
- if (searchForm.getOffset() != null &&
searchForm.getOffset().matches("\\d+")) {
- query.setOffset(query.getMaxNumber() *
Integer.parseInt(searchForm.getOffset()));
- queryStringComposer.addParameter(OFFSET, searchForm.getOffset());
- }
-
- log.debug("QUERY: " + query);
-
- int resultCount = Queries.count(query);
- NodeList results = nodeManager.getList(query);
-
- // Set everyting on the request.
- searchForm.setResultCount(resultCount);
- searchForm.setResults(results);
- String show = searchForm.getShow();
- if (StringUtils.isEmpty(show)) {
- show = "list";
- }
- request.setAttribute(GETURL, queryStringComposer.getQueryString() +
"&show=" + show);
- request.setAttribute(STRICT, searchForm.getStrict());
-
- return super.execute(mapping, form, request, response, cloud);
- }
-
- protected abstract void addConstraints(SearchForm searchForm, NodeManager
nodeManager,
- QueryStringComposer queryStringComposer, NodeQuery query);
-
- protected void addField(NodeManager nodeManager, QueryStringComposer
queryStringComposer, NodeQuery query,
- String fieldname, String value) {
- if (StringUtils.isNotEmpty(value)) {
- Field field = nodeManager.getField(fieldname);
- if (field.getType() == Field.TYPE_BOOLEAN) {
- Queries.addConstraints(query, fieldname + "=" + value);
- } else {
- SearchUtil.addLikeConstraint(query, field, value);
- }
- queryStringComposer.addParameter(fieldname, value);
- }
- }
-
-}
Modified:
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/UrlAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/UrlAction.java
2009-11-18 14:26:17 UTC (rev 39775)
+++
CMSContainer/branches/b1_7/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/resources/forms/UrlAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -3,7 +3,7 @@
import org.mmbase.bridge.NodeManager;
import org.mmbase.bridge.NodeQuery;
-public class UrlAction extends SearchAction {
+public class UrlAction extends ResourceSearchAction {
public static final String TITLE_FIELD = "title";
public static final String DESCRIPTION_FIELD = "description";
Modified:
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
2009-11-18 14:26:17 UTC (rev 39775)
+++
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/DeleteReactionAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -27,7 +27,11 @@
MMBaseAction.ADMINISTRATOR.equals(cloud.getUser().getRank().toString())) {
log.debug("deleting secondary content: " + number);
Cloud remoteCloud = ReactionUtil.getRemoteCloud(cloud);
- remoteCloud.getNode(number).delete(true);
+
+ /* Only remove the relations because the an event listener will
remove the reaction
+ * @see com.finalist.cmsc.directreaction.ContentElementEventListener
+ */
+ remoteCloud.getNode(number).deleteRelations();
}
else {
log.warn("Could not delete direct reaction, because user was not
siteadmin or admin: " + number + " ("
Modified:
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
===================================================================
---
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
2009-11-18 14:26:17 UTC (rev 39775)
+++
CMSContainer/branches/b1_7/CMSContainer_Modules/directreaction/src/java/com/finalist/cmsc/resources/forms/ReactionAction.java
2009-11-18 14:49:22 UTC (rev 39776)
@@ -14,7 +14,7 @@
import com.finalist.cmsc.directreaction.util.ReactionUtil;
-public class ReactionAction extends SearchAction {
+public class ReactionAction extends AbstractSearchAction {
private static final Logger log =
Logging.getLoggerInstance(ReactionAction.class.getName());
@@ -47,7 +47,15 @@
return mapping.getInputForward();
}
+ @Override
+ protected void addStepsToQuery(Cloud cloud, SearchForm searchForm,
NodeManager nodeManager,
+ NodeQuery query) {
+ // First add the proper step to the query.
+ Step theStep = query.addStep(nodeManager);
+ query.setNodeStep(theStep);
+ }
+
@Override
public Cloud getCloud() {
/* It should use the staging cloud if it runs in single-war mode.
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs