private StringBuffer createMasterSelectQueryBlock(
     EntitySearchFilter[] filters, boolean selectAll) {
   String masterTableName = this.getEntityMasterTableName();
   StringBuffer query = new StringBuffer("SELECT ").append(masterTableName).append(".");
   if (selectAll) {
     query.append("* ");
   } else {
     query.append(this.getEntityMasterTableIdFieldName());
   }
   if (this.isForceTextCaseSearch() && filters != null) {
     String searchTableName = this.getEntitySearchTableName();
     for (int i = 0; i < filters.length; i++) {
       EntitySearchFilter filter = filters[i];
       if (!filter.isAttributeFilter() && filter.isLikeOption()) {
         String tableFieldName = this.getTableFieldName(filter.getKey());
         // check for id column already present
         if (!tableFieldName.equals(this.getMasterTableIdFieldName())) {
           query.append(", ").append(masterTableName).append(".").append(tableFieldName);
         }
       } else if (filter.isAttributeFilter() && filter.isLikeOption()) {
         String columnName = this.getAttributeFieldColunm(filter);
         query.append(", ").append(searchTableName).append(i).append(".").append(columnName);
         query.append(" AS ").append(columnName).append(i).append(" ");
       }
     }
   }
   query.append(" FROM ").append(masterTableName).append(" ");
   return query;
 }
 protected boolean appendOrderQueryBlocks(
     EntitySearchFilter[] filters, StringBuffer query, boolean ordered) {
   if (filters == null) {
     return ordered;
   }
   for (int i = 0; i < filters.length; i++) {
     EntitySearchFilter filter = filters[i];
     if (null != filter.getKey() && null != filter.getOrder() && !filter.isNullOption()) {
       if (!ordered) {
         query.append("ORDER BY ");
         ordered = true;
       } else {
         query.append(", ");
       }
       if (filter.isAttributeFilter()) {
         String tableName = this.getEntitySearchTableName() + i;
         this.addAttributeOrderQueryBlock(tableName, query, filter, filter.getOrder());
       } else {
         String fieldName = this.getTableFieldName(filter.getKey());
         query
             .append(this.getEntityMasterTableName())
             .append(".")
             .append(fieldName)
             .append(" ")
             .append(filter.getOrder());
       }
     }
   }
   return ordered;
 }
 /**
  * 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 verifyLikeFieldFilters(ResultSet result, EntitySearchFilter[] likeFieldFilters)
     throws SQLException {
   boolean verify = true;
   for (int i = 0; i < likeFieldFilters.length; i++) {
     EntitySearchFilter filter = likeFieldFilters[i];
     if (filter.getKey() == null || !filter.isLikeOption() || !this.isForceTextCaseSearch()) {
       continue;
     }
     String fieldName = null;
     if (filter.isAttributeFilter()) {
       fieldName = this.getAttributeFieldColunm(filter) + i;
     } else {
       fieldName = this.getTableFieldName(filter.getKey());
     }
     String value = result.getString(fieldName);
     if (null != filter.getValue()) {
       verify = this.checkText((String) filter.getValue(), value);
       if (!verify) {
         break;
       }
     } else if (filter.getAllowedValues() != null && filter.getAllowedValues().size() > 0) {
       List<Object> allowedValues = filter.getAllowedValues();
       verify = this.verifyLikeAllowedValuesFilter(value, allowedValues);
       if (!verify) {
         break;
       }
     }
   }
   return verify;
 }
 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;
 }
 /**
  * Add to the statement the filters on the entity metadata.
  *
  * @param filters the filters to add to the statement.
  * @param index The current index of the statement.
  * @param stat The statement.
  * @return The current statement index, eventually incremented by filters.
  * @throws Throwable In case of error.
  */
 protected int addMetadataFieldFilterStatementBlock(
     EntitySearchFilter[] filters, int index, PreparedStatement stat) throws Throwable {
   if (filters == null) {
     return index;
   }
   for (int i = 0; i < filters.length; i++) {
     EntitySearchFilter filter = filters[i];
     if (filter.getKey() != null && !filter.isAttributeFilter()) {
       index = this.addObjectSearchStatementBlock(filter, index, stat);
     }
   }
   return index;
 }
 protected boolean appendMetadataFieldFilterQueryBlocks(
     EntitySearchFilter[] filters, StringBuffer query, boolean hasAppendWhereClause) {
   if (filters == null) {
     return hasAppendWhereClause;
   }
   for (int i = 0; i < filters.length; i++) {
     EntitySearchFilter filter = filters[i];
     if (filter.getKey() != null && !filter.isAttributeFilter()) {
       hasAppendWhereClause =
           this.addMetadataFieldFilterQueryBlock(filter, query, hasAppendWhereClause);
     }
   }
   return hasAppendWhereClause;
 }
 /**
  * Add the attribute filters to the statement.
  *
  * @param filters The filters on the entity filters to insert 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 addAttributeFilterStatementBlock(
     EntitySearchFilter[] filters, int index, PreparedStatement stat) throws SQLException {
   if (filters == null) {
     return index;
   }
   for (int i = 0; i < filters.length; i++) {
     EntitySearchFilter filter = filters[i];
     if (filter.getKey() != null && filter.isAttributeFilter()) {
       stat.setString(++index, filter.getKey());
       index = this.addObjectSearchStatementBlock(filter, index, stat);
     }
   }
   return index;
 }
 protected boolean appendFullAttributeFilterQueryBlocks(
     EntitySearchFilter[] filters, StringBuffer query, boolean hasAppendWhereClause) {
   if (filters != null) {
     for (int i = 0; i < filters.length; i++) {
       EntitySearchFilter filter = filters[i];
       if (filter.getKey() == null || !filter.isAttributeFilter()) {
         continue;
       }
       if (filter.isNullOption()) {
         hasAppendWhereClause =
             this.appendNullAttributeFilterQueryBlocks(filter, query, hasAppendWhereClause);
       } else {
         hasAppendWhereClause =
             this.appendValuedAttributeFilterQueryBlocks(filter, i, query, hasAppendWhereClause);
       }
     }
   }
   return hasAppendWhereClause;
 }