/*
* Copyright(c) 2005 Center for E-Commerce Infrastructure Development, The
* University of Hong Kong (HKU). All Rights Reserved.
*
* This software is licensed under the Apache License Version 2.0 [1]
*
* [1] http://www.apache.org/licenses/LICENSE-2.0.txt
*/
package hk.hku.cecid.edi.as2.admin.listener;
import hk.hku.cecid.edi.as2.AS2PlusProcessor;
import hk.hku.cecid.edi.as2.dao.MessageDAO;
import hk.hku.cecid.edi.as2.dao.MessageDVO;
import hk.hku.cecid.piazza.commons.dao.DAOException;
import hk.hku.cecid.piazza.commons.util.PropertyTree;
import hk.hku.cecid.piazza.corvus.admin.listener.AdminPageletAdaptor;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.xml.transform.Source;
/**
* @author Donahue Sze
*
*/
public class MessageHistoryPageletAdaptor extends AdminPageletAdaptor {
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.pagelet.xslt.BorderLayoutPageletAdaptor#getCenterSource(javax.servlet.http.HttpServletRequest)
*/
protected Source getCenterSource(HttpServletRequest request) {
PropertyTree dom = null;
try {
// construct updated delivery channels property tree
dom = getMessageHistory(request);
} catch (DAOException e) {
AS2PlusProcessor.getInstance().getLogger().debug(
"Unable to process the message search page request", e);
throw new RuntimeException(
"Unable to process the message search page request", e);
}
return dom.getSource();
}
/**
* @param request
* @return
* @throws DAOException
*/
private PropertyTree getMessageHistory(HttpServletRequest request)
throws DAOException {
// construct the dom tree
PropertyTree dom = new PropertyTree();
dom.setProperty("/message_history", "");
int numberOfMessagesInt = 20; // default value
int offsetInt = 0;
boolean isDetail = false;
boolean isTime = false;
int displayLastInt = 0;
// get the input parameters
Iterator messageIterator = null;
if (request.getParameter("original_message_id") != null) {
String originalMessageId = request
.getParameter("original_message_id");
String originalMessageBox = request
.getParameter("original_message_box");
isDetail = true;
// search the corresponding messages
MessageDAO messageDAO = (MessageDAO) AS2PlusProcessor.getInstance().getDAOFactory()
.createDAO(MessageDAO.class);
List messageList = messageDAO.findMessageByOriginalMessageID(
originalMessageId, originalMessageBox);
messageIterator = messageList.iterator();
dom.setProperty("total_no_of_messages", String.valueOf(messageList
.size()));
} else {
// text field
String messageId = checkStarAndConvertToPercent(request
.getParameter("message_id"));
String as2From = checkStarAndConvertToPercent(request
.getParameter("as2_from"));
String as2To = checkStarAndConvertToPercent(request
.getParameter("as2_to"));
// radio button and menu
String messageBox = checkEmptyAndConvertToPercent(request
.getParameter("message_box"));
String status = checkEmptyAndConvertToPercent(request
.getParameter("status"));
String primalMessageId = checkNullAndReturnEmpty(request
.getParameter("primal_message_id"));
String numOfMessages = request.getParameter("num_of_messages");
if (numOfMessages != null) {
numberOfMessagesInt = Integer.valueOf(numOfMessages).intValue();
}
//get the message_time value
String displayLast = request.getParameter("message_time");
if(displayLast != null){
if(!(displayLast.equals(""))){
displayLastInt = Integer.valueOf(displayLast).intValue();
isTime = true;
}
}
String offset = request.getParameter("offset");
if (offset != null) {
offsetInt = Integer.valueOf(offset).intValue();
}
String isDetailStr = request.getParameter("is_detail");
if (isDetailStr != null) {
if (isDetailStr.equalsIgnoreCase("true")) {
isDetail = true;
}
}
// search the corresponding messages
MessageDAO messageDAO = (MessageDAO) AS2PlusProcessor.getInstance().getDAOFactory()
.createDAO(MessageDAO.class);
MessageDVO messageDAOData = (MessageDVO) messageDAO.createDVO();
messageDAOData.setMessageId(messageId);
messageDAOData.setAs2From(as2From);
messageDAOData.setAs2To(as2To);
messageDAOData.setMessageBox(messageBox);
messageDAOData.setStatus(status);
messageDAOData.setPrimalMessageId(primalMessageId);
messageIterator = findMessageWithPagination(messageDAOData, messageDAO, numberOfMessagesInt, offsetInt, displayLastInt, isTime);
/*
if(!isTime){
messageIterator = messageDAO.findMessagesByHistory(messageDAOData,
numberOfMessagesInt, offsetInt).iterator();
}else{
messageIterator = messageDAO.findMessagesByTime(displayLastInt,messageDAOData,
numberOfMessagesInt, offsetInt).iterator();
}
*/
dom.setProperty("total_no_of_messages", String.valueOf(messageDAO
.findNumberOfMessagesByHistory(messageDAOData)));
}
// pass the search criteria
dom.setProperty("search_criteria/message_id", request
.getParameter("message_id"));
dom.setProperty("search_criteria/message_box", request
.getParameter("message_box"));
dom.setProperty("search_criteria/as2_from", request
.getParameter("as2_from"));
dom.setProperty("search_criteria/as2_to", request
.getParameter("as2_to"));
dom.setProperty("search_criteria/status", request
.getParameter("status"));
dom.setProperty("search_criteria/num_of_messages", String
.valueOf(numberOfMessagesInt));
//set the message criteria for message_time
dom.setProperty("search_criteria/message_time",String.valueOf(displayLastInt));
dom.setProperty("search_criteria/offset", String.valueOf(offsetInt));
dom.setProperty("search_criteria/is_detail", String.valueOf(isDetail));
dom.setProperty("search_criteria/primal_message_id", request.getParameter("primal_message_id"));
for (int pi = 1; messageIterator.hasNext(); pi++) {
MessageDVO returnData = (MessageDVO) messageIterator.next();
dom.setProperty("message[" + pi + "]/message_id",
checkNullAndReturnEmpty(returnData.getMessageId()));
dom.setProperty("message[" + pi + "]/message_box",
checkNullAndReturnEmpty(returnData.getMessageBox()));
dom.setProperty("message[" + pi + "]/as2_from",
checkNullAndReturnEmpty(returnData.getAs2From()));
dom.setProperty("message[" + pi + "]/as2_to",
checkNullAndReturnEmpty(returnData.getAs2To()));
dom.setProperty("message[" + pi + "]/time_stamp", returnData
.getTimeStamp().toString());
dom.setProperty("message[" + pi + "]/primal_message_id",
checkNullAndReturnEmpty(returnData.getPrimalMessageId()));
dom.setProperty("message[" + pi + "]/status",
checkNullAndReturnEmpty(returnData.getStatus()));
dom.setProperty("message[" + pi + "]/is_acknowledged", String
.valueOf(returnData.isAcknowledged()));
dom.setProperty("message[" + pi + "]/is_receipt", String
.valueOf(returnData.isReceipt()));
dom.setProperty("message[" + pi + "]/is_receipt_requested", String
.valueOf(returnData.isReceiptRequested()));
dom.setProperty("message[" + pi + "]/has_resend_as_new",
checkNullAndReturnEmpty(returnData.getHasResendAsNew()));
if (isDetail) {
dom.setProperty("message[" + pi + "]/receipt_url",
checkNullAndReturnEmpty(returnData.getReceiptUrl()));
dom.setProperty("message[" + pi + "]/mic_value",
checkNullAndReturnEmpty(returnData.getMicValue()));
dom.setProperty("message[" + pi + "]/original_message_id",
checkNullAndReturnEmpty(returnData
.getOriginalMessageId()));
dom.setProperty("message[" + pi + "]/status_description",
checkNullAndReturnEmpty(returnData
.getStatusDescription()));
}
}
return dom;
}
/**
* @param parameter
* @return
*/
private String checkEmptyAndConvertToPercent(String parameter) {
if (parameter == null || parameter.equals("")) {
return "%";
}
return parameter;
}
/**
* @param messageId
* @return
*/
private String checkNullAndReturnEmpty(String value) {
if (value == null) {
return new String("");
}
return value;
}
/**
* @param parameter
* @return
*/
private String checkStarAndConvertToPercent(String parameter) {
if (parameter == null || parameter.equals("")) {
return "%";
}
return parameter.replace("_", "\\_").replace("%", "\\%").replace('*', '%');
}
private Iterator findMessageWithPagination(MessageDVO data, MessageDAO messageDAO, int numberOfMessage, int offset, int displayLastInt, boolean isTime) throws DAOException{
if(!isTime){
return messageDAO.findMessagesByHistory(data,
numberOfMessage, offset).iterator();
}else{
return messageDAO.findMessagesByTime(displayLastInt,data,
numberOfMessage, offset).iterator();
}
}
}