/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package gov.hhs.fha.nhinc.gateway.policyenginetransformation; import gov.hhs.fha.nhinc.common.nhinccommonadapter.CheckPolicyRequestType; import gov.hhs.fha.nhinc.common.eventcommon.SubscribeEventType; import gov.hhs.fha.nhinc.common.eventcommon.SubscribeMessageType; import gov.hhs.fha.nhinc.gateway.policyenginetransformation.Helpers.ActionHelper; import gov.hhs.fha.nhinc.gateway.policyenginetransformation.Helpers.AttributeHelper; import gov.hhs.fha.nhinc.gateway.policyenginetransformation.Helpers.Constants; import gov.hhs.fha.nhinc.gateway.policyenginetransformation.Helpers.InboundOutboundChecker; import gov.hhs.fha.nhinc.gateway.policyenginetransformation.Helpers.SubjectHelper; import gov.hhs.fha.nhinc.nhinclib.NullChecker; import java.util.List; import javax.xml.bind.JAXBElement; import oasis.names.tc.ebxml_regrep.xsd.query._3.AdhocQueryRequest; import oasis.names.tc.ebxml_regrep.xsd.rim._3.AdhocQueryType; import oasis.names.tc.xacml._2_0.context.schema.os.RequestType; import oasis.names.tc.xacml._2_0.context.schema.os.ResourceType; import oasis.names.tc.xacml._2_0.context.schema.os.SubjectType; import org.oasis_open.docs.wsn.b_2.Subscribe; import org.w3c.dom.Element; /** * * @author svalluripalli */ public class SubscribeTransformHelper { private static final String ActionInValue = "HIEMSubscriptionRequestIn"; private static final String ActionOutValue = "HIEMSubscriptionRequestOut"; private static final String PatientAssigningAuthorityAttributeId = Constants.AssigningAuthorityAttributeId; private static final String PatientIdAttributeId = Constants.ResourceIdAttributeId; public static CheckPolicyRequestType transformSubscribeToCheckPolicy(SubscribeEventType event) { CheckPolicyRequestType genericPolicyRequest = new CheckPolicyRequestType(); SubscribeMessageType message = event.getMessage(); RequestType request = new RequestType(); if (InboundOutboundChecker.IsInbound(event.getDirection())) { request.setAction(ActionHelper.actionFactory(ActionInValue)); } if (InboundOutboundChecker.IsOutbound(event.getDirection())) { request.setAction(ActionHelper.actionFactory(ActionOutValue)); } SubjectType subject = SubjectHelper.subjectFactory(event.getSendingHomeCommunity(), event.getMessage().getAssertion()); request.getSubject().add(subject); AdhocQueryRequest adhocReq = new AdhocQueryRequest(); AdhocQueryType adhocQuery = new AdhocQueryType(); adhocQuery = getAdhocQuery(event.getMessage().getSubscribe()); adhocReq.setAdhocQuery(adhocQuery); String patId = AdhocQueryTransformHelper.extractPatientIdentifierId(adhocReq); String assignAuth = AdhocQueryTransformHelper.extractPatientIdentifierAssigningAuthority(adhocReq); ResourceType resource = new ResourceType(); if (NullChecker.isNotNullish(assignAuth)) { resource.getAttribute().add(AttributeHelper.attributeFactory(PatientAssigningAuthorityAttributeId, Constants.DataTypeString, assignAuth)); } if (NullChecker.isNotNullish(patId)) { resource.getAttribute().add(AttributeHelper.attributeFactory(PatientIdAttributeId, Constants.DataTypeString, patId)); } request.getResource().add(resource); genericPolicyRequest.setRequest(request); return genericPolicyRequest; } public static AdhocQueryType getAdhocQuery(Subscribe nhinSubscribe) { AdhocQueryType adhocQuery = null; List any = nhinSubscribe.getAny(); for (Object anyItem : any) { if (anyItem instanceof oasis.names.tc.ebxml_regrep.xsd.rim._3.AdhocQueryType) { adhocQuery = (AdhocQueryType) anyItem; } if (anyItem instanceof Element) { Element element = (Element) anyItem; Object o = (JAXBElement) nhinSubscribe.getAny(); // Object o = (JAXBElement) anyItem; } if (anyItem instanceof JAXBElement) { if (((JAXBElement) anyItem).getValue() instanceof AdhocQueryType) { adhocQuery = (AdhocQueryType) ((JAXBElement) anyItem).getValue(); } } } return adhocQuery; } }