package com.reucon.openfire.plugin.archive;
import com.reucon.openfire.plugin.archive.model.ArchivedMessage;
import com.reucon.openfire.plugin.archive.model.Conversation;
import com.reucon.openfire.plugin.archive.model.Participant;
import com.reucon.openfire.plugin.archive.xep0059.XmppResultSet;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
* Manages database persistence.
*/
public interface PersistenceManager
{
/**
* Creates a new archived message.
*
* @param message the message to create.
* @return <code>true</code> on success, <code>false</code> otherwise.
*/
boolean createMessage(ArchivedMessage message);
/**
* Selects all messages and passes each message to the given callback for processing.
*
* @param callback callback to process messages.
* @return number of messages processed.
*/
int processAllMessages(ArchivedMessageConsumer callback);
/**
* Creates a new conversation.
*
* @param conversation the conversation to create.
* @return <code>true</code> on success, <code>false</code> otherwise.
*/
boolean createConversation(Conversation conversation);
/**
* Updates the end time of a conversation. The conversation must be persisted.
*
* @param conversation conversation to update with id and endDate attributes not null.
* @return <code>true</code> on success, <code>false</code> otherwise.
*/
boolean updateConversationEnd(Conversation conversation);
/**
* Adds a new participant to a conversation.
*
* @param participant the participant to add.
* @param conversationId id of the conversation to add the participant to.
* @return <code>true</code> on success, <code>false</code> otherwise.
*/
boolean createParticipant(Participant participant, Long conversationId);
List<Conversation> findConversations(String[] participants, Date startDate, Date endDate);
/**
* Searches for conversations.
*
* @param startDate earliest start date of the conversation to find or <code>null</code> for any.
* @param endDate latest end date of the conversation to find or <code>null</code> for any.
* @param owner bare jid of the owner of the conversation to find or <code>null</code> for any.
* @param with bare jid of the communication partner or <code>null</code> for any. This is either
* the jid of another XMPP user or the jid of a group chat.
* @return the conversations that matched search criteria without messages and participants.
*/
Collection<Conversation> findConversations(Date startDate, Date endDate, String owner, String with, XmppResultSet xmppResultSet);
/**
* Searches for messages.
*
* @param startDate earliest start date of the message to find or <code>null</code> for any.
* @param endDate latest end date of the message to find or <code>null</code> for any.
* @param owner bare jid of the owner of the message to find or <code>null</code> for any.
* @param with bare jid of the communication partner or <code>null</code> for any. This is either
* the jid of another XMPP user or the jid of a group chat.
* @return the messages that matched search criteria.
*/
Collection<ArchivedMessage> findMessages(Date startDate, Date endDate, String owner, String with, XmppResultSet xmppResultSet);
Collection<Conversation> getActiveConversations(int conversationTimeout);
List<Conversation> getConversations(Collection<Long> conversationIds);
/**
* Returns the conversation with the given owner, with and start time including participants and messages.
*
* @param ownerJid bare jid of the conversation's owner.
* @param withJid bare jid of the communication partner.
* @param start exact start time
* @return the matching conversation or <code>null</code> if none matches.
*/
Conversation getConversation(String ownerJid, String withJid, Date start);
/**
* Returns the conversation with the given id including participants and messages.
*
* @param conversationId id of the conversation to retrieve.
* @return the matching conversation or <code>null</code> if none matches.
*/
Conversation getConversation(Long conversationId);
}