/* * Copyright(c) 2005 Center for E-Commerce Infrastructure Development, The * University of Hong Kong (HKU). All Rights Reserved. * * This software is licensed under the GNU GENERAL PUBLIC LICENSE Version 2.0 [1] * * [1] http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt */ package hk.hku.cecid.ebms.spa.task; import hk.hku.cecid.ebms.spa.EbmsProcessor; import hk.hku.cecid.ebms.spa.dao.InboxDAO; import hk.hku.cecid.ebms.spa.dao.MessageDAO; import hk.hku.cecid.ebms.spa.dao.MessageDVO; import hk.hku.cecid.piazza.commons.dao.DAOException; import hk.hku.cecid.piazza.commons.module.ActiveTaskList; import hk.hku.cecid.piazza.commons.net.HostInfo; import java.util.Iterator; import java.util.List; import java.util.Vector; /** * @author Donahue Sze * */ public class InboxCollector extends ActiveTaskList { /* * (non-Javadoc) * * @see hk.hku.cecid.piazza.commons.module.ActiveTaskList#getTaskList() */ public List getTaskList() { List messageList = new Vector(); try { MessageDAO dao = (MessageDAO) EbmsProcessor.core.dao .createDAO(MessageDAO.class); // get all the pending message and sort by sequence number MessageDVO finderDVO = (MessageDVO) dao.createDVO(); finderDVO.setHostname(HostInfo.GetLocalhostAddress()); List messageDVOList = dao.findInboxPendingMessagesByTimestamp(finderDVO); Iterator i = messageDVOList.iterator(); while (i.hasNext()) { MessageDVO message = (MessageDVO) i.next(); if (message.getSequenceNo() != -1) { // use cpa to find max seq which is in processing MessageDVO findMaxSequenceNoDVO = (MessageDVO) dao .createDVO(); findMaxSequenceNoDVO.setCpaId(message.getCpaId()); findMaxSequenceNoDVO.setService(message.getService()); findMaxSequenceNoDVO.setAction(message.getAction()); findMaxSequenceNoDVO.setConvId(message.getConvId()); int currentSequenceNumber = dao.findInboxReadyMaxSequenceNoByCpa(findMaxSequenceNoDVO); if (message.getSequenceNo() == (currentSequenceNumber + 1) || message.getSequenceNo() == 0) { // if the sequence number is continue or 0, add to the list currentSequenceNumber = message.getSequenceNo(); InboxDAO inboxDAO = (InboxDAO) EbmsProcessor.core.dao.createDAO(InboxDAO.class); InboxTask inboxTask = new InboxTask(message, inboxDAO.findInboxNextOrderNo()); messageList.add(inboxTask); } } else { InboxDAO inboxDAO = (InboxDAO) EbmsProcessor.core.dao.createDAO(InboxDAO.class); InboxTask inboxTask = new InboxTask(message, inboxDAO.findInboxNextOrderNo()); messageList.add(inboxTask); } } } catch (DAOException e) { EbmsProcessor.core.log.error( "Error in collecing message from inbox", e); } return messageList; } }