package org.jivesoftware.openfire.plugin.rest.controller; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.jivesoftware.database.DbConnectionManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xmpp.packet.JID; /** * The Class MsgArchiveController. */ public class MsgArchiveController { /** The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(MsgArchiveController.class); /** The Constant INSTANCE. */ public static final MsgArchiveController INSTANCE = new MsgArchiveController(); /** The Constant USER_MESSAGE_COUNT. */ private static final String USER_MESSAGE_COUNT = "select COUNT(1) from ofMessageArchive a " + "join ofPresence p on (a.sentDate > p.offlineDate) " + "WHERE a.toJID = ? AND p.username = ?"; /** * Gets the single instance of MsgArchiveController. * * @return single instance of MsgArchiveController */ public static MsgArchiveController getInstance() { return INSTANCE; } /** * The Constructor. */ private MsgArchiveController() { } /** * Returns the total number of messages that haven't been delivered to the user. * * @param jid the jid * @return the total number of user unread messages. */ public int getUnReadMessagesCount(JID jid) { int messageCount = 0; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(USER_MESSAGE_COUNT); pstmt.setString(1, jid.toBareJID()); pstmt.setString(2, jid.getNode()); rs = pstmt.executeQuery(); if (rs.next()) { messageCount = rs.getInt(1); } } catch (SQLException sqle) { LOG.error(sqle.getMessage(), sqle); } finally { DbConnectionManager.closeConnection(rs, pstmt, con); } return messageCount; } }