[507] | 1 | /*
|
---|
| 2 | * To change this template, choose Tools | Templates
|
---|
| 3 | * and open the template in the editor.
|
---|
| 4 | */
|
---|
| 5 | package gov.hhs.fha.nhinc.adapter.reidentification;
|
---|
| 6 |
|
---|
| 7 | import java.util.List;
|
---|
| 8 | import javax.xml.bind.JAXBElement;
|
---|
| 9 | import org.hl7.v3.PIXConsumerPRPAIN201309UVRequestType;
|
---|
| 10 | import org.hl7.v3.PIXConsumerPRPAIN201310UVRequestType;
|
---|
| 11 | import org.hl7.v3.PRPAIN201309UV;
|
---|
| 12 | import org.hl7.v3.PRPAIN201310UV;
|
---|
| 13 | import org.hl7.v3.PRPAIN201309UVQUQIMT021001UV01ControlActProcess;
|
---|
| 14 | import org.hl7.v3.PRPAMT201307UVQueryByParameter;
|
---|
| 15 | import org.hl7.v3.PRPAMT201307UVParameterList;
|
---|
| 16 | import org.hl7.v3.PRPAMT201307UVPatientIdentifier;
|
---|
| 17 | import org.hl7.v3.II;
|
---|
| 18 | import org.hl7.v3.MCCIMT000100UV01Sender;
|
---|
| 19 | import org.hl7.v3.MCCIMT000100UV01Receiver;
|
---|
| 20 | import org.hl7.v3.MCCIMT000100UV01Device;
|
---|
| 21 | import gov.hhs.fha.nhinc.adapter.reidentification.data.PseudonymMap;
|
---|
| 22 | import gov.hhs.fha.nhinc.transform.subdisc.HL7Constants;
|
---|
| 23 | import gov.hhs.fha.nhinc.transform.subdisc.HL7PRPA201310Transforms;
|
---|
| 24 |
|
---|
| 25 | /**
|
---|
| 26 | * This provides the implementation of the adapter reidentification web service
|
---|
| 27 | */
|
---|
| 28 | class AdapterReidentificationImpl {
|
---|
| 29 | //localDeviceId is currently just set to a default value
|
---|
| 30 | private String localDeviceId = HL7Constants.DEFAULT_LOCAL_DEVICE_ID;
|
---|
| 31 |
|
---|
| 32 | PIXConsumerPRPAIN201310UVRequestType getRealIdentifier(PIXConsumerPRPAIN201309UVRequestType realIdentifierRequest) {
|
---|
| 33 | PIXConsumerPRPAIN201310UVRequestType ret201310RequestType = new PIXConsumerPRPAIN201310UVRequestType();
|
---|
| 34 |
|
---|
| 35 | if (realIdentifierRequest != null) {
|
---|
| 36 | ret201310RequestType.setAssertion(realIdentifierRequest.getAssertion());
|
---|
| 37 |
|
---|
| 38 | PRPAIN201310UV response201310 = null;
|
---|
| 39 | PRPAIN201309UV request201309 = realIdentifierRequest.getPRPAIN201309UV();
|
---|
| 40 | if (request201309 != null) {
|
---|
| 41 | // extract information from the 201309 request message
|
---|
| 42 | // extract sender OID and set to the receiver OID for the 201310
|
---|
| 43 | String receiverOID = extractSenderOID(request201309);
|
---|
| 44 |
|
---|
| 45 | // extract receiver OID and set to the sender OID for the 201310
|
---|
| 46 | String senderOID = extractReceiverOID(request201309);
|
---|
| 47 |
|
---|
| 48 | if (senderOID != null && receiverOID != null) {
|
---|
| 49 | // extract queryByParameter
|
---|
| 50 | PRPAMT201307UVQueryByParameter queryByParameter = extractQueryByParameter(request201309);
|
---|
| 51 |
|
---|
| 52 | // extract pseudonymPatientId and pseudonymPatientIdAssigningAuthority
|
---|
| 53 | // and translate to real patient IDs
|
---|
| 54 | String realPatientId = null;
|
---|
| 55 | String realAssigningAuthority = null;
|
---|
| 56 | if (queryByParameter != null) {
|
---|
| 57 | II pseudoPatientItem = extractPseudoPatientIds(queryByParameter);
|
---|
| 58 | if (pseudoPatientItem != null) {
|
---|
| 59 | String pseudonymPatientIdAssigningAuthority = pseudoPatientItem.getRoot();
|
---|
| 60 | String pseudonymPatientId = pseudoPatientItem.getExtension();
|
---|
| 61 | if (pseudonymPatientIdAssigningAuthority != null && pseudonymPatientId != null) {
|
---|
| 62 | // look up real patient id and assigning authority
|
---|
| 63 | PseudonymMapManager.readMap();
|
---|
| 64 | PseudonymMap pseudonymMap = PseudonymMapManager.findPseudonymMap(pseudonymPatientIdAssigningAuthority, pseudonymPatientId);
|
---|
| 65 | if (pseudonymMap != null) {
|
---|
| 66 | realPatientId = pseudonymMap.getRealPatientId();
|
---|
| 67 | realAssigningAuthority = pseudonymMap.getRealPatientIdAssigningAuthority();
|
---|
| 68 | }
|
---|
| 69 | }
|
---|
| 70 | }
|
---|
| 71 | }
|
---|
| 72 | if (realPatientId != null && realAssigningAuthority != null) {
|
---|
| 73 | response201310 = HL7PRPA201310Transforms.createPRPA201310(realPatientId, realAssigningAuthority, localDeviceId, senderOID, receiverOID, queryByParameter);
|
---|
| 74 | } else {
|
---|
| 75 | response201310 = HL7PRPA201310Transforms.createFaultPRPA201310(senderOID, receiverOID);
|
---|
| 76 | }
|
---|
| 77 | } else {
|
---|
| 78 | response201310 = HL7PRPA201310Transforms.createFaultPRPA201310();
|
---|
| 79 | }
|
---|
| 80 | } else {
|
---|
| 81 | //create error response
|
---|
| 82 | response201310 = HL7PRPA201310Transforms.createFaultPRPA201310();
|
---|
| 83 | }
|
---|
| 84 | ret201310RequestType.setPRPAIN201310UV(response201310);
|
---|
| 85 | }
|
---|
| 86 | return ret201310RequestType;
|
---|
| 87 | }
|
---|
| 88 |
|
---|
| 89 | private II extractPseudoPatientIds(PRPAMT201307UVQueryByParameter queryByParameter) {
|
---|
| 90 | II pseudoPatientItem = null;
|
---|
| 91 | if (queryByParameter != null) {
|
---|
| 92 | PRPAMT201307UVParameterList parameterList = queryByParameter.getParameterList();
|
---|
| 93 | if (parameterList != null) {
|
---|
| 94 | PRPAMT201307UVPatientIdentifier patientIdentifier = null;
|
---|
| 95 | List<PRPAMT201307UVPatientIdentifier> patientIdentifierList = parameterList.getPatientIdentifier();
|
---|
| 96 | if (patientIdentifierList != null && !patientIdentifierList.isEmpty()) {
|
---|
| 97 | patientIdentifier = patientIdentifierList.get(0);
|
---|
| 98 | List<II> iiList = patientIdentifier.getValue();
|
---|
| 99 | if (iiList != null && !iiList.isEmpty()) {
|
---|
| 100 | pseudoPatientItem = iiList.get(0);
|
---|
| 101 | }
|
---|
| 102 | }
|
---|
| 103 | }
|
---|
| 104 | }
|
---|
| 105 | return pseudoPatientItem;
|
---|
| 106 | }
|
---|
| 107 |
|
---|
| 108 | private PRPAMT201307UVQueryByParameter extractQueryByParameter(PRPAIN201309UV request201309) {
|
---|
| 109 | PRPAMT201307UVQueryByParameter queryByParameter = null;
|
---|
| 110 | PRPAIN201309UVQUQIMT021001UV01ControlActProcess controlAct = request201309.getControlActProcess();
|
---|
| 111 | if (controlAct != null) {
|
---|
| 112 | JAXBElement<PRPAMT201307UVQueryByParameter> queryByParameterElem = controlAct.getQueryByParameter();
|
---|
| 113 | if (queryByParameterElem != null) {
|
---|
| 114 | queryByParameter = queryByParameterElem.getValue();
|
---|
| 115 | }
|
---|
| 116 | }
|
---|
| 117 | return queryByParameter;
|
---|
| 118 | }
|
---|
| 119 |
|
---|
| 120 | private String extractReceiverOID(PRPAIN201309UV request201309) {
|
---|
| 121 | String receiverOID201309 = null;
|
---|
| 122 | List<MCCIMT000100UV01Receiver> receiver201309List = request201309.getReceiver();
|
---|
| 123 | if (receiver201309List != null && !receiver201309List.isEmpty()) {
|
---|
| 124 | MCCIMT000100UV01Receiver receiver201309 = receiver201309List.get(0);
|
---|
| 125 | MCCIMT000100UV01Device receiverDevice = receiver201309.getDevice();
|
---|
| 126 | if (receiverDevice != null) {
|
---|
| 127 | List<II> listDevices = receiverDevice.getId();
|
---|
| 128 | if (listDevices != null && !listDevices.isEmpty()) {
|
---|
| 129 | for (II item : listDevices) {
|
---|
| 130 | receiverOID201309 = item.getRoot();
|
---|
| 131 | }
|
---|
| 132 | }
|
---|
| 133 | }
|
---|
| 134 | }
|
---|
| 135 | return receiverOID201309;
|
---|
| 136 | }
|
---|
| 137 |
|
---|
| 138 | private String extractSenderOID(PRPAIN201309UV request201309) {
|
---|
| 139 | String senderOID201309 = null;
|
---|
| 140 | MCCIMT000100UV01Sender sender201309 = request201309.getSender();
|
---|
| 141 | if (sender201309 != null) {
|
---|
| 142 | MCCIMT000100UV01Device senderDevice = sender201309.getDevice();
|
---|
| 143 | if (senderDevice != null) {
|
---|
| 144 | List<II> listDevices = senderDevice.getId();
|
---|
| 145 | if (listDevices != null && !listDevices.isEmpty()) {
|
---|
| 146 | for (II item : listDevices) {
|
---|
| 147 | senderOID201309 = item.getRoot();
|
---|
| 148 | }
|
---|
| 149 | }
|
---|
| 150 | }
|
---|
| 151 | }
|
---|
| 152 | return senderOID201309;
|
---|
| 153 | }
|
---|
| 154 | }
|
---|