/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty 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 net.java.sip.communicator.service.history;
import java.util.*;
import net.java.sip.communicator.service.history.event.*;
import net.java.sip.communicator.service.history.records.*;
/**
* Used to serach over the history records
*
* @author Alexander Pelov
* @author Damian Minkov
*/
public interface HistoryReader {
/**
* Searches the history for all records with timestamp after
* <tt>startDate</tt>.
*
* @param startDate the date after all records will be returned
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByStartDate(Date startDate)
throws RuntimeException;
/**
* Searches the history for all records with timestamp before
* <tt>endDate</tt>.
*
* @param endDate the date before which all records will be returned
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByEndDate(Date endDate)
throws RuntimeException;
/**
* Searches the history for all records with timestamp between
* <tt>startDate</tt> and <tt>endDate</tt>.
*
* @param startDate start of the interval in which we search
* @param endDate end of the interval in which we search
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByPeriod( Date startDate,
Date endDate)
throws RuntimeException;
/**
* Searches the history for all records containing the <tt>keyword</tt>.
*
* @param keyword the keyword to search for
* @param field the field where to look for the keyword
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByKeyword( String keyword,
String field)
throws RuntimeException;
/**
* Searches the history for all records containing the <tt>keyword</tt>.
*
* @param keyword the keyword to search for
* @param field the field where to look for the keyword
* @param caseSensitive is keywords search case sensitive
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByKeyword( String keyword,
String field,
boolean caseSensitive)
throws RuntimeException;
/**
* Searches the history for all records containing all <tt>keywords</tt>.
*
* @param keywords array of keywords we search for
* @param field the field where to look for the keyword
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByKeywords(String[] keywords,
String field)
throws RuntimeException;
/**
* Searches the history for all records containing all <tt>keywords</tt>.
*
* @param keywords array of keywords we search for
* @param field the field where to look for the keyword
* @param caseSensitive is keywords search case sensitive
* @return the found records
* @throws RuntimeException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByKeywords(String[] keywords,
String field,
boolean caseSensitive)
throws RuntimeException;
/**
* Searches for all history records containing all <tt>keywords</tt>,
* with timestamp between <tt>startDate</tt> and <tt>endDate</tt>.
*
* @param startDate start of the interval in which we search
* @param endDate end of the interval in which we search
* @param keywords array of keywords we search for
* @param field the field where to look for the keyword
* @return the found records
* @throws UnsupportedOperationException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByPeriod( Date startDate,
Date endDate,
String[] keywords,
String field)
throws UnsupportedOperationException;
/**
* Searches for all history records containing all <tt>keywords</tt>,
* with timestamp between <tt>startDate</tt> and <tt>endDate</tt>.
*
* @param startDate start of the interval in which we search
* @param endDate end of the interval in which we search
* @param keywords array of keywords we search for
* @param field the field where to look for the keyword
* @param caseSensitive is keywords search case sensitive
* @return the found records
* @throws UnsupportedOperationException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public QueryResultSet<HistoryRecord> findByPeriod( Date startDate,
Date endDate,
String[] keywords,
String field,
boolean caseSensitive)
throws UnsupportedOperationException;
/**
* Returns the supplied number of recent messages
*
* @param count messages count
* @return the found records
* @throws RuntimeException
*/
QueryResultSet<HistoryRecord> findLast(int count)
throws RuntimeException;
/**
* Returns the supplied number of recent messages
* containing all <tt>keywords</tt>.
*
* @param count messages count
* @param keywords array of keywords we search for
* @param field the field where to look for the keyword
* @param caseSensitive is keywords search case sensitive
* @return the found records
* @throws RuntimeException
*/
QueryResultSet<HistoryRecord> findLast( int count,
String[] keywords,
String field,
boolean caseSensitive)
throws RuntimeException;
/**
* Returns the supplied number of recent messages after the given date
*
* @param date messages after date
* @param count messages count
* @return QueryResultSet the found records
* @throws RuntimeException
*/
public QueryResultSet<HistoryRecord> findFirstRecordsAfter( Date date,
int count)
throws RuntimeException;
/**
* Returns the supplied number of recent messages before the given date
*
* @param date messages before date
* @param count messages count
* @return QueryResultSet the found records
* @throws RuntimeException
*/
public QueryResultSet<HistoryRecord> findLastRecordsBefore( Date date,
int count)
throws RuntimeException;
/**
* Adding progress listener for monitoring progress of search process
*
* @param listener HistorySearchProgressListener
*/
public void addSearchProgressListener(
HistorySearchProgressListener listener);
/**
* Removing progress listener
*
* @param listener HistorySearchProgressListener
*/
public void removeSearchProgressListener(
HistorySearchProgressListener listener);
/**
* Total count of records that current history reader will read through
*
* @return the number of searched messages
* @throws UnsupportedOperationException
* Thrown if an exception occurs during the execution of the
* query, such as internal IO error.
*/
public int countRecords()
throws UnsupportedOperationException;
}