/*
* 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.ebms.admin.listener;
import hk.hku.cecid.ebms.spa.EbmsProcessor;
import hk.hku.cecid.ebms.spa.dao.MessageDAO;
import hk.hku.cecid.ebms.spa.dao.MessageDVO;
import hk.hku.cecid.ebms.spa.handler.MessageClassifier;
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.ArrayList;
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) {
EbmsProcessor.core.log.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");
String refToMessageType = request
.getParameter("ref_to_message_type");
String refToMessageBox = originalMessageBox
.equals(MessageClassifier.MESSAGE_BOX_INBOX) ? MessageClassifier.MESSAGE_BOX_OUTBOX
: MessageClassifier.MESSAGE_BOX_INBOX;
isDetail = true;
// search the corresponding messages
MessageDAO messageDAO = (MessageDAO) EbmsProcessor.core.dao
.createDAO(MessageDAO.class);
MessageDVO messageDVO = (MessageDVO) messageDAO.createDVO();
messageDVO.setRefToMessageId(originalMessageId);
messageDVO.setMessageBox(refToMessageBox);
messageDVO.setMessageType(refToMessageType);
List messageList = new ArrayList();
if (messageDAO.findRefToMessage(messageDVO)) {
messageList.add(messageDVO);
}
messageIterator = messageList.iterator();
dom.setProperty("total_no_of_messages", String.valueOf(messageList
.size()));
} else {
// text field
String messageId = checkStarAndConvertToPercent(request
.getParameter("message_id"));
String cpaId = checkStarAndConvertToPercent(request
.getParameter("cpa_id"));
String service = checkStarAndConvertToPercent(request
.getParameter("service"));
String action = checkStarAndConvertToPercent(request
.getParameter("action"));
String convId = checkStarAndConvertToPercent(request
.getParameter("conv_id"));
String primalMessageId = checkEmptyAndReturnNull(request
.getParameter("primal_message_id"));
// radio button and menu
String messageBox = checkEmptyAndReturnNull(request
.getParameter("message_box"));
String status = checkEmptyAndReturnNull(request
.getParameter("status"));
//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 numOfMessages = request.getParameter("num_of_messages");
if (numOfMessages != null) {
numberOfMessagesInt = Integer.valueOf(numOfMessages).intValue();
}
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) EbmsProcessor.core.dao
.createDAO(MessageDAO.class);
MessageDVO messageDVO = (MessageDVO) messageDAO.createDVO();
messageDVO.setMessageId(messageId);
messageDVO.setCpaId(cpaId);
messageDVO.setService(service);
messageDVO.setAction(action);
messageDVO.setConvId(convId);
messageDVO.setMessageBox(messageBox);
messageDVO.setStatus(status);
messageDVO.setPrimalMessageId(primalMessageId);
messageIterator = findMessageWithPagination(messageDVO,messageDAO, numberOfMessagesInt, offsetInt,displayLastInt, isTime);
dom.setProperty("total_no_of_messages", String.valueOf(messageDAO
.findNumberOfMessagesByHistory(messageDVO)));
}
// 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/cpa_id", request
.getParameter("cpa_id"));
dom.setProperty("search_criteria/service", request
.getParameter("service"));
dom.setProperty("search_criteria/action", request
.getParameter("action"));
dom.setProperty("search_criteria/conv_id", request
.getParameter("conv_id"));
dom.setProperty("search_criteria/status", request
.getParameter("status"));
dom.setProperty("search_criteria/num_of_messages", String
.valueOf(numberOfMessagesInt));
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 + "]/ack_requested",
checkNullAndReturnEmpty(returnData.getAckRequested()));
dom.setProperty("message[" + pi + "]/ref_to_message_id",
checkNullAndReturnEmpty(returnData.getRefToMessageId()));
dom.setProperty("message[" + pi + "]/message_type",
checkNullAndReturnEmpty(returnData.getMessageType()));
dom.setProperty("message[" + pi + "]/cpa_id",
checkNullAndReturnEmpty(returnData.getCpaId()));
dom.setProperty("message[" + pi + "]/service",
checkNullAndReturnEmpty(returnData.getService()));
dom.setProperty("message[" + pi + "]/action",
checkNullAndReturnEmpty(returnData.getAction()));
dom.setProperty("message[" + pi + "]/conv_id",
checkNullAndReturnEmpty(returnData.getConvId()));
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 + "]/has_resend_as_new",
checkNullAndReturnEmpty(returnData.getHasResendAsNew()));
if("PE".equalsIgnoreCase(returnData.getStatus())
|| "DF".equalsIgnoreCase(returnData.getStatus())) {
dom.setProperty("message[" + pi + "]/status_description",
checkNullAndReturnEmpty(returnData
.getStatusDescription()));
}
if (isDetail) {
dom.setProperty("message[" + pi + "]/from_party_id",
checkNullAndReturnEmpty(returnData.getFromPartyId()));
dom.setProperty("message[" + pi + "]/from_party_type",
checkNullAndReturnEmpty(returnData.getFromPartyRole()));
dom.setProperty("message[" + pi + "]/to_party_id",
checkNullAndReturnEmpty(returnData.getToPartyId()));
dom.setProperty("message[" + pi + "]/to_party_type",
checkNullAndReturnEmpty(returnData.getToPartyRole()));
dom.setProperty("message[" + pi + "]/ack_sign_requested",
checkNullAndReturnEmpty(returnData
.getAckSignRequested()));
if (returnData.getSequenceStatus() != -1) {
dom.setProperty("message[" + pi + "]/sequence_group",
String.valueOf(returnData.getSequenceGroup()));
dom.setProperty("message[" + pi + "]/sequence_no", String
.valueOf(returnData.getSequenceNo()));
dom.setProperty("message[" + pi + "]/sequence_status",
String.valueOf(returnData.getSequenceStatus()));
}
dom.setProperty("message[" + pi + "]/status_description",
checkNullAndReturnEmpty(returnData
.getStatusDescription()));
}
}
return dom;
}
private String checkEmptyAndReturnNull(String parameter) {
if (parameter == null || parameter.equals("")) {
return null;
}
return parameter;
}
private String checkNullAndReturnEmpty(String parameter) {
if (parameter == null) {
return new String("");
}
return parameter;
}
/**
* @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();
}
}
}