package org.akaza.openclinica.ws.client; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudySubjectBean; import org.akaza.openclinica.bean.managestudy.SubjectTransferBean; import org.akaza.openclinica.bean.submit.SubjectBean; import org.akaza.openclinica.service.subject.SubjectServiceInterface; import org.springframework.util.xml.DomUtils; import org.springframework.ws.client.core.support.WebServiceGatewaySupport; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import java.util.Date; import java.util.List; public class SoapCreateSubject extends WebServiceGatewaySupport implements SubjectServiceInterface { private static final String NAMESPACE_URI = "http://openclinica.org/create-subject"; public String createSubject(SubjectBean subjectBean, StudyBean studyBean, Date enrollmentDate, String secondaryId) { Element requestElement = prepareRequest(subjectBean, studyBean); DOMSource source = new DOMSource(requestElement); DOMResult result = new DOMResult(); getWebServiceTemplate().sendSourceAndReceiveToResult(source, result); return processResponse(result.getNode()); } private Element prepareRequest(SubjectBean subjectBean, StudyBean studyBean) { Document document = getDocument(); Element requestElement = document.createElementNS(NAMESPACE_URI, "createSubjectRequest"); requestElement.appendChild(mapSubject(document, subjectBean)); requestElement.appendChild(mapStudy(document, studyBean)); return requestElement; } private Element mapSubject(Document document, SubjectBean subject) { Element subjectElement = document.createElementNS(NAMESPACE_URI, "subject"); subjectElement.setAttribute("uniqueIdentifier", subject.getUniqueIdentifier()); return subjectElement; } private Element mapStudy(Document document, StudyBean study) { Element subjectElement = document.createElementNS(NAMESPACE_URI, "study"); subjectElement.setAttribute("identifier", study.getIdentifier()); return subjectElement; } private Document getDocument() { try { return DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); } catch (ParserConfigurationException e) { throw new RuntimeException(e); } } private String processResponse(Node node) { Element responseElement = (Element) node.getFirstChild(); return mapRewardConfirmation(DomUtils.getChildElementByTagName(responseElement, "result")); } @SuppressWarnings("unchecked") private String mapRewardConfirmation(Element confirmationElement) { String confirmationNumber = confirmationElement.getAttribute("success"); return confirmationNumber; } public boolean validate(SubjectTransferBean subjectTransferBean) { // TODO Auto-generated method stub return false; } public List<StudySubjectBean> getStudySubject(StudyBean study){ return null; } }