FilterImpl.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.monitor.engine.condition;
- import org.openspcoop2.monitor.engine.utils.ContentFormatter;
- import org.openspcoop2.monitor.sdk.condition.IFilter;
- import org.openspcoop2.monitor.sdk.condition.IStatisticFilter;
- import org.openspcoop2.monitor.sdk.constants.LikeMode;
- import org.openspcoop2.monitor.sdk.constants.MessageType;
- import org.openspcoop2.monitor.sdk.exceptions.SearchException;
- import org.openspcoop2.monitor.sdk.statistic.StatisticFilterName;
- import org.openspcoop2.monitor.sdk.statistic.StatisticResourceFilter;
- import org.openspcoop2.monitor.sdk.statistic.StatisticFilter;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import org.slf4j.Logger;
- import org.openspcoop2.generic_project.beans.IField;
- import org.openspcoop2.generic_project.exception.ExpressionException;
- import org.openspcoop2.generic_project.exception.ExpressionNotImplementedException;
- import org.openspcoop2.generic_project.expression.IExpression;
- import org.openspcoop2.generic_project.expression.impl.sql.ISQLFieldConverter;
- import org.openspcoop2.utils.LoggerWrapperFactory;
- import org.openspcoop2.utils.TipiDatabase;
- /**
- * FilterImpl
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public abstract class FilterImpl implements IStatisticFilter {
-
- protected IExpression expression;
- protected TipiDatabase databaseType;
- protected ISQLFieldConverter fieldConverter;
- private String idStatistic;
- protected FilterImpl(IExpression expression,TipiDatabase databaseType, ISQLFieldConverter fieldConverter) {
- this.expression = expression;
- this.databaseType = databaseType;
- this.fieldConverter = fieldConverter;
- }
- public IExpression getExpression() {
- return this.expression;
- }
-
- protected static Logger logger = LoggerWrapperFactory.getLogger(FilterImpl.class);
-
-
-
- /* ************ UTILS *********** */
-
- protected abstract IStatisticFilter newIFilter() throws SearchException;
-
- protected abstract IExpression newIExpression() throws SearchException;
-
- protected abstract IField getIFieldForMessageType() throws SearchException;
-
- protected abstract List<IField> getIFieldForResourceName(StatisticFilterName statisticFilter) throws SearchException;
- protected abstract IField getIFieldForResourceValue(IField fieldResourceName) throws SearchException;
-
- private void check(StatisticResourceFilter resourceStatID) throws SearchException{
- if(resourceStatID.getStatisticFilterName()==null){
- throw new SearchException("Required StatisticFilterName undefined");
- }
- if(resourceStatID.getResourceID()==null){
- throw new SearchException("Required ResourceID undefined");
- }
- }
- private void check(StatisticFilter resource) throws SearchException{
- if(resource.getStatisticFilterName()==null){
- throw new SearchException("Required StatisticFilterName undefined");
- }
- if(resource.getResourceID()==null){
- throw new SearchException("Required ResourceID undefined");
- }
- if(resource.getValue()==null){
- throw new SearchException("Required Value undefined");
- }
- }
-
-
- /* ************ ID STATISTICA *********** */
-
- /**
- * Return optional statistic id
- *
- * @return statistic id
- */
- public String getIdStatistic() {
- return this.idStatistic;
- }
- @Override
- public void setIdStatistic(String idStatistic) {
- this.idStatistic = idStatistic;
- }
-
-
-
-
- /* ************ STATE OF EXPRESSION *********** */
-
- /**
- * Make the negation of the expression
- *
- * @return the instance of itself
- * @throws ExpressionNotImplementedException Method not implemented
- * @throws ExpressionException Error Processing
- */
- @Override
- public IStatisticFilter not() throws SearchException{
- try{
- this.expression.not();
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Use the conjunction "AND" for all expressions
- *
- * @return the instance of itself
- * @throws ExpressionNotImplementedException Method not implemented
- * @throws ExpressionException Error Processing
- */
- @Override
- public IStatisticFilter and() throws SearchException{
- try{
- this.expression.and();
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- /**
- * Use the conjunction "OR" for all expressions
- *
- * @return the instance of itself
- * @throws ExpressionNotImplementedException Method not implemented
- * @throws ExpressionException Error Processing
- */
- @Override
- public IStatisticFilter or() throws SearchException{
- try{
- this.expression.or();
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
- /* ************ COMPARATOR *********** */
-
- /**
- * Create an expression of equality
- * Example: (field = value)
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter equals(String resourceID, Object value) throws SearchException{
- return this._equals(null, resourceID, value);
- }
- @Override
- public IStatisticFilter equals(StatisticResourceFilter resourceID, Object value) throws SearchException{
- return this._equals(resourceID, null, value);
- }
- private IStatisticFilter _equals(StatisticResourceFilter resourceStatID, String resourceID, Object value) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.equals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.equals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- /**
- * Create an expression of inequality
- * Example: (field <> value)
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter notEquals(String resourceID, Object value) throws SearchException{
- return this._notEquals(null, resourceID, value);
- }
- @Override
- public IStatisticFilter notEquals(StatisticResourceFilter resourceID, Object value) throws SearchException{
- return this._notEquals(resourceID, null, value);
- }
- private IStatisticFilter _notEquals(StatisticResourceFilter resourceStatID, String resourceID, Object value) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.notEquals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.notEquals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- /**
- * Create an expression of equality to each resource in the collection of the keys of the Map
- * Use the conjunction "AND" for all expressions
- * Example: ( field[0]=values[0] AND field[1]=values[1] ..... AND field[N]=values[N] )
- *
- * @param propertyNameValues Map that contains identifiers and their values
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter allEquals(Map<String, Object> propertyNameValues) throws SearchException{
- return this.allEquals(propertyNameValues, true);
- }
- @Override
- public IStatisticFilter allEquals(List<StatisticFilter> propertyNameValues) throws SearchException{
- return this.allEquals(propertyNameValues, true);
- }
- /**
- * Create an expression of inequality to each resource in the collection of the keys of the Map
- * Use the conjunction "AND" for all expressions
- * Example: ( field[0]<>values[0] AND field[1]<>values[1] ..... AND field[N]<>values[N] )
- *
- * @param propertyNameValues Map that contains identifiers and their values
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter allNotEquals(Map<String, Object> propertyNameValues)
- throws SearchException{
- return this.allNotEquals(propertyNameValues, true);
- }
- @Override
- public IStatisticFilter allNotEquals(List<StatisticFilter> propertyNameValues)
- throws SearchException{
- return this.allEquals(propertyNameValues, true);
- }
-
- /**
- * Create an expression of equality to each resource in the collection of the keys of the Map
- * Use the conjunction defined by <var>andConjunction</var> for all expressions
- * Example: ( field[0]=values[0] <var>andConjunction</var> field[1]=values[1] ..... <var>andConjunction</var> field[N]=values[N] )
- *
- * @param propertyNameValues Map that contains identifiers and their values
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter allEquals(Map<String, Object> propertyNameValues,boolean andConjunction) throws SearchException{
- try{
- if(propertyNameValues.size()>0){
- IExpression exprAll = this.newIExpression();
- if(andConjunction)
- exprAll.and();
- else
- exprAll.or();
- Iterator<String> keys = propertyNameValues.keySet().iterator();
- while (keys.hasNext()) {
- String resourceID = (String) keys.next();
- Object value = propertyNameValues.get(resourceID);
- FilterImpl f = (FilterImpl) this.newFilter();
- f.equals(resourceID, value);
- exprAll.and(f.getExpression());
- }
- this.expression.and(exprAll);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- @Override
- public IStatisticFilter allEquals(List<StatisticFilter> propertyNameValues,boolean andConjunction) throws SearchException{
- try{
- if(propertyNameValues.size()>0){
- IExpression exprAll = this.newIExpression();
- if(andConjunction)
- exprAll.and();
- else
- exprAll.or();
- for (StatisticFilter statisticsFilter : propertyNameValues) {
- this.check(statisticsFilter);
- FilterImpl f = (FilterImpl) this.newFilter();
- StatisticResourceFilter sf = new StatisticResourceFilter();
- sf.setResourceID(statisticsFilter.getResourceID());
- sf.setStatisticFilterName(statisticsFilter.getStatisticFilterName());
- f.equals(sf, statisticsFilter.getValue());
- exprAll.and(f.getExpression());
- }
- this.expression.and(exprAll);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- /**
- * Create an expression of inequality to each resource in the collection of the keys of the Map
- * Use the conjunction defined by <var>andConjunction</var> for all expressions
- * Example: ( field[0]<>values[0] <var>andConjunction</var> field[1]<>values[1] ..... <var>andConjunction</var> field[N]<>values[N] )
- *
- * @param propertyNameValues Map that contains identifiers and their values
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter allNotEquals(Map<String, Object> propertyNameValues,boolean andConjunction)
- throws SearchException{
- try{
- if(propertyNameValues.size()>0){
- IExpression exprAll = this.newIExpression();
- if(andConjunction)
- exprAll.and();
- else
- exprAll.or();
- Iterator<String> keys = propertyNameValues.keySet().iterator();
- while (keys.hasNext()) {
- String resourceID = (String) keys.next();
- Object value = propertyNameValues.get(resourceID);
- FilterImpl f = (FilterImpl) this.newFilter();
- f.notEquals(resourceID, value);
- exprAll.and(f.getExpression());
- }
- this.expression.and(exprAll);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- @Override
- public IStatisticFilter allNotEquals(List<StatisticFilter> propertyNameValues,boolean andConjunction)
- throws SearchException{
- try{
- if(propertyNameValues.size()>0){
- IExpression exprAll = this.newIExpression();
- if(andConjunction)
- exprAll.and();
- else
- exprAll.or();
- for (StatisticFilter statisticsFilter : propertyNameValues) {
- this.check(statisticsFilter);
- FilterImpl f = (FilterImpl) this.newFilter();
- StatisticResourceFilter sf = new StatisticResourceFilter();
- sf.setResourceID(statisticsFilter.getResourceID());
- sf.setStatisticFilterName(statisticsFilter.getStatisticFilterName());
- f.notEquals(sf, statisticsFilter.getValue());
- exprAll.and(f.getExpression());
- }
- this.expression.and(exprAll);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
- /**
- * Create an expression "greaterThan"
- * Example: (field > value)
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter greaterThan(String resourceID, Object value)
- throws SearchException{
- return this._greaterThan(null, resourceID, value);
- }
- @Override
- public IStatisticFilter greaterThan(StatisticResourceFilter resourceID, Object value)
- throws SearchException{
- return this._greaterThan(resourceID, null, value);
- }
- private IStatisticFilter _greaterThan(StatisticResourceFilter resourceStatID, String resourceID, Object value)
- throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.greaterThan(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.greaterThan(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "greaterEquals"
- * Example: (field >= value)
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter greaterEquals(String resourceID, Object value)
- throws SearchException{
- return this._greaterEquals(null, resourceID, value);
- }
- @Override
- public IStatisticFilter greaterEquals(StatisticResourceFilter resourceID, Object value)
- throws SearchException{
- return this._greaterEquals(resourceID, null, value);
- }
- private IStatisticFilter _greaterEquals(StatisticResourceFilter resourceStatID,String resourceID, Object value)
- throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.greaterEquals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.greaterEquals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "lessThan"
- * Example: (field < value)
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter lessThan(String resourceID, Object value)
- throws SearchException{
- return this._lessThan(null, resourceID, value);
- }
- @Override
- public IStatisticFilter lessThan(StatisticResourceFilter resourceID, Object value)
- throws SearchException{
- return this._lessThan(resourceID, null, value);
- }
- private IStatisticFilter _lessThan(StatisticResourceFilter resourceStatID,String resourceID, Object value)
- throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.lessThan(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.lessThan(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "lessEquals"
- * Example: (field <= value)
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter lessEquals(String resourceID, Object value)
- throws SearchException{
- return this._lessEquals(null, resourceID, value);
- }
- @Override
- public IStatisticFilter lessEquals(StatisticResourceFilter resourceID, Object value)
- throws SearchException{
- return this._lessEquals(resourceID, null, value);
- }
- private IStatisticFilter _lessEquals(StatisticResourceFilter resourceStatID,String resourceID, Object value)
- throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.lessEquals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.lessEquals(this.getIFieldForResourceValue(fieldResourceName), ContentFormatter.toString(value));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
-
-
-
-
- /* ************ SPECIAL COMPARATOR *********** */
-
- /**
- * Create an expression "is null"
- * Example: ( field is null )
- *
- * @param resourceID Resource identifier
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter isNull(String resourceID) throws SearchException{
- return this._isNull(null, resourceID);
- }
- @Override
- public IStatisticFilter isNull(StatisticResourceFilter resourceID) throws SearchException{
- return this._isNull(resourceID, null);
- }
- private IStatisticFilter _isNull(StatisticResourceFilter resourceStatID,String resourceID) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.isNull(this.getIFieldForResourceValue(fieldResourceName));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.isNull(this.getIFieldForResourceValue(fieldResourceName));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "is not null"
- * Example: ( field is not null )
- *
- * @param resourceID Resource identifier
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter isNotNull(String resourceID) throws SearchException{
- return this._isNotNull(null, resourceID);
- }
- @Override
- public IStatisticFilter isNotNull(StatisticResourceFilter resourceID) throws SearchException{
- return this._isNotNull(resourceID,null);
- }
- private IStatisticFilter _isNotNull(StatisticResourceFilter resourceStatID,String resourceID) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.isNotNull(this.getIFieldForResourceValue(fieldResourceName));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.isNotNull(this.getIFieldForResourceValue(fieldResourceName));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "is empty"
- * Example: ( field = '' )
- *
- * @param resourceID Resource identifier
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter isEmpty(String resourceID) throws SearchException{
- return this._isEmpty(null, resourceID);
- }
- @Override
- public IStatisticFilter isEmpty(StatisticResourceFilter resourceID) throws SearchException{
- return this._isEmpty(resourceID,null);
- }
- private IStatisticFilter _isEmpty(StatisticResourceFilter resourceStatID,String resourceID) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.isEmpty(this.getIFieldForResourceValue(fieldResourceName));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.isEmpty(this.getIFieldForResourceValue(fieldResourceName));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "is not empty"
- * Example: ( field <> '' )
- *
- * @param resourceID Resource identifier
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter isNotEmpty(String resourceID) throws SearchException{
- return this._isNotEmpty(null, resourceID);
- }
- @Override
- public IStatisticFilter isNotEmpty(StatisticResourceFilter resourceID) throws SearchException{
- return this._isNotEmpty(resourceID, null);
- }
- private IStatisticFilter _isNotEmpty(StatisticResourceFilter resourceStatID,String resourceID) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.isNotEmpty(this.getIFieldForResourceValue(fieldResourceName));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.isNotEmpty(this.getIFieldForResourceValue(fieldResourceName));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
-
-
-
- /* ************ BETWEEN *********** */
-
- /**
- * Create an expression "between"
- * Example: ( field BEETWEEN lower AND high )
- *
- * @param resourceID Resource identifier
- * @param lower Lower limit value to be applied to the constraint
- * @param high Higher limit value to be applied to the constraint
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter between(String resourceID, Object lower, Object high)
- throws SearchException{
- return this._between(null, resourceID, lower, high);
- }
- @Override
- public IStatisticFilter between(StatisticResourceFilter resourceID, Object lower, Object high)
- throws SearchException{
- return this._between(resourceID, null, lower, high);
- }
- private IStatisticFilter _between(StatisticResourceFilter resourceStatID,String resourceID, Object lower, Object high)
- throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.between(this.getIFieldForResourceValue(fieldResourceName),ContentFormatter.toString(lower),ContentFormatter.toString(high));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.between(this.getIFieldForResourceValue(fieldResourceName),ContentFormatter.toString(lower),ContentFormatter.toString(high));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
-
-
- /* ************ LIKE *********** */
-
- /**
- * Create an expression "like"
- * Example: ( field like '%value%' )
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter like(String resourceID, String value) throws SearchException{
- return this._like(null, resourceID, value);
- }
- @Override
- public IStatisticFilter like(StatisticResourceFilter resourceID, String value) throws SearchException{
- return this._like(resourceID, null, value);
- }
- private IStatisticFilter _like(StatisticResourceFilter resourceStatID,String resourceID, String value) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.like(this.getIFieldForResourceValue(fieldResourceName),value);
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.like(this.getIFieldForResourceValue(fieldResourceName),value);
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "like"
- * Example:
- * LikeMode.ANYWHERE -> ( field like '%value%' )
- * LikeMode.EXACT -> ( field like 'value' )
- * LikeMode.END -> ( field like '%value' )
- * LikeMode.START -> ( field like 'value%' )
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @param mode LikeMode
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter like(String resourceID, String value, LikeMode mode) throws SearchException{
- return this._like(null, resourceID, value, mode);
- }
- @Override
- public IStatisticFilter like(StatisticResourceFilter resourceID, String value, LikeMode mode) throws SearchException{
- return this._like(resourceID, null, value, mode);
- }
- private IStatisticFilter _like(StatisticResourceFilter resourceStatID,String resourceID, String value, LikeMode mode) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.like(this.getIFieldForResourceValue(fieldResourceName),value,mode.getLikeGenericProjectValue());
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.like(this.getIFieldForResourceValue(fieldResourceName),value,mode.getLikeGenericProjectValue());
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "like" case-insensitive
- * Example: ( toLower(field) like '%toLower(value)%' )
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter ilike(String resourceID, String value) throws SearchException{
- return this._ilike(null, resourceID, value);
- }
- @Override
- public IStatisticFilter ilike(StatisticResourceFilter resourceID, String value) throws SearchException{
- return this._ilike(resourceID, null, value);
- }
- private IStatisticFilter _ilike(StatisticResourceFilter resourceStatID,String resourceID, String value) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.ilike(this.getIFieldForResourceValue(fieldResourceName),value);
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.ilike(this.getIFieldForResourceValue(fieldResourceName),value);
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "like" case-insensitive
- * Example:
- * LikeMode.ANYWHERE -> ( toLower(field) like '%toLower(value)%' )
- * LikeMode.EXACT -> ( toLower(field) like 'toLower(value)' )
- * LikeMode.END -> ( toLower(field) like '%toLower(value)' )
- * LikeMode.START -> ( toLower(field) like 'toLower(value)%' )
- *
- * @param resourceID Resource identifier
- * @param value Value
- * @param mode LikeMode
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter ilike(String resourceID, String value, LikeMode mode) throws SearchException{
- return this._ilike(null, resourceID, value, mode);
- }
- @Override
- public IStatisticFilter ilike(StatisticResourceFilter resourceID, String value, LikeMode mode) throws SearchException{
- return this._ilike(resourceID, null, value, mode);
- }
- private IStatisticFilter _ilike(StatisticResourceFilter resourceStatID,String resourceID, String value, LikeMode mode) throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.ilike(this.getIFieldForResourceValue(fieldResourceName),value,mode.getLikeGenericProjectValue());
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.ilike(this.getIFieldForResourceValue(fieldResourceName),value,mode.getLikeGenericProjectValue());
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
- /* ************ IN *********** */
-
- /**
- * Create an expression "in" verifying that the value of <var>field</var> is one of those given in the param <var>values</var>
- * Example: ( field IN ('values[0]', 'values[1]', ... ,'values[n]') )
- *
- * @param resourceID Resource identifier
- * @param values Values
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter in(String resourceID, Object ... values)
- throws SearchException{
- return this._in(null, resourceID, values);
- }
- @Override
- public IStatisticFilter in(StatisticResourceFilter resourceID, Object ... values)
- throws SearchException{
- return this._in(resourceID, null, values);
- }
- private IStatisticFilter _in(StatisticResourceFilter resourceStatID,String resourceID, Object ... values)
- throws SearchException{
- try{
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.in(this.getIFieldForResourceValue(fieldResourceName),ContentFormatter.toString(values));
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.in(this.getIFieldForResourceValue(fieldResourceName),ContentFormatter.toString(values));
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Create an expression "in" verifying that the value of <var>field</var> is one of those given in the param <var>values</var>
- * Example: ( field IN ('values[0]', 'values[1]', ... ,'values[n]') )
- *
- * @param resourceID Resource identifier
- * @param values Values
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IFilter in(String resourceID, Collection<?> values)
- throws SearchException {
- return this._in(null, resourceID, values);
- }
- @Override
- public IStatisticFilter in(StatisticResourceFilter resourceID, Collection<?> values)
- throws SearchException {
- return this._in(resourceID, null, values);
- }
- private IStatisticFilter _in(StatisticResourceFilter resourceStatID,String resourceID, Collection<?> values)
- throws SearchException {
- try{
-
- List<String> collectionString = new ArrayList<>();
- for (Object o : values) {
- collectionString.add(ContentFormatter.toString(o));
- }
-
- StatisticFilterName statisticFilter = null;
- if(resourceStatID!=null){
- this.check(resourceStatID);
- statisticFilter = resourceStatID.getStatisticFilterName();
- resourceID = resourceStatID.getResourceID();
- }
- List<IField> fieldsResourceName = this.getIFieldForResourceName(statisticFilter);
- if(fieldsResourceName.size()==1){
- IExpression expr = this.newIExpression();
- expr.and();
- IField fieldResourceName = fieldsResourceName.get(0);
- expr.equals(fieldResourceName, resourceID);
- expr.in(this.getIFieldForResourceValue(fieldResourceName),collectionString);
- this.expression.and(expr);
- }
- else{
- IExpression exprEsterna = this.newIExpression();
- exprEsterna.or();
- for (IField fieldResourceName : fieldsResourceName) {
- IExpression expr = this.newIExpression();
- expr.and();
- expr.equals(fieldResourceName, resourceID);
- expr.in(this.getIFieldForResourceValue(fieldResourceName),collectionString);
- exprEsterna.or(expr);
- }
- this.expression.and(exprEsterna);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
- /* ************ CONJUNCTION *********** */
-
- /**
- * Adds to the expression in the conjunction "AND" of the espressions given as a parameters
- * Example: ( exp1 AND exp2 )
- *
- * @param exp1 Filter combined in AND with <var>exp1</var>
- * @param exp2 Filter combined in AND with <var>exp2</var>
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IStatisticFilter and(IFilter exp1, IFilter exp2) throws SearchException{
- try{
- FilterImpl f1 = (FilterImpl) exp1;
- FilterImpl f2 = (FilterImpl) exp2;
- this.expression.and(f1.expression,f2.expression);
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Adds to the expression in the conjunction "AND" of the espressions given as a parameters
- * Example: ( expressions[1] AND expressions[2] AND ... expressions[N] )
- *
- * @param expressions Expressions combined in AND
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IStatisticFilter and(IFilter... expressions) throws SearchException{
- try{
- if(expressions!=null && expressions.length>0){
- IExpression [] fs = new IExpression[expressions.length];
- for (int i = 0; i < expressions.length; i++) {
- fs[i] = ((FilterImpl) expressions[i]).expression;
- }
- this.expression.and(fs);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Adds to the expression in the conjunction "OR" of the espressions given as a parameters
- * Example: ( exp1 OR exp2 )
- *
- * @param exp1 Filter combined in OR with <var>exp1</var>
- * @param exp2 Filter combined in OR with <var>exp2</var>
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IStatisticFilter or(IFilter exp1, IFilter exp2) throws SearchException{
- try{
- FilterImpl f1 = (FilterImpl) exp1;
- FilterImpl f2 = (FilterImpl) exp2;
- this.expression.or(f1.expression,f2.expression);
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
- /**
- * Adds to the expression in the conjunction "OR" of the espressions given as a parameters
- * Example: ( expressions[1] OR expressions[2] OR ... expressions[N] )
- *
- * @param expressions Expressions combined in OR
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IStatisticFilter or(IFilter... expressions) throws SearchException{
- try{
- if(expressions!=null && expressions.length>0){
- IExpression [] fs = new IExpression[expressions.length];
- for (int i = 0; i < expressions.length; i++) {
- fs[i] = ((FilterImpl) expressions[i]).expression;
- }
- this.expression.or(fs);
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
-
-
-
- /* ************ NEGATION *********** */
-
- /**
- * Adding to the negation of the expression passed as parameter
- * Example: ( NOT expression )
- *
- * @param expression Expression
- * @return the instance of itself enriched with expression that represents the constraint
- * @throws SearchException
- */
- @Override
- public IStatisticFilter not(IFilter expression) throws SearchException{
- try{
- FilterImpl f = (FilterImpl) expression;
- this.expression.not(f.expression);
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
-
-
- /* ************ MESSAGE TYPE *********** */
- @Override
- public IStatisticFilter setMessageType(MessageType messageType) throws SearchException{
- try{
- IField f = this.getIFieldForMessageType();
- if(f!=null){
- // Le statistiche non classificano il messaggio rispetto al tipo
- this.expression.equals(f, messageType.name());
- }
- return this;
- }catch(Exception e){
- throw new SearchException(e.getMessage(),e);
- }
- }
-
-
-
-
- /* ************ NEW FILTER *********** */
-
- @Override
- public IStatisticFilter newFilter() throws SearchException{
- return this.newIFilter();
- }
-
-
- }