package hk.hku.cecid.piazza.corvus.core.main.admin.hc.module;
import java.util.Iterator;
import java.util.List;
import hk.hku.cecid.edi.as2.AS2Processor;
import hk.hku.cecid.edi.as2.dao.MessageDAO;
import hk.hku.cecid.edi.as2.dao.MessageDVO;
import hk.hku.cecid.edi.as2.dao.MessageDataSourceDAO;
import hk.hku.cecid.edi.as2.dao.RepositoryDAO;
import hk.hku.cecid.edi.as2.dao.RepositoryDVO;
import hk.hku.cecid.piazza.commons.dao.DAOException;
import hk.hku.cecid.piazza.commons.dao.Transaction;
import hk.hku.cecid.piazza.corvus.core.main.admin.AdminMainProcessor;
public class NeoSchedulerTask extends SchedulerTask{
@Override
protected Transaction cleanAS2(int months) throws Exception {
try {
MessageDAO dao = (MessageDAO) AS2Processor.core.dao
.createDAO(MessageDAO.class);
Transaction tr = ((MessageDataSourceDAO) dao).getFactory()
.createTransaction();
RepositoryDAO repDao = (RepositoryDAO) AS2Processor.core.dao
.createDAO(RepositoryDAO.class);
dao.setTransaction(tr);
repDao.setTransaction(tr);
tr.begin();
List list = dao.findMessagesBeforeTime(months);
AS2PlusLogging(Integer.toString(list.size())
+ " messages will be removed.");
AS2PlusLogging("Initializing...");
Iterator itr = list.iterator();
MessageDVO dvo;
RepositoryDVO repDvo;
while (itr.hasNext()) {
dvo = (MessageDVO) itr.next();
repDvo = (RepositoryDVO) repDao.createDVO();
repDvo.setMessageId(dvo.getMessageId());
repDvo.setMessageBox(dvo.getMessageBox());
repDao.remove(repDvo);
dao.remove(dvo);
}
return tr;
} catch (DAOException e) {
AS2PlusError("Error encountered while cleaning.");
throw new Exception("Error encountered while cleaning AS2.", e);
}
}
/**
* Convenience method for logging AS2 errors.
*
* @param s
*/
private void AS2PlusError(String s) {
AdminMainProcessor.core.log.error("AS2Plus Cleaning: " + s);
}
/**
* Convenience method for logging AS2.
*
* @param s
*/
private void AS2PlusLogging(String s) {
AdminMainProcessor.core.log.info("AS2Plus Cleaning: " + s);
}
}