Ejemplo n.º 1
0
  @Override
  public void addQuery(AdRequest request, QueryBuilder builder) {
    if (request.date() != null) {
      List<DBObject> condition_queries = new ArrayList<DBObject>();

      /*
       * Prefix der Indizieren beachten.
       */
      for (int i = 0; i < DateConditionDefinition.MAX_PERIOD_COUNT; i++) {

        QueryBuilder condition = QueryBuilder.start();

        // from part of the query
        BasicDBObject query_from_1 =
            new BasicDBObject(
                AdDBConstants.ADDB_AD_DATE_FROM + i, new BasicDBObject("$lte", request.date()));
        BasicDBObject query_from_2 =
            new BasicDBObject(AdDBConstants.ADDB_AD_DATE_FROM + i, AdDBConstants.ADDB_AD_DATE_ALL);

        List<BasicDBObject> queries = new ArrayList<BasicDBObject>();
        queries.add(query_from_1);
        queries.add(query_from_2);
        BasicDBObject query_from = new BasicDBObject("$or", queries);

        condition.and(query_from);

        // to part of the query
        BasicDBObject query_to_1 =
            new BasicDBObject(
                AdDBConstants.ADDB_AD_DATE_TO + i, new BasicDBObject("$gte", request.date()));
        BasicDBObject query_to_2 =
            new BasicDBObject(AdDBConstants.ADDB_AD_DATE_TO + i, AdDBConstants.ADDB_AD_DATE_ALL);

        queries = new ArrayList<BasicDBObject>();
        queries.add(query_to_1);
        queries.add(query_to_2);
        BasicDBObject query_to = new BasicDBObject("$or", queries);

        condition.and(query_to);

        condition_queries.add(condition.get());
      }
      builder.and(new BasicDBObject("$or", condition_queries));
    }
  }