/**
  * Add to the statement a filter on a attribute.
  *
  * @param filter The filter on the attribute to apply in the statement.
  * @param index The last index used to associate the elements to the statement.
  * @param stat The statement where the filters are applied.
  * @return The last used index.
  * @throws SQLException In case of error.
  */
 protected int addObjectSearchStatementBlock(
     EntitySearchFilter filter, int index, PreparedStatement stat) throws SQLException {
   if (filter.isAttributeFilter() && null != filter.getLangCode()) {
     stat.setString(++index, filter.getLangCode());
   }
   return super.addObjectSearchStatementBlock(filter, index, stat);
 }
 protected boolean addAttributeLangQueryBlock(
     String searchTableName,
     StringBuffer query,
     EntitySearchFilter filter,
     boolean hasAppendWhereClause) {
   if (filter.isAttributeFilter() && null != filter.getLangCode()) {
     hasAppendWhereClause = this.verifyWhereClauseAppend(query, hasAppendWhereClause);
     query.append(searchTableName).append(".langcode = ? ");
   }
   return hasAppendWhereClause;
 }
 private boolean appendValuedAttributeFilterQueryBlocks(
     EntitySearchFilter filter, int index, StringBuffer query, boolean hasAppendWhereClause) {
   String searchTableNameAlias = this.getEntitySearchTableName() + index;
   hasAppendWhereClause = this.verifyWhereClauseAppend(query, hasAppendWhereClause);
   query.append(searchTableNameAlias).append(".attrname = ? ");
   hasAppendWhereClause =
       this.addAttributeLangQueryBlock(searchTableNameAlias, query, filter, hasAppendWhereClause);
   if (filter.isLikeOption() && this.isForceTextCaseSearch()) {
     return hasAppendWhereClause;
   }
   if (filter.getAllowedValues() != null && filter.getAllowedValues().size() > 0) {
     hasAppendWhereClause = this.verifyWhereClauseAppend(query, hasAppendWhereClause);
     List<Object> allowedValues = filter.getAllowedValues();
     for (int j = 0; j < allowedValues.size(); j++) {
       Object allowedValue = allowedValues.get(j);
       if (j == 0) {
         query.append(" ( ");
       } else {
         query.append(" OR ");
       }
       String operator = filter.isLikeOption() ? this.getLikeClause() : "= ? ";
       query
           .append(searchTableNameAlias)
           .append(".")
           .append(this.getAttributeFieldColunm(allowedValue))
           .append(" ");
       query.append(operator);
       if (j == (allowedValues.size() - 1)) {
         query.append(" ) ");
       }
     }
   } else if (filter.getValue() != null) {
     Object object = filter.getValue();
     String operator = filter.isLikeOption() ? this.getLikeClause() : "= ? ";
     hasAppendWhereClause =
         this.addAttributeObjectSearchQueryBlock(
             searchTableNameAlias,
             query,
             object,
             operator,
             hasAppendWhereClause,
             filter.getLangCode());
   } else {
     // creazione blocco selezione su tabella ricerca
     if (null != filter.getStart()) {
       hasAppendWhereClause =
           this.addAttributeObjectSearchQueryBlock(
               searchTableNameAlias,
               query,
               filter.getStart(),
               ">= ? ",
               hasAppendWhereClause,
               filter.getLangCode());
     }
     if (null != filter.getEnd()) {
       hasAppendWhereClause =
           this.addAttributeObjectSearchQueryBlock(
               searchTableNameAlias,
               query,
               filter.getEnd(),
               "<= ? ",
               hasAppendWhereClause,
               filter.getLangCode());
     }
     if (null == filter.getStart() && null == filter.getEnd()) {
       hasAppendWhereClause = this.verifyWhereClauseAppend(query, hasAppendWhereClause);
       query
           .append(" (")
           .append(searchTableNameAlias)
           .append(".datevalue IS NOT NULL OR ")
           .append(searchTableNameAlias)
           .append(".textvalue IS NOT NULL OR ")
           .append(searchTableNameAlias)
           .append(".numvalue IS NOT NULL) ");
     }
   }
   return hasAppendWhereClause;
 }