Merged from trunk to statistics branch
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / query / MatchMode.java
1 // $Id$
2 /**
3
4 * Copyright (C) 2009 EDIT
5 * European Distributed Institute of Taxonomy
6 * http://www.e-taxonomy.eu
7 *
8 * The contents of this file are subject to the Mozilla Public License Version 1.1
9 * See LICENSE.TXT at the top of this package for the full license terms.
10 */
11 package eu.etaxonomy.cdm.persistence.query;
12
13
14 /**
15 *
16 *
17 * @author a.babadshanjan
18 * @created 03.03.2009
19 * @version 1.0
20 */
21 public enum MatchMode {
22
23 /**
24 * translates into <code>field = term</code>
25 */
26 EXACT("="),
27 /**
28 * translates into <code>field LIKE %term</code>
29 */
30 BEGINNING("LIKE"),
31 /**
32 * translates into <code>field LIKE %term%</code>
33 */
34 ANYWHERE("LIKE"),
35 /**
36 * translates into <code>field LIKE term%</code>
37 */
38 END("LIKE");
39
40 private static final char STAR_WILDCARD = '*';
41 private static final char SQL_WILDCARD = '%';
42 private String matchOperator;
43 private final String wildcardStr = "" + SQL_WILDCARD;
44
45 MatchMode(String matchOperator){
46 this.matchOperator = matchOperator;
47 }
48
49 public String queryStringFrom(String queryString){
50 if(queryString == null){
51 return "";
52 }
53 queryString = queryString.replace(STAR_WILDCARD, SQL_WILDCARD);
54 switch(this){
55 case BEGINNING:
56 queryString = appendWildcard(queryString);
57 break;
58 case END:
59 queryString = prependWildcard(queryString);
60 break;
61 case ANYWHERE:
62 queryString = appendWildcard(queryString);
63 queryString = prependWildcard(queryString);
64 break;
65 default:
66 // Fall through for EXACT - Nothing to do //
67 break;
68 }
69 return queryString;
70 }
71
72 /**
73 * @param queryString
74 * @return
75 */
76 private String prependWildcard(String queryString) {
77 if(!queryString.startsWith(wildcardStr)){
78 queryString += wildcardStr;
79 }
80 return queryString;
81 }
82
83 /**
84 * @param queryString
85 * @return
86 */
87 private String appendWildcard(String queryString) {
88 if(!queryString.endsWith(wildcardStr)){
89 queryString += wildcardStr;
90 }
91 return queryString;
92 }
93
94 public String getMatchOperator(){
95 return matchOperator;
96 }
97 }