Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

QueryBuilder.java 3.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.data.util.sqlcontainer.query.generator.filter;
  5. import java.io.Serializable;
  6. import java.util.ArrayList;
  7. import java.util.Collection;
  8. import java.util.List;
  9. import com.vaadin.data.Container.Filter;
  10. import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
  11. public class QueryBuilder implements Serializable {
  12. private static ArrayList<FilterTranslator> filterTranslators = new ArrayList<FilterTranslator>();
  13. private static StringDecorator stringDecorator = new StringDecorator("\"",
  14. "\"");
  15. static {
  16. /* Register all default filter translators */
  17. addFilterTranslator(new AndTranslator());
  18. addFilterTranslator(new OrTranslator());
  19. addFilterTranslator(new LikeTranslator());
  20. addFilterTranslator(new BetweenTranslator());
  21. addFilterTranslator(new CompareTranslator());
  22. addFilterTranslator(new NotTranslator());
  23. addFilterTranslator(new IsNullTranslator());
  24. addFilterTranslator(new SimpleStringTranslator());
  25. }
  26. public synchronized static void addFilterTranslator(
  27. FilterTranslator translator) {
  28. filterTranslators.add(translator);
  29. }
  30. /**
  31. * Allows specification of a custom ColumnQuoter instance that handles
  32. * quoting of column names for the current DB dialect.
  33. *
  34. * @param decorator
  35. * the ColumnQuoter instance to use.
  36. */
  37. public static void setStringDecorator(StringDecorator decorator) {
  38. stringDecorator = decorator;
  39. }
  40. public static String quote(Object str) {
  41. return stringDecorator.quote(str);
  42. }
  43. public static String group(String str) {
  44. return stringDecorator.group(str);
  45. }
  46. /**
  47. * Constructs and returns a string representing the filter that can be used
  48. * in a WHERE clause.
  49. *
  50. * @param filter
  51. * the filter to translate
  52. * @param sh
  53. * the statement helper to update with the value(s) of the filter
  54. * @return a string representing the filter.
  55. */
  56. public synchronized static String getWhereStringForFilter(Filter filter,
  57. StatementHelper sh) {
  58. for (FilterTranslator ft : filterTranslators) {
  59. if (ft.translatesFilter(filter)) {
  60. return ft.getWhereStringForFilter(filter, sh);
  61. }
  62. }
  63. return "";
  64. }
  65. public static String getJoinedFilterString(Collection<Filter> filters,
  66. String joinString, StatementHelper sh) {
  67. StringBuilder result = new StringBuilder();
  68. for (Filter f : filters) {
  69. result.append(getWhereStringForFilter(f, sh));
  70. result.append(" ").append(joinString).append(" ");
  71. }
  72. // Remove the last instance of joinString
  73. result.delete(result.length() - joinString.length() - 2,
  74. result.length());
  75. return result.toString();
  76. }
  77. public static String getWhereStringForFilters(List<Filter> filters,
  78. StatementHelper sh) {
  79. if (filters == null || filters.isEmpty()) {
  80. return "";
  81. }
  82. StringBuilder where = new StringBuilder(" WHERE ");
  83. where.append(getJoinedFilterString(filters, "AND", sh));
  84. return where.toString();
  85. }
  86. }