svn commit: r1102554 [2/2] - in /ofbiz/trunk/applications/content: entitydef/ script/org/ofbiz/content/content/ servicedef/ src/org/ofbiz/content/content/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1102554 [2/2] - in /ofbiz/trunk/applications/content: entitydef/ script/org/ofbiz/content/content/ servicedef/ src/org/ofbiz/content/content/

hansbak-2
Added: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java?rev=1102554&view=auto
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java (added)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java Fri May 13 03:20:58 2011
@@ -0,0 +1,310 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.content.content;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import javolution.util.FastList;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilGenerics;
+import org.ofbiz.base.util.UtilHttp;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.content.content.ContentSearch.ResultSortOrder;
+import org.ofbiz.content.content.ContentSearch.SortKeywordRelevancy;
+import org.ofbiz.content.content.ContentSearch.ContentSearchConstraint;
+
+public class ContentSearchSession {
+
+    public static final String module = ContentSearchSession.class.getName();
+    
+    @SuppressWarnings("serial")
+ public static class ContentSearchOptions implements java.io.Serializable {
+        protected List<ContentSearchConstraint> constraintList = null;
+        protected ResultSortOrder resultSortOrder = null;
+        protected Integer viewIndex = null;
+        protected Integer viewSize = null;
+        protected boolean changed = false;
+        public ContentSearchOptions() { }
+
+        /** Basic copy constructor */
+        public ContentSearchOptions(ContentSearchOptions contentSearchOptions) {
+            this.constraintList = UtilMisc.makeListWritable(contentSearchOptions.constraintList);
+            this.resultSortOrder = contentSearchOptions.resultSortOrder;
+            this.viewIndex = contentSearchOptions.viewIndex;
+            this.viewSize = contentSearchOptions.viewSize;
+            this.changed = contentSearchOptions.changed;
+        }
+
+        public List<ContentSearchConstraint> getConstraintList() {
+            return this.constraintList;
+        }
+        public static List<ContentSearchConstraint> getConstraintList(HttpSession session) {
+            return getContentSearchOptions(session).constraintList;
+        }
+        public static void addConstraint(ContentSearchConstraint contentSearchConstraint, HttpSession session) {
+            ContentSearchOptions contentSearchOptions = getContentSearchOptions(session);
+            if (contentSearchOptions.constraintList == null) {
+                contentSearchOptions.constraintList = FastList.newInstance();
+            }
+            if (!contentSearchOptions.constraintList.contains(contentSearchConstraint)) {
+                contentSearchOptions.constraintList.add(contentSearchConstraint);
+                contentSearchOptions.changed = true;
+            }
+        }
+
+        public ResultSortOrder getResultSortOrder() {
+            if (this.resultSortOrder == null) {
+                this.resultSortOrder = new SortKeywordRelevancy();
+                this.changed = true;
+            }
+            return this.resultSortOrder;
+        }
+        public static ResultSortOrder getResultSortOrder(HttpServletRequest request) {
+            ContentSearchOptions contentSearchOptions = getContentSearchOptions(request.getSession());
+            return contentSearchOptions.getResultSortOrder();
+        }
+        public static void setResultSortOrder(ResultSortOrder resultSortOrder, HttpSession session) {
+            ContentSearchOptions contentSearchOptions = getContentSearchOptions(session);
+            contentSearchOptions.resultSortOrder = resultSortOrder;
+            contentSearchOptions.changed = true;
+        }
+
+        public static void clearSearchOptions(HttpSession session) {
+            ContentSearchOptions contentSearchOptions = getContentSearchOptions(session);
+            contentSearchOptions.constraintList = null;
+            contentSearchOptions.resultSortOrder = null;
+        }
+
+        public void clearViewInfo() {
+            this.viewIndex = null;
+            this.viewSize = null;
+        }
+
+        /**
+         * @return Returns the viewIndex.
+         */
+        public Integer getViewIndex() {
+            return viewIndex;
+        }
+        /**
+         * @param viewIndex The viewIndex to set.
+         */
+        public void setViewIndex(Integer viewIndex) {
+            this.viewIndex = viewIndex;
+        }
+        /**
+         * @return Returns the viewSize.
+         */
+        public Integer getViewSize() {
+            return viewSize;
+        }
+        /**
+         * @param viewSize The viewSize to set.
+         */
+        public void setViewSize(Integer viewSize) {
+            this.viewSize = viewSize;
+        }
+
+        public List<String> searchGetConstraintStrings(boolean detailed, Delegator delegator, Locale locale) {
+            List<ContentSearchConstraint> contentSearchConstraintList = this.getConstraintList();
+            List<String> constraintStrings = FastList.newInstance();
+            if (contentSearchConstraintList == null) {
+                return constraintStrings;
+            }
+            for (ContentSearchConstraint contentSearchConstraint: contentSearchConstraintList) {
+                if (contentSearchConstraint == null) continue;
+                String constraintString = contentSearchConstraint.prettyPrintConstraint(delegator, detailed, locale);
+                if (UtilValidate.isNotEmpty(constraintString)) {
+                    constraintStrings.add(constraintString);
+                } else {
+                    constraintStrings.add("Description not available");
+                }
+            }
+            return constraintStrings;
+        }
+    }
+
+    public static ContentSearchOptions getContentSearchOptions(HttpSession session) {
+        ContentSearchOptions contentSearchOptions = (ContentSearchOptions) session.getAttribute("_CONTENT_SEARCH_OPTIONS_CURRENT_");
+        if (contentSearchOptions == null) {
+            contentSearchOptions = new ContentSearchOptions();
+            session.setAttribute("_CONTENT_SEARCH_OPTIONS_CURRENT_", contentSearchOptions);
+        }
+        return contentSearchOptions;
+    }
+
+    public static void processSearchParameters(Map<String, Object> parameters, HttpServletRequest request) {
+        Boolean alreadyRun = (Boolean) request.getAttribute("processSearchParametersAlreadyRun");
+        if (Boolean.TRUE.equals(alreadyRun)) {
+            return;
+        } else {
+            request.setAttribute("processSearchParametersAlreadyRun", Boolean.TRUE);
+        }
+        HttpSession session = request.getSession();
+        boolean constraintsChanged = false;
+
+        // clear search? by default yes, but if the clearSearch parameter is N then don't
+        String clearSearchString = (String) parameters.get("clearSearch");
+        if (!"N".equals(clearSearchString)) {
+            searchClear(session);
+            constraintsChanged = true;
+        } else {
+            String removeConstraint = (String) parameters.get("removeConstraint");
+            if (UtilValidate.isNotEmpty(removeConstraint)) {
+                try {
+                    searchRemoveConstraint(Integer.parseInt(removeConstraint), session);
+                    constraintsChanged = true;
+                } catch (Exception e) {
+                    Debug.logError(e, "Error removing constraint [" + removeConstraint + "]", module);
+                }
+            }
+        }
+
+        // add a Content Assoc Type to the search
+        if (UtilValidate.isNotEmpty(parameters.get("SEARCH_CONTENT_ID"))) {
+            String contentId=(String) parameters.get("SEARCH_CONTENT_ID");
+            String contentAssocTypeId=(String) parameters.get("contentAssocTypeId");
+            boolean includeAllSubContents =!"N".equalsIgnoreCase((String) parameters.get("SEARCH_SUB_CONTENTS"));
+            searchAddConstraint(new ContentSearch.ContentAssocConstraint(contentId,contentAssocTypeId,includeAllSubContents), session);
+            constraintsChanged = true;
+        }
+
+        // add a Content fromDate thruDate to the search
+        if (UtilValidate.isNotEmpty(parameters.get("fromDate")) || UtilValidate.isNotEmpty(parameters.get("thruDate"))) {
+            Timestamp fromDate =null;
+            if (UtilValidate.isNotEmpty(parameters.get("fromDate"))) {
+                fromDate=Timestamp.valueOf((String) parameters.get("fromDate"));
+            }
+
+            Timestamp thruDate = null;
+            if (UtilValidate.isNotEmpty(parameters.get("thruDate"))) {
+                thruDate = Timestamp.valueOf((String) parameters.get("thruDate"));
+            }
+            searchAddConstraint(new ContentSearch.LastUpdatedRangeConstraint(fromDate,thruDate), session);
+            constraintsChanged = true;
+        }
+
+        // if keywords were specified, add a constraint for them
+        if (UtilValidate.isNotEmpty(parameters.get("SEARCH_STRING"))) {
+            String keywordString = (String) parameters.get("SEARCH_STRING");
+            String searchOperator = (String) parameters.get("SEARCH_OPERATOR");
+            // defaults to true/Y, ie anything but N is true/Y
+            boolean anyPrefixSuffix = !"N".equals(parameters.get("SEARCH_ANYPRESUF"));
+            searchAddConstraint(new ContentSearch.KeywordConstraint(keywordString, anyPrefixSuffix, anyPrefixSuffix, null, "AND".equals(searchOperator)), session);
+            constraintsChanged = true;
+        }
+        // set the sort order
+        String sortOrder = (String) parameters.get("sortOrder");
+        String sortAscending = (String) parameters.get("sortAscending");
+        boolean ascending = !"N".equals(sortAscending);
+        if (sortOrder != null) {
+            if (sortOrder.equals("SortKeywordRelevancy")) {
+                searchSetSortOrder(new ContentSearch.SortKeywordRelevancy(), session);
+            } else if (sortOrder.startsWith("SortContentField:")) {
+                String fieldName = sortOrder.substring("SortContentField:".length());
+                searchSetSortOrder(new ContentSearch.SortContentField(fieldName, ascending), session);
+            }
+        }
+
+        ContentSearchOptions contentSearchOptions = getContentSearchOptions(session);
+        if (constraintsChanged) {
+            // query changed, clear out the VIEW_INDEX & VIEW_SIZE
+            contentSearchOptions.clearViewInfo();
+        }
+
+        String viewIndexStr = (String) parameters.get("VIEW_INDEX");
+        if (UtilValidate.isNotEmpty(viewIndexStr)) {
+            try {
+                contentSearchOptions.setViewIndex(Integer.valueOf(viewIndexStr));
+            } catch (Exception e) {
+                Debug.logError(e, "Error formatting VIEW_INDEX, setting to 0", module);
+                // we could just do nothing here, but we know something was specified so we don't want to use the previous value from the session
+                contentSearchOptions.setViewIndex(Integer.valueOf(0));
+            }
+        }
+
+        String viewSizeStr = (String) parameters.get("VIEW_SIZE");
+        if (UtilValidate.isNotEmpty(viewSizeStr)) {
+            try {
+                contentSearchOptions.setViewSize(Integer.valueOf(viewSizeStr));
+            } catch (Exception e) {
+                Debug.logError(e, "Error formatting VIEW_SIZE, setting to 20", module);
+                contentSearchOptions.setViewSize(Integer.valueOf(20));
+            }
+        }
+    }
+
+    public static void searchAddConstraint(ContentSearchConstraint contentSearchConstraint, HttpSession session) {
+        ContentSearchOptions.addConstraint(contentSearchConstraint, session);
+    }
+    public static void searchSetSortOrder(ResultSortOrder resultSortOrder, HttpSession session) {
+        ContentSearchOptions.setResultSortOrder(resultSortOrder, session);
+    }
+    public static List<ContentSearchOptions> getSearchOptionsHistoryList(HttpSession session) {
+        List<ContentSearchOptions> optionsHistoryList = UtilGenerics.checkList(session.getAttribute("_CONTENT_SEARCH_OPTIONS_HISTORY_"));
+        if (optionsHistoryList == null) {
+            optionsHistoryList = FastList.newInstance();
+            session.setAttribute("_CONTENT_SEARCH_OPTIONS_HISTORY_", optionsHistoryList);
+        }
+        return optionsHistoryList;
+    }
+
+    public static List<String> searchGetConstraintStrings(boolean detailed, HttpSession session, Delegator delegator) {
+        Locale locale = UtilHttp.getLocale(session);
+        ContentSearchOptions contentSearchOptions = getContentSearchOptions(session);
+        return contentSearchOptions.searchGetConstraintStrings(detailed, delegator, locale);
+    }
+    public static String searchGetSortOrderString(boolean detailed, HttpServletRequest request) {
+        Locale locale = UtilHttp.getLocale(request);
+        ResultSortOrder resultSortOrder = ContentSearchOptions.getResultSortOrder(request);
+        if (resultSortOrder == null) return "";
+        return resultSortOrder.prettyPrintSortOrder(detailed, locale);
+    }
+    public static void checkSaveSearchOptionsHistory(HttpSession session) {
+        ContentSearchOptions contentSearchOptions = ContentSearchSession.getContentSearchOptions(session);
+        // if the options have changed since the last search, add it to the beginning of the search options history
+        if (contentSearchOptions.changed) {
+            List<ContentSearchOptions> optionsHistoryList = ContentSearchSession.getSearchOptionsHistoryList(session);
+            optionsHistoryList.add(0, new ContentSearchOptions(contentSearchOptions));
+            contentSearchOptions.changed = false;
+        }
+    }
+    public static void searchRemoveConstraint(int index, HttpSession session) {
+        List<ContentSearchConstraint> contentSearchConstraintList = ContentSearchOptions.getConstraintList(session);
+        if (contentSearchConstraintList == null) {
+            return;
+        } else if (index >= contentSearchConstraintList.size()) {
+            return;
+        } else {
+            contentSearchConstraintList.remove(index);
+        }
+    }
+    public static void searchClear(HttpSession session) {
+        ContentSearchOptions.clearSearchOptions(session);
+    }
+}

Propchange: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentSearchSession.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain