LikeExpressionImpl.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.generic_project.expression.impl;
- import org.openspcoop2.generic_project.beans.ComplexField;
- import org.openspcoop2.generic_project.beans.IField;
- import org.openspcoop2.generic_project.expression.LikeMode;
- import org.openspcoop2.generic_project.expression.impl.formatter.IObjectFormatter;
- import org.openspcoop2.utils.LoggerWrapperFactory;
- import org.openspcoop2.utils.TipiDatabase;
- import org.openspcoop2.utils.sql.EscapeSQLPattern;
- import org.openspcoop2.utils.sql.ISQLQueryObject;
- import org.openspcoop2.utils.sql.SQLObjectFactory;
- /**
- * LikeExpressionImpl
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class LikeExpressionImpl extends AbstractCommonFieldValueBaseExpressionImpl {
- private LikeMode mode;
- private boolean caseInsensitive;
-
- public LikeExpressionImpl(IObjectFormatter objectFormatter,IField field,String value,LikeMode mode,boolean caseInsensitive){
- super(objectFormatter, field, value);
- this.mode = mode;
- this.caseInsensitive = caseInsensitive;
- }
-
- public LikeMode getMode() {
- return this.mode;
- }
- public void setMode(LikeMode mode) {
- this.mode = mode;
- }
- public boolean isCaseInsensitive() {
- return this.caseInsensitive;
- }
- public void setCaseInsensitive(boolean caseInsensitive) {
- this.caseInsensitive = caseInsensitive;
- }
- @Override
- public String toString(){
- StringBuilder bf = new StringBuilder();
- if(isNot()){
- bf.append("( NOT ");
- }
- bf.append("( ");
- if(this.caseInsensitive){
- bf.append("lower(");
- }
- if(this.field instanceof ComplexField){
- ComplexField cf = (ComplexField) this.field;
- if(cf.getFather()!=null){
- bf.append(cf.getFather().getFieldName());
- }else{
- bf.append(this.field.getClassName());
- }
- }else{
- bf.append(this.field.getClassName());
- }
- bf.append(".");
- bf.append(this.field.getFieldName());
- if(this.caseInsensitive){
- bf.append(")");
- }
- bf.append(" like '");
-
- String likeValue = this.value;
-
- // escape
- String escapeClausole = "";
- try{
- ISQLQueryObject sqlQueryObjectForEscape = SQLObjectFactory.createSQLQueryObject(TipiDatabase.POSTGRESQL); // lo uso come default per produrre la stringa
- EscapeSQLPattern escapePattern = sqlQueryObjectForEscape.escapePatternValue(likeValue);
- if(escapePattern.isUseEscapeClausole()){
- escapeClausole = " ESCAPE '"+escapePattern.getEscapeClausole()+"'";
- }
- likeValue = escapePattern.getEscapeValue();
- }catch(Exception e){
- LoggerWrapperFactory.getLogger(LikeExpressionImpl.class).error(e.getMessage(),e);
- }
-
- String likeParam = getLikeParam(likeValue);
- bf.append(likeParam);
- bf.append("'");
- bf.append(escapeClausole);
- bf.append(" )");
- if(isNot()){
- bf.append(" )");
- }
- return bf.toString();
- }
-
- private String getLikeParam(String likeValue) {
- String likeParam = null;
- switch (this.mode) {
- case EXACT:
- if(this.caseInsensitive){
- likeParam = likeValue.toLowerCase();
- }else{
- likeParam = likeValue;
- }
- break;
- case ANYWHERE:
- if(this.caseInsensitive){
- likeParam = "%"+likeValue.toLowerCase()+"%";
- }else{
- likeParam = "%"+likeValue+"%";
- }
- break;
- case END:
- if(this.caseInsensitive){
- likeParam = "%"+likeValue.toLowerCase();
- }else{
- likeParam = "%"+likeValue;
- }
- break;
- case START:
- if(this.caseInsensitive){
- likeParam = likeValue.toLowerCase()+"%";
- }else{
- likeParam = likeValue+"%";
- }
- break;
- default:
- break;
- }
- return likeParam;
- }
-
- }