package fi.arcusys.koku.kv.message; import static fi.arcusys.koku.util.Constants.RESPONSE_FAIL; import static fi.arcusys.koku.util.Constants.RESPONSE_OK; import java.util.List; import javax.xml.ws.BindingProvider; import org.apache.log4j.Logger; import fi.arcusys.koku.exceptions.KokuServiceException; import fi.arcusys.koku.kv.messageservice.Criteria; import fi.arcusys.koku.kv.messageservice.FolderType; import fi.arcusys.koku.kv.messageservice.KokuMessageService; import fi.arcusys.koku.kv.messageservice.KokuMessageService_Service; import fi.arcusys.koku.kv.messageservice.MessageQuery; import fi.arcusys.koku.kv.messageservice.MessageStatus; import fi.arcusys.koku.kv.messageservice.MessageSummary; import fi.arcusys.koku.util.Properties; /** * Retrieves messages data and related operations via web services * @author Jinhua Chen * Jul 29, 2011 */ public class MessageService { private static final Logger LOG = Logger.getLogger(MessageService.class); private final KokuMessageService service; /** * Constructor and initialization */ public MessageService() { KokuMessageService_Service ms = new KokuMessageService_Service(); service = ms.getKokuMessageServicePort(); ((BindingProvider)service).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, Properties.KV_MESSAGE_SERVICE); } /** * Gets messages * @param user username * @param folderType Message folder type such as inbox, outbox and archive * @param messageQuery query for filtering messages * @return a list of messages */ public List<MessageSummary> getMessages(String user, FolderType folderType, MessageQuery messageQuery) throws KokuServiceException { List<MessageSummary> messages; long start = System.nanoTime(); try { messages = service.getMessages(user, folderType, messageQuery); } catch(RuntimeException e) { throw new KokuServiceException("getMessages failed. user: '"+user+"' folderType: '"+folderType+"'", e); } LOG.info("getMessages - "+((System.nanoTime()-start)/1000/1000) + "ms"); return messages; } /** * Gets total number of messages * @param user username * @param folderType Message folder type such as inbox, outbox and archive * @param criteria criteria for filtering messages * @return the amount of messages */ public int getTotalMessageNum(String user, FolderType folderType, Criteria criteria) throws KokuServiceException { long start = System.nanoTime(); int count = 0; try { count = service.getTotalMessages(user, folderType, criteria); } catch(RuntimeException e) { throw new KokuServiceException("getTotalMessageNum failed. user: '"+user+"' folderType: '"+folderType+"'", e); } LOG.info("getMessageCount - "+((System.nanoTime()-start)/1000/1000) + "ms"); return count; } /** * @deprecated * Gets the list of message summary. * @param user Username * @param FolderType Message folder type such as inbox, outbox and archive * @param subQuery Basic query for the message, such as 'message_subject like %keyword%' , 'ORDER BY message_creationDate' * @param startNum The start message number that fulfills the condition * @param maxNum The maximum amount of messages that fulfills the condition * @return List of messages */ public List<MessageSummary> getMessagesOld(String user, FolderType folderType, String subQuery, int startNum, int maxNum) throws KokuServiceException { try { return service.getMessagesOld(user, folderType, subQuery, startNum, maxNum); } catch(RuntimeException e) { throw new KokuServiceException("getMessagesOld failed. user: '"+user+"' folderType: '"+folderType+"'", e); } } /** * Gets the detailed message with content by messageId * @param messageId * @return The detailed message */ public fi.arcusys.koku.kv.messageservice.Message getMessageById(long messageId) throws KokuServiceException { try { return service.getMessageById(messageId); } catch(RuntimeException e) { throw new KokuServiceException("getMessageById failed. messageId: '"+messageId+"'", e); } } /** * @deprecated * Gets the total message number * @param user Username * @param FolderType Message folder type such as inbox, outbox and archive * @param subQuery Basic query for the message, such as 'message_subject like %keyword%' , 'ORDER BY message_creationDate' * @return The number of messages */ public int getTotalMessageNumOld(String user, FolderType folderType, String subQuery) throws KokuServiceException { try { return service.getTotalMessagesOld(user, folderType, subQuery); } catch(RuntimeException e) { throw new KokuServiceException("getTotalMessageNumOld failed. messageId: user: '"+user+"' folderType: '"+folderType+"' subQuery: '"+subQuery+"'", e); } } /** * Gets unread messages * @param user Username * @param FolderType Message folder type such as inbox, outbox and archive * @return Unread messages */ public int getUnreadMessageNum(String user, FolderType folderType) throws KokuServiceException { try { return service.getUnreadMessages(user, folderType); } catch(RuntimeException e) { throw new KokuServiceException("getUnreadMessageNum failed. messageId: user: '"+user+"' folderType: '"+folderType+"'", e); } } /** * Deletes the messages * @param messageIds List of message ids to be deleted * @return Operation status */ public String deleteMessages(List<Long> messageIds) { try { service.deleteMessages(messageIds); return RESPONSE_OK; } catch(RuntimeException e) { LOG.error("ERROR while deleting message(s). See errorMsg: "+ e.getMessage(), e); return RESPONSE_FAIL; } } /** * Sets the message status: read or unread * @param messageIds List of message ids * @param messageStatus message status * @return Operation status */ public String setMessageStatus(List<Long> messageIds, MessageStatus messageStatus) { try { service.setMessagesStatus(messageIds, messageStatus); return RESPONSE_OK; } catch(RuntimeException e) { LOG.error("ERROR while setting message(s) status. See errorMsg: "+ e.getMessage(), e); return RESPONSE_FAIL; } } /** * Archives messages * * @param messageIds a list of message ids * @return Operation status */ public String archiveMessages(List<Long> messageIds){ try { service.archiveMessages(messageIds); return RESPONSE_OK; } catch(RuntimeException e) { LOG.error("ERROR while archiveMessages. See errorMsg: "+ e.getMessage(), e); return RESPONSE_FAIL; } } /** * Archives old messages (more than 3 months older) * * @param userUid * @param folderType */ public String archiveOldMessages(String userUid, FolderType folderType) { try { service.archiveOldMessages(userUid, folderType); return RESPONSE_OK; } catch (RuntimeException e) { LOG.error("ERROR while archiveOldMessages. See errorMsg: "+ e.getMessage(), e); return RESPONSE_FAIL; } } }