View Javadoc

1   /*
2    * Copyright 2004-2006 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  /*
17   * Created on 2005/09/09
18   *
19   * TODO To change the template for this generated file go to
20   * Window - Preferences - Java - Code Style - Code Templates
21   */
22  package org.seasar.tuigwaa.database.function.criteria;
23  
24  
25  
26  /***
27   * @author nishioka
28   */
29  public class LikeCriteriaFunction extends AbstractCriteriaFunction {
30  	
31  	public static final String TYPE_IN = "in";
32  
33  	public static final String TYPE_HEAD = "head";
34  
35  	public static final String TYPE_TAIL = "tail";
36  	
37  	public LikeCriteriaFunction() {
38  		super();
39  	}
40  
41  	public LikeCriteriaFunction(String field) {
42  		super(field);
43  	}
44  
45  	public LikeCriteriaFunction(String field, Object value) {
46  		super(field, value);
47  	}
48  
49  	public LikeCriteriaFunction(String field, Object value, String option) {
50  		super(field, value);
51  		setOption(option);
52  	}
53  	
54  	public Object evaluate(ICriteria criteria) {
55  		return evaluate(criteria, getValue());
56  	}
57  	
58  	public Object evaluate(ICriteria criteria, Object value) {
59  		String str = null;
60  		
61  		String escapedValue = null;		
62  		if(value != null){
63  			escapedValue = escapeWord(value.toString());			
64  		}
65  		
66  		if(escapedValue == null || "".equals(escapedValue)){
67  			str = "";
68  		}else if (TYPE_HEAD.equals(getOption())) {			
69  			str = escapedValue + "%";
70  		} else if (TYPE_TAIL.equals(getOption())) {
71  			str = "%" + escapedValue;
72  		} else if (TYPE_IN.equals(getOption())) {
73  			str = "%" + escapedValue + "%";
74  		}
75  		return criteria.addLike(getField(), str);
76  	}
77  	
78  	private static final String escapeWord(String value){
79  
80  		if(value == null || "".equals(value)){
81  			return "";
82  		}
83  		
84  		char[] c = value.toCharArray();		
85  		StringBuffer buf = new StringBuffer();
86  		for(int i=0;i<c.length;i++){
87  			if(c[i] == '%' || c[i] == '_'){
88  				if(i==0 || c[i-1] != '//'){
89  					buf.append('//');					
90  				}				
91  			}
92  			buf.append(c[i]);
93  		}		
94  		String ret = buf.toString();		
95  //		String ret = value.replaceAll("%","//%");
96  //		ret = ret.replaceAll("_","//_");						
97  		return ret;
98  	}
99  	
100 	
101 	
102 }