/* * Copyright 2000-2016 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.v7.data.util.sqlcontainer.query.generator.filter; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import com.vaadin.v7.data.Container.Filter; import com.vaadin.v7.data.util.sqlcontainer.query.generator.StatementHelper; /** * @deprecated As of 8.0, no replacement available. */ @Deprecated public class QueryBuilder implements Serializable { private static ArrayList<FilterTranslator> filterTranslators = new ArrayList<FilterTranslator>(); private static StringDecorator stringDecorator = new StringDecorator("\"", "\""); static { /* Register all default filter translators */ addFilterTranslator(new AndTranslator()); addFilterTranslator(new OrTranslator()); addFilterTranslator(new LikeTranslator()); addFilterTranslator(new BetweenTranslator()); addFilterTranslator(new CompareTranslator()); addFilterTranslator(new NotTranslator()); addFilterTranslator(new IsNullTranslator()); addFilterTranslator(new SimpleStringTranslator()); } public synchronized static void addFilterTranslator( FilterTranslator translator) { filterTranslators.add(translator); } /** * Allows specification of a custom ColumnQuoter instance that handles * quoting of column names for the current DB dialect. * * @param decorator * the ColumnQuoter instance to use. */ public static void setStringDecorator(StringDecorator decorator) { stringDecorator = decorator; } public static String quote(Object str) { return stringDecorator.quote(str); } public static String group(String str) { return stringDecorator.group(str); } /** * Constructs and returns a string representing the filter that can be used * in a WHERE clause. * * @param filter * the filter to translate * @param sh * the statement helper to update with the value(s) of the filter * @return a string representing the filter. */ public synchronized static String getWhereStringForFilter(Filter filter, StatementHelper sh) { for (FilterTranslator ft : filterTranslators) { if (ft.translatesFilter(filter)) { return ft.getWhereStringForFilter(filter, sh); } } return ""; } public static String getJoinedFilterString(Collection<Filter> filters, String joinString, StatementHelper sh) { StringBuilder result = new StringBuilder(); for (Filter f : filters) { result.append(getWhereStringForFilter(f, sh)); result.append(" ").append(joinString).append(" "); } // Remove the last instance of joinString result.delete(result.length() - joinString.length() - 2, result.length()); return result.toString(); } public static String getWhereStringForFilters(List<Filter> filters, StatementHelper sh) { if (filters == null || filters.isEmpty()) { return ""; } StringBuilder where = new StringBuilder(" WHERE "); where.append(getJoinedFilterString(filters, "AND", sh)); return where.toString(); } }