package gov.samhsa.consent2share.pixclient.util; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.jxpath.JXPathContext; import org.hl7.v3.types.II; import org.hl7.v3.types.MCCIIN000002UV01; import org.hl7.v3.types.MCCIMT000200UV01Acknowledgement; import org.hl7.v3.types.MCCIMT000200UV01AcknowledgementDetail; import org.hl7.v3.types.MCCIMT000300UV01Acknowledgement; import org.hl7.v3.types.MCCIMT000300UV01AcknowledgementDetail; import org.hl7.v3.types.PRPAIN201310UV02; import org.hl7.v3.types.PRPAMT201307UV02PatientIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * The Class PixManagerMessageHelper. */ public class PixManagerMessageHelper { /** The logger. */ private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * Gets the adds the update message. * * @param response * the response * @param pixMgrBean * the pix mgr bean * @param msg * the msg * @return the adds the update message */ public void getAddUpdateMessage(MCCIIN000002UV01 response, PixManagerBean pixMgrBean, String msg) { // The message has been sent // But it doesn't mean we're subscribed successfully logger.debug("response ack code:" + response.getAcceptAckCode()); logger.debug("response type id: " + response.getTypeId()); final List<MCCIMT000200UV01Acknowledgement> ackmntList = response .getAcknowledgement(); for (final MCCIMT000200UV01Acknowledgement ackmnt : ackmntList) { if (ackmnt.getTypeCode().getCode().equals("CA")) { if (PixManagerConstants.PIX_ADD.equalsIgnoreCase(msg)) { pixMgrBean.setAddMessage(msg + " Success! "); } else if (PixManagerConstants.PIX_UPDATE.equalsIgnoreCase(msg)) { pixMgrBean.setUpdateMessage(msg + " Success! "); } break; } else if (ackmnt.getTypeCode().getCode().equals("CE")) { final List<MCCIMT000200UV01AcknowledgementDetail> ackmntDetList = ackmnt .getAcknowledgementDetail(); for (final MCCIMT000200UV01AcknowledgementDetail ackDet : ackmntDetList) { logger.error(msg + " error : " + ackDet.getText().getContent()); if (PixManagerConstants.PIX_ADD.equalsIgnoreCase(msg)) { pixMgrBean.setAddMessage(msg + " Failure! " + ackDet.getText().getContent()); } else if (PixManagerConstants.PIX_UPDATE .equalsIgnoreCase(msg)) { pixMgrBean.setUpdateMessage(msg + " Failure! " + ackDet.getText().getContent()); } break; } } else { if (PixManagerConstants.PIX_ADD.equalsIgnoreCase(msg)) { pixMgrBean.setAddMessage(msg + " Failure! "); } else if (PixManagerConstants.PIX_UPDATE.equalsIgnoreCase(msg)) { pixMgrBean.setUpdateMessage(msg + " Failure! "); } } } } /** * Gets the general exp message. * * @param e * the e * @param pixMgrBean * the pix mgr bean * @param msg * the msg * @return the general exp message */ public void getGeneralExpMessage(Exception e, PixManagerBean pixMgrBean, String msg) { // Expect the unexpected logger.error("Unexpected exception", e); // Add error logger.error("error", "Query Failure! Server error! A unexpected error has occured"); final String errMsg = " Failure! Server error! A unexpected error has occured"; logger.error("exception: " + e.getCause()); logger.error("detail message: " + e.getMessage()); if (PixManagerConstants.PIX_ADD.equalsIgnoreCase(msg)) { pixMgrBean.setAddMessage(msg + errMsg); } else if (PixManagerConstants.PIX_QUERY.equalsIgnoreCase(msg)) { pixMgrBean.setQueryMessage(msg + errMsg); } else if (PixManagerConstants.PIX_UPDATE.equalsIgnoreCase(msg)) { pixMgrBean.setUpdateMessage(msg + errMsg); } } /** * Gets the query message. * * @param response * the response * @param pixMgrBean * the pix mgr bean * @return the query message */ @SuppressWarnings("unchecked") public PixManagerBean getQueryMessage(PRPAIN201310UV02 response, PixManagerBean pixMgrBean) { // The message has been sent // But it doesn't mean we're subscribed successfully logger.debug("response ack code:" + response.getAcceptAckCode()); logger.debug("response type id: " + response.getTypeId()); final JXPathContext context = JXPathContext.newContext(response); final Iterator<MCCIMT000300UV01Acknowledgement> ackmntList = context .iterate("/acknowledgement"); while (ackmntList.hasNext()) { final MCCIMT000300UV01Acknowledgement ackmnt = ackmntList.next(); if (ackmnt.getTypeCode().getCode().equals("AA")) { final StringBuffer queryMsg = new StringBuffer( "Query Success! "); final Map<String, String> idMap = new HashMap<String, String>(); final Iterator<PRPAMT201307UV02PatientIdentifier> pidList = context .iterate("/controlActProcess/queryByParameter/value/parameterList/patientIdentifier"); while (pidList.hasNext()) { final PRPAMT201307UV02PatientIdentifier pid = pidList .next(); final List<II> ptIdList = pid.getValue(); for (final II ptId : ptIdList) { queryMsg.append(" Given PID: " + ptId.getExtension()); queryMsg.append(" Given UID: " + ptId.getRoot()); queryMsg.append("\t"); } } final Iterator<II> ptIdList = context .iterate("/controlActProcess/subject[1]/registrationEvent/subject1[typeCode='SBJ']/patient[classCode='PAT']/id"); while (ptIdList.hasNext()) { final II pId = ptIdList.next(); idMap.put(pId.getRoot(), pId.getExtension()); // System.out.println("Requested UID: " + pId.getRoot()); // System.out.println("Requested PID: " + // pId.getExtension()); // queryMsg.append(" Requested PID: " + pId.getExtension()); // queryMsg.append(" Requested UID: " + pId.getRoot()); // queryMsg.append("\t"); } pixMgrBean.setQueryMessage(queryMsg.toString()); pixMgrBean.setQueryIdMap(idMap); break; } else if (ackmnt.getTypeCode().getCode().equals("AE")) { final List<MCCIMT000300UV01AcknowledgementDetail> ackmntDetList = ackmnt .getAcknowledgementDetail(); for (final MCCIMT000300UV01AcknowledgementDetail ackDet : ackmntDetList) { logger.error("Query Failure! " + ackDet.getText().getContent()); pixMgrBean.setQueryMessage("Query Failure! " + ackDet.getText().getContent()); pixMgrBean.setQueryIdMap(null); break; } } else { pixMgrBean.setQueryMessage("Query Failure! "); pixMgrBean.setQueryIdMap(null); } } return pixMgrBean; } /** * Checks if is success. * * @param response * the response * @return true, if is success */ public boolean isSuccess(MCCIIN000002UV01 response) { return response.getAcknowledgement().stream() .map(a -> a.getTypeCode().getCode()) .filter(c -> "CA".equals(c)).count() > 0; } }