/**
   * Test method for {@link org.identityconnectors.dbcommon.DatabaseFilterTranslator}.
   *
   * @throws Exception
   */
  @Test
  public void testNotfilter() throws Exception {
    Filter gt = greaterThan(build("count", 4));
    Filter f = FilterBuilder.not(gt);

    DatabaseFilterTranslator tr = getDatabaseFilterTranslator();
    List<FilterWhereBuilder> blist = tr.translate(f);
    assertEquals(1, blist.size());
    final FilterWhereBuilder b = blist.get(0);
    assertEquals("count <= ?", b.getWhereClause());
    List<SQLParam> expected = new ArrayList<SQLParam>();
    expected.add(new SQLParam("count", 4, Types.INTEGER));
    assertEquals(expected.size(), b.getParams().size());
  }
  /**
   * Test method for {@link org.identityconnectors.dbcommon.DatabaseFilterTranslator}.
   *
   * @throws Exception
   */
  @Test
  public void testCompositeFilterChainNotOr() throws Exception {
    Filter lf = greaterThan(build("count", 4));
    Filter rf = lessThan(build("count", 20));
    List<SQLParam> expected = new ArrayList<SQLParam>();
    expected.add(new SQLParam("count", 4, Types.INTEGER));
    expected.add(new SQLParam("count", 20, Types.INTEGER));

    // test and
    Filter f = FilterBuilder.or(lf, rf);
    Filter not = FilterBuilder.not(f);
    DatabaseFilterTranslator tr = getDatabaseFilterTranslator();
    List<FilterWhereBuilder> blist = tr.translate(not);
    assertEquals(1, blist.size());
    final FilterWhereBuilder b = blist.get(0);
    assertEquals("count <= ? AND count >= ?", b.getWhereClause());
    assertEquals(expected.size(), b.getParams().size());
  }
  /**
   * Test method for {@link org.identityconnectors.dbcommon.DatabaseFilterTranslator}.
   *
   * @throws Exception
   */
  @Test
  public void testCompositeFilterChainOrAndNot() throws Exception {
    Filter f1 = greaterThan(build("count", 4));
    Filter f2 = lessThan(build("count", 20));
    Filter f3 = equalTo(build("count", 10));
    List<SQLParam> expected = new ArrayList<SQLParam>();
    expected.add(new SQLParam("count", 4, Types.INTEGER));
    expected.add(new SQLParam("count", 20, Types.INTEGER));
    expected.add(new SQLParam("count", 10, Types.INTEGER));

    // test and
    Filter f1o2 = FilterBuilder.or(f1, f2);
    Filter fn3 = FilterBuilder.not(f3);
    Filter f = FilterBuilder.and(f1o2, fn3);
    DatabaseFilterTranslator tr = getDatabaseFilterTranslator();
    List<FilterWhereBuilder> blist = tr.translate(f);
    assertEquals(1, blist.size());
    final FilterWhereBuilder b = blist.get(0);
    assertEquals("( count > ? OR count < ? ) AND NOT count = ?", b.getWhereClause());
    assertEquals(expected.size(), b.getParams().size());
  }