Author: raintang Date: 2009-09-22 13:18:26 +0200 (Tue, 22 Sep 2009) New Revision: 38759
Removed: CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/SearchAction.java Modified: CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ContentAction.java CMSContainer/branches/b1_6/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms/SubSiteAction.java Log: CMSC-1551 In Content Repository, searching on keywords does not filter content elements; Removes file not used any more. Modified: CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ContentAction.java =================================================================== --- CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ContentAction.java 2009-09-22 11:18:06 UTC (rev 38758) +++ CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ContentAction.java 2009-09-22 11:18:26 UTC (rev 38759) @@ -33,6 +33,7 @@ public class ContentAction extends MMBaseAction { + private static final String REPOSITORY_SEARCH_RESULTS_PER_PAGE = "repository.search.results.per.page"; private final static String MOVECONTENTTOCHANNEL = "moveContentToChannel"; @Override @@ -66,7 +67,7 @@ } // Set the maximum result size. - String resultsPerPage = PropertiesUtil.getProperty(SearchAction.REPOSITORY_SEARCH_RESULTS_PER_PAGE); + String resultsPerPage = PropertiesUtil.getProperty(REPOSITORY_SEARCH_RESULTS_PER_PAGE); int maxNumber = 25; if (resultsPerPage != null && resultsPerPage.matches("\\d+")) { maxNumber = Integer.parseInt(resultsPerPage); Deleted: CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/SearchAction.java =================================================================== --- CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/SearchAction.java 2009-09-22 11:18:06 UTC (rev 38758) +++ CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/SearchAction.java 2009-09-22 11:18:26 UTC (rev 38759) @@ -1,298 +0,0 @@ -package com.finalist.cmsc.repository.forms; - -import java.util.List; -import java.util.StringTokenizer; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import net.sf.mmapps.modules.cloudprovider.CloudProvider; -import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory; - -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.storage.search.Constraint; -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.ContentElementUtil; -import com.finalist.cmsc.repository.RepositoryUtil; -import com.finalist.cmsc.resources.forms.QueryStringComposer; -import com.finalist.cmsc.services.publish.Publish; -import com.finalist.cmsc.services.workflow.Workflow; -import com.finalist.cmsc.struts.PagerAction; -import com.finalist.cmsc.util.KeywordUtil; - -public class SearchAction extends PagerAction { - - public static final String GETURL = "geturl"; - - public static final String PERSONAL = "personal"; - public static final String MODE = "mode"; - public static final String AUTHOR = "author"; - public static final String OBJECTID = "objectid"; - public static final String PARENTCHANNEL = "parentchannel"; - public static final String CONTENTTYPES = "contenttypes"; - - public 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 { - - log.debug("Starting the search:"); - - // Initialize - SearchForm searchForm = (SearchForm) form; - - String deleteContentRequest = request.getParameter("deleteContentRequest"); - - if (StringUtils.isNotEmpty(deleteContentRequest)) { - if (deleteContentRequest.startsWith("massDelete:")) { - massDeleteContent(deleteContentRequest.substring(11)); - } else { - deleteContent(deleteContentRequest); - } - - // add a flag to let search result page refresh the channels frame, - // so that the number of item in recyclebin can update - request.setAttribute("refreshChannels", "refreshChannels"); - } - - // First prepare the typeList, we'll need this one anyway: - List<NodeManager> types = ContentElementUtil.getContentTypes(cloud); - addToRequest(request, "typesList", ContentElementUtil.getValidTypesList(cloud, types)); - - // Switching tab, no searching. - if ("false".equalsIgnoreCase(searchForm.getSearch())) { - return mapping.getInputForward(); - } - - NodeManager nodeManager = cloud.getNodeManager(searchForm.getContenttypes()); - QueryStringComposer queryStringComposer = new QueryStringComposer(); - if (StringUtils.isNotEmpty(request.getParameter(MODE))) { - queryStringComposer.addParameter(MODE, request.getParameter(MODE)); - } - NodeQuery query = cloud.createNodeQuery(); - - // First add the contenttype parameter - queryStringComposer.addParameter(CONTENTTYPES, searchForm.getContenttypes()); - - // Second, add the proper step to the query. - NodeManager channelNodeManager = cloud.getNodeManager(RepositoryUtil.CONTENTCHANNEL); - Step channelStep = query.addStep(channelNodeManager); - Step contentStep = query.addRelationStep(nodeManager, RepositoryUtil.CONTENTREL, "DESTINATION").getNext(); - if (StringUtils.isNotEmpty(searchForm.getParentchannel())) { - query.addNode(channelStep, cloud.getNode(searchForm.getParentchannel())); - query.setNodeStep(contentStep); - queryStringComposer.addParameter(PARENTCHANNEL, searchForm.getParentchannel()); - } else { - // Do not display items located in the trash bin; filter them. - 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(contentStep); - } - - // 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, searchForm.getOrder()); - queryStringComposer.addParameter(DIRECTION, "" + searchForm.getDirection()); - query.addSortOrder(query.getStepField(nodeManager.getField(order)), searchForm.getDirection()); - } - - query.setDistinct(true); - - // Set some date constraints. - queryStringComposer.addParameter(ContentElementUtil.CREATIONDATE_FIELD, "" + searchForm.getCreationdate()); - SearchUtil.addDayConstraint(query, nodeManager, ContentElementUtil.CREATIONDATE_FIELD, searchForm - .getCreationdate()); - queryStringComposer.addParameter(ContentElementUtil.PUBLISHDATE_FIELD, "" + searchForm.getPublishdate()); - SearchUtil - .addDayConstraint(query, nodeManager, ContentElementUtil.PUBLISHDATE_FIELD, searchForm.getPublishdate()); - queryStringComposer.addParameter(ContentElementUtil.EXPIREDATE_FIELD, "" + searchForm.getExpiredate()); - SearchUtil.addDayConstraint(query, nodeManager, ContentElementUtil.EXPIREDATE_FIELD, searchForm.getExpiredate()); - queryStringComposer - .addParameter(ContentElementUtil.LASTMODIFIEDDATE_FIELD, "" + searchForm.getLastmodifieddate()); - SearchUtil.addDayConstraint(query, nodeManager, ContentElementUtil.LASTMODIFIEDDATE_FIELD, searchForm - .getLastmodifieddate()); - - // Perhaps we have some more constraints if the nodetype was specified - // (=> not contentelement). - if (!ContentElementUtil.CONTENTELEMENT.equalsIgnoreCase(nodeManager.getName())) { - FieldList fields = nodeManager.getFields(); - FieldIterator fieldIterator = fields.fieldIterator(); - - while (fieldIterator.hasNext()) { - Field field = fieldIterator.nextField(); - String paramName = nodeManager.getName() + "." + field.getName(); - String paramValue = request.getParameter(paramName); - if (StringUtils.isNotEmpty(paramValue)) { - SearchUtil.addLikeConstraint(query, field, paramValue.trim()); - } - queryStringComposer.addParameter(paramName, paramValue); - } - } - - // Add the title constraint: - if (StringUtils.isNotEmpty(searchForm.getTitle())) { - - queryStringComposer.addParameter(ContentElementUtil.TITLE_FIELD, searchForm.getTitle().trim()); - Field field = nodeManager.getField(ContentElementUtil.TITLE_FIELD); - Constraint titleConstraint = SearchUtil.createLikeConstraint(query, field, searchForm.getTitle().trim()); - SearchUtil.addConstraint(query, titleConstraint); - } - - // And some keyword searching - if (StringUtils.isNotEmpty(searchForm.getKeywords())) { - queryStringComposer.addParameter(ContentElementUtil.KEYWORD_FIELD, searchForm.getKeywords().trim()); - Field keywordField = nodeManager.getField(ContentElementUtil.KEYWORD_FIELD); - List<String> keywords = KeywordUtil.getKeywords(searchForm.getKeywords()); - for (String keyword : keywords) { - Constraint keywordConstraint = SearchUtil.createLikeConstraint(query, keywordField, keyword); - SearchUtil.addConstraint(query, keywordConstraint); - } - } - - // Set the objectid constraint - if (StringUtils.isNotEmpty(searchForm.getObjectid())) { - String stringObjectId = searchForm.getObjectid().trim(); - Integer objectId = null; - if (stringObjectId.matches("^\\d+$")) { - objectId = Integer.valueOf(stringObjectId); - } else { - if (cloud.hasNode(stringObjectId)) { - objectId = Integer.valueOf(cloud.getNode(stringObjectId).getNumber()); - } else { - objectId = Integer.valueOf(-1); - } - } - SearchUtil.addEqualConstraint(query, nodeManager, ContentElementUtil.NUMBER_FIELD, objectId); - queryStringComposer.addParameter(OBJECTID, stringObjectId); - } - - // Add the user personal: - if (StringUtils.isNotEmpty(searchForm.getPersonal())) { - - String useraccount = cloud.getUser().getIdentifier(); - if (ContentElementUtil.LASTMODIFIER_FIELD.equals(searchForm.getPersonal())) { - SearchUtil.addEqualConstraint(query, nodeManager, ContentElementUtil.LASTMODIFIER_FIELD, useraccount); - } - if (AUTHOR.equals(searchForm.getPersonal())) { - SearchUtil.addEqualConstraint(query, nodeManager, ContentElementUtil.CREATOR_FIELD, useraccount); - } - queryStringComposer.addParameter(PERSONAL, searchForm.getPersonal()); - } - - // Add the user - if (StringUtils.isNotEmpty(searchForm.getUseraccount())) { - String useraccount = searchForm.getUseraccount(); - SearchUtil.addEqualConstraint(query, nodeManager, ContentElementUtil.LASTMODIFIER_FIELD, useraccount); - } - - // 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 = cloud.getList(query); - - // Set everything on the request. - searchForm.setResultCount(resultCount); - searchForm.setResults(results); - request.setAttribute(GETURL, queryStringComposer.getQueryString()); - - return super.execute(mapping, form, request, response, cloud); - } - - private void massDeleteContent(String deleteContent) { - if (StringUtils.isNotBlank(deleteContent)) { - String[] deleteContents = deleteContent.split(","); - for (String content : deleteContents) { - deleteContent(content); - } - } - } - - private void deleteContent(String deleteContentRequest) { - StringTokenizer commandAndNumber = new StringTokenizer(deleteContentRequest, ":"); - String command = commandAndNumber.nextToken(); - String nunmber = commandAndNumber.nextToken(); - - if ("moveToRecyclebin".equals(command)) { - moveContentToRecyclebin(nunmber); - } - - if ("permanentDelete".equals(command)) { - deleteContentPermanent(nunmber); - } - - } - - private void deleteContentPermanent(String objectnumber) { - CloudProvider provider = CloudProviderFactory.getCloudProvider(); - Cloud cloud = provider.getCloud(); - - Node objectNode = cloud.getNode(objectnumber); - if (Workflow.hasWorkflow(objectNode)) { - // at this time complete is the same as remove - Workflow.complete(objectNode); - } - objectNode.delete(true); - - } - - private void moveContentToRecyclebin(String nunmber) { - CloudProvider provider = CloudProviderFactory.getCloudProvider(); - Cloud cloud = provider.getCloud(); - - Node objectNode = cloud.getNode(nunmber); - RepositoryUtil.removeCreationRelForContent(objectNode); - RepositoryUtil.removeContentFromAllChannels(objectNode); - RepositoryUtil.addContentToChannel(objectNode, RepositoryUtil.getTrash(cloud)); - - // unpublish and remove from workflow - Publish.remove(objectNode); - Workflow.remove(objectNode); - Publish.unpublish(objectNode); - } - -} Modified: CMSContainer/branches/b1_6/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms/SubSiteAction.java =================================================================== --- CMSContainer/branches/b1_6/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms/SubSiteAction.java 2009-09-22 11:18:06 UTC (rev 38758) +++ CMSContainer/branches/b1_6/CMSContainer_Modules/subsite/src/java/com/finalist/cmsc/subsite/forms/SubSiteAction.java 2009-09-22 11:18:26 UTC (rev 38759) @@ -15,8 +15,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; - -import org.apache.commons.lang.StringUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; @@ -38,17 +36,17 @@ import com.finalist.cmsc.mmbase.PropertiesUtil; import com.finalist.cmsc.navigation.NavigationUtil; 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 PagerAction { - /** + 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()); + private static final Logger log = Logging.getLoggerInstance(SubSiteAction.class.getName()); @Override public ActionForward execute(ActionMapping mapping, ActionForm form, @@ -117,7 +115,7 @@ } // Set the maximum result size. - String resultsPerPage = PropertiesUtil.getProperty(SearchAction.REPOSITORY_SEARCH_RESULTS_PER_PAGE); + String resultsPerPage = PropertiesUtil.getProperty(REPOSITORY_SEARCH_RESULTS_PER_PAGE); int maxNumber = 25; if (resultsPerPage != null && resultsPerPage.matches("\\d+")) { maxNumber = Integer.parseInt(resultsPerPage); _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs