/**
   * Find messages order by descending timestamp by different criteria.
   *
   * @param data The message data value object carrying query criteria.
   * @param numberOfMessage max no. of message in return.
   * @param offset no. of starting record in return.
   * @throws DAOException
   */
  public List findMessagesByHistory(MessageDVO data, int numberOfMessage, int offset)
      throws DAOException {

    List parameters = new ArrayList();
    boolean hasSearchCriteria = false;
    String sql = super.getFinder("find_message_by_history");

    if (data.getMessageId() != null && !data.getMessageId().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_message_id");
      parameters.add(data.getMessageId());
    }

    if (data.getMessageBox() != null && !data.getMessageBox().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_message_box");
      parameters.add(data.getMessageBox());
    }

    if (data.getCpaId() != null && !data.getCpaId().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_cpa_id");
      parameters.add(data.getCpaId());
    }

    if (data.getService() != null && !data.getService().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_service");
      parameters.add(data.getService());
    }

    if (data.getAction() != null && !data.getAction().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_action");
      parameters.add(data.getAction());
    }

    if (data.getStatus() != null && !data.getStatus().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_status");
      parameters.add(data.getStatus());
    }

    if (data.getConvId() != null && !data.getConvId().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_conv_id");
      parameters.add(data.getConvId());
    }

    if (data.getPrimalMessageId() != null && !data.getPrimalMessageId().trim().equals("")) {
      sql += " AND " + getFilter("find_message_by_history_filter_primal_message_id");
      parameters.add(data.getPrimalMessageId());
    }

    sql += " " + getOrder("find_message_by_history_order");
    parameters.add(new Integer(numberOfMessage));
    parameters.add(new Integer(offset));

    return executeQuery(sql, parameters.toArray());
  }
  /**
   * Find number of messages by different criteria.
   *
   * @param data The message data value object carrying query criteria.
   * @throws DAOException
   */
  public int findNumberOfMessagesByHistory(MessageDVO data) throws DAOException {
    try {
      List parameters = new ArrayList();
      String sql = super.getFinder("find_number_of_message_by_history");

      if (data.getMessageId() != null && !data.getMessageId().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_message_id");
        parameters.add(data.getMessageId());
      }

      if (data.getMessageBox() != null && !data.getMessageBox().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_message_box");
        parameters.add(data.getMessageBox());
      }

      if (data.getCpaId() != null && !data.getCpaId().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_cpa_id");
        parameters.add(data.getCpaId());
      }

      if (data.getService() != null && !data.getService().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_service");
        parameters.add(data.getService());
      }

      if (data.getAction() != null && !data.getAction().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_action");
        parameters.add(data.getAction());
      }

      if (data.getStatus() != null && !data.getStatus().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_status");
        parameters.add(data.getStatus());
      }

      if (data.getConvId() != null && !data.getConvId().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_conv_id");
        parameters.add(data.getConvId());
      }

      if (data.getPrimalMessageId() != null && !data.getPrimalMessageId().trim().equals("")) {
        sql += " AND " + getFilter("find_number_of_message_by_history_filter_primal_message_id");
        parameters.add(data.getPrimalMessageId());
      }

      List queryResult = executeRawQuery(sql, parameters.toArray());
      List resultEntry = (List) queryResult.get(0);
      return ((Number) resultEntry.get(0)).intValue();
    } catch (Exception e) {
      throw new DAOException("Unable to find the number of messages by history", e);
    }
  }
 // find the ref to message
 public boolean findRefToMessage(MessageDVO data) throws DAOException {
   List l =
       super.find(
           "find_ref_to_message",
           new Object[] {data.getRefToMessageId(), data.getMessageBox(), data.getMessageType()});
   Iterator i = l.iterator();
   if (i.hasNext()) {
     ((MessageDataSourceDVO) data).setData(((MessageDataSourceDVO) i.next()).getData());
     return true;
   }
   return false;
 }
 // find all the ordered messages by messagebox, cpa and status
 public List findOrderedMessagesByMessageBoxAndCpaAndStatus(MessageDVO data) throws DAOException {
   return super.find(
       "find_ordered_messages_by_message_box_and_cpa_and_status",
       new Object[] {
         data.getMessageBox(),
         data.getCpaId(),
         data.getService(),
         data.getAction(),
         data.getConvId(),
         data.getStatus()
       });
 }
 public int findMaxSequenceGroupByMessageBoxAndCpa(MessageDVO data) throws DAOException {
   List l =
       super.find(
           "find_max_sequence_group_by_message_box_and_cpa",
           new Object[] {
             data.getMessageBox(),
             data.getCpaId(),
             data.getService(),
             data.getAction(),
             data.getConvId()
           });
   Iterator i = l.iterator();
   if (i.hasNext()) {
     MessageDataSourceDVO resultData = (MessageDataSourceDVO) i.next();
     return resultData.getSequenceGroup();
   }
   return -1;
 }
 public int findNumOfMessagesByMessageBoxAndCpaAndSequenceGroup(MessageDVO data)
     throws DAOException {
   try {
     List result =
         super.executeRawQuery(
             super.getFinder("find_num_of_messages_by_message_box_and_cpa_and_sequence_group"),
             new Object[] {
               data.getMessageBox(),
               data.getCpaId(),
               data.getService(),
               data.getAction(),
               data.getConvId(),
               new Integer(data.getSequenceGroup())
             });
     List resultEntry = (List) result.get(0);
     return ((Number) resultEntry.get(0)).intValue();
   } catch (Exception e) {
     throw new DAOException("Unable to find the number of messages by history", e);
   }
 }
 public boolean findOrderedMessageByMessageBoxAndCpaAndSequenceGroupAndSequenceNo(MessageDVO data)
     throws DAOException {
   List l =
       super.find(
           "find_ordered_message_by_message_box_and_cpa_and_sequence_group_and_sequence_no",
           new Object[] {
             data.getMessageBox(),
             data.getCpaId(),
             data.getService(),
             data.getAction(),
             data.getConvId(),
             new Integer(data.getSequenceGroup()),
             new Integer(data.getSequenceNo())
           });
   Iterator i = l.iterator();
   if (i.hasNext()) {
     ((MessageDataSourceDVO) data).setData(((MessageDataSourceDVO) i.next()).getData());
     return true;
   }
   return false;
 }