View Javadoc
1   /**
2    * This file Copyright (c) 2003-2014 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.cms.gui.controlx.search;
35  
36  import info.magnolia.cms.gui.query.SearchQuery;
37  import info.magnolia.cms.gui.query.SearchQueryExpression;
38  import info.magnolia.cms.gui.query.SearchQueryOperator;
39  import info.magnolia.cms.gui.query.StringSearchQueryParameter;
40  
41  import java.util.ArrayList;
42  import java.util.Collection;
43  import java.util.Iterator;
44  import java.util.List;
45  
46  import org.apache.commons.lang.StringUtils;
47  
48  
49  /**
50   * @author Philipp Bracher
51   * @version $Revision$ ($Author$)
52   */
53  public class SimpleSearchUtil {
54  
55      /**
56       * Creates an orified query based on the passed config
57       * @param searchStr
58       * @param config
59       * @return
60       */
61      public static SearchQuery getSimpleSearchQuery(String searchStr, SearchConfig config) {
62          SearchQuery query = new SearchQuery();
63          query.setRootExpression(getSimpleSearchExpression(searchStr, config));
64          return query;
65      }
66  
67      /**
68       * Creates a query using the special search field name '*'
69       * @param searchStr
70       * @return
71       */
72      public static SearchQuery getSimpleSearchQuery(String searchStr) {
73          SearchQuery query = new SearchQuery();
74          if (StringUtils.isNotEmpty(searchStr)) {
75              SearchQueryExpression exp = new StringSearchQueryParameter(
76                  "*",
77                  searchStr,
78                  StringSearchQueryParameter.CONTAINS);
79              query.setRootExpression(exp);
80          }
81          return query;
82      }
83  
84      /**
85       * Return the expression build by a simple search
86       */
87      public static SearchQueryExpression getSimpleSearchExpression(String searchStr, SearchConfig config) {
88          if (StringUtils.isNotEmpty(searchStr)) {
89              List expressions = new ArrayList();
90              for (Iterator iter = config.getControlDefinitions().iterator(); iter.hasNext();) {
91                  SearchControlDefinition def = (SearchControlDefinition) iter.next();
92                  expressions.add(new StringSearchQueryParameter(
93                      def.getColumn(),
94                      searchStr,
95                      StringSearchQueryParameter.CONTAINS));
96              }
97              return chainExpressions(expressions, SearchQueryOperator.OR);
98          }
99  
100         return null;
101     }
102 
103     public static SearchQueryExpression chainExpressions(Collection expressions, String operator) {
104         SearchQueryExpression expr = null;
105         for (Iterator iter = expressions.iterator(); iter.hasNext();) {
106             SearchQueryExpression newExpr = (SearchQueryExpression) iter.next();
107             if (expr == null) {
108                 expr = newExpr;
109             }
110             else {
111                 SearchQueryOperator opt = new SearchQueryOperator(operator);
112                 opt.setleft(newExpr);
113                 opt.setRight(expr);
114                 expr = opt;
115             }
116         }
117         return expr;
118     }
119 
120 
121 
122 }