Guest User

Untitled

a guest
Mar 3rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.24 KB | None | 0 0
  1. package org.openxdata.server.service.impl;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. import java.util.Set;
  8.  
  9. import org.openxdata.oc.model.ConvertedOpenclinicaStudy;
  10. import org.openxdata.oc.transport.OpenClinicaSoapClient;
  11. import org.openxdata.oc.transport.factory.ConnectionURLFactory;
  12. import org.openxdata.oc.transport.impl.OpenClinicaSoapClientImpl;
  13. import org.openxdata.server.admin.model.FormData;
  14. import org.openxdata.server.admin.model.FormDef;
  15. import org.openxdata.server.admin.model.OpenclinicaStudy;
  16. import org.openxdata.server.admin.model.StudyDef;
  17. import org.openxdata.server.admin.model.exception.UnexpectedException;
  18. import org.openxdata.server.dao.EditableDAO;
  19. import org.openxdata.server.dao.FormDataDAO;
  20. import org.openxdata.server.dao.SettingDAO;
  21. import org.openxdata.server.dao.StudyDAO;
  22. import org.openxdata.server.service.OpenclinicaService;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.security.annotation.Secured;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27.  
  28. @Transactional
  29. @Service("openClinicaService")
  30. public class OpenclinicaServiceImpl implements OpenclinicaService {
  31.  
  32. @Autowired
  33. private StudyDAO studyDAO;
  34.  
  35. @Autowired
  36. private FormDataDAO formDataDAO;
  37.  
  38. @Autowired
  39. private EditableDAO editableDAO;
  40.  
  41. @Autowired
  42. private SettingDAO settingDAO;
  43.  
  44. private OpenClinicaSoapClient client;
  45.  
  46. private OpenClinicaSoapClient getClient() {
  47.  
  48. if(client == null){
  49. String host = settingDAO.getSetting("openClinicaWebServiceHost");
  50. String userName = settingDAO.getSetting("OpenClinicaUserName");
  51. String password = settingDAO.getSetting("OpenClinicaUserHashedPassword");
  52.  
  53. ConnectionURLFactory factory = new ConnectionURLFactory(host);
  54.  
  55. client = new OpenClinicaSoapClientImpl(userName, password);
  56. client.setConnectionFactory(factory);
  57. }
  58. return client;
  59. }
  60.  
  61. @Override
  62. @Transactional(readOnly=true)
  63. @Secured("Perm_View_Form_Data")
  64. public Boolean hasStudyData(String studyKey) {
  65. StudyDef study = studyDAO.getStudy(studyKey);
  66. return editableDAO.hasEditableData(study);
  67. }
  68.  
  69. @Override
  70. public Set<OpenclinicaStudy> getOpenClinicaStudies() {
  71.  
  72. Set<OpenclinicaStudy> returnStudies = new HashSet<OpenclinicaStudy>();
  73. List<ConvertedOpenclinicaStudy> studies = getClient().listAll();
  74.  
  75. try{
  76.  
  77. List<StudyDef> openxdataStudies = studyDAO.getStudies();
  78. List<ConvertedOpenclinicaStudy> uniqueStudies = new ArrayList<ConvertedOpenclinicaStudy>();
  79.  
  80. // Add only unique studies not previously downloaded.
  81. for (ConvertedOpenclinicaStudy study : studies) {
  82. if(!isStudyDownloaded(openxdataStudies, study)){
  83. uniqueStudies.add(study);
  84. }
  85. }
  86.  
  87. convertToOpenXDataOCStudy(returnStudies, uniqueStudies);
  88.  
  89. }catch(Exception ex){
  90. throw new UnexpectedException(ex.getMessage());
  91. }
  92.  
  93. return returnStudies;
  94. }
  95.  
  96. private void convertToOpenXDataOCStudy(Set<OpenclinicaStudy> returnStudies,
  97. List<ConvertedOpenclinicaStudy> uniqueStudies) {
  98. for (ConvertedOpenclinicaStudy study : uniqueStudies) {
  99. OpenclinicaStudy ocStudy = new OpenclinicaStudy();
  100. ocStudy.setName(study.getName());
  101. ocStudy.setOID(study.getOID());
  102. ocStudy.setIdentifier(study.getIdentifier());
  103.  
  104. Collection<String> subjects = getClient().getSubjectKeys(study.getIdentifier());
  105. ocStudy.setSubjects(subjects);
  106.  
  107. returnStudies.add(ocStudy);
  108. }
  109. }
  110.  
  111. private boolean isStudyDownloaded(List<StudyDef> studies, ConvertedOpenclinicaStudy study) {
  112.  
  113. for (StudyDef def : studies) {
  114.  
  115. String oxdStudyName = def.getName();
  116. String oxdStudyIdentifier = def.getStudyKey();
  117.  
  118. String ocStudyName = study.getName();
  119. String ocStudyIdentifier = study.getIdentifier();
  120.  
  121. if(oxdStudyName.equals(ocStudyName) &&
  122. oxdStudyIdentifier == ocStudyIdentifier){
  123.  
  124. return true;
  125. }
  126. }
  127. return false;
  128. }
  129.  
  130. @Override
  131. public String importOpenClinicaStudy(String identifier) throws UnexpectedException {
  132.  
  133. Collection<String> subjectKeys = getStudySubjects(identifier);
  134.  
  135. String xml = "";
  136. if(subjectKeys != null && subjectKeys.size() > 0){
  137. xml = (String) getClient().getOpenxdataForm(identifier);
  138. }
  139.  
  140. return xml;
  141. }
  142.  
  143. @Override
  144. public Set<String> getStudySubjects(String studyOID) throws UnexpectedException {
  145. Set<String> subjects = new HashSet<String>();
  146. try{
  147. Collection<String> returnedSubjects = getClient().getSubjectKeys(studyOID);
  148. for(String x : returnedSubjects){
  149. subjects.add(x);
  150. }
  151. }catch(Exception ex){
  152. throw new UnexpectedException(ex);
  153. }
  154.  
  155. return subjects;
  156. }
  157.  
  158. @Override
  159. public void exportOpenClinicaStudyData(String studyKey) {
  160. StudyDef study = studyDAO.getStudy(studyKey);
  161. List<String> allData = new ArrayList<String>();
  162. for (FormDef form : study.getForms()) {
  163. List<FormData> dataList = formDataDAO.getFormDataList(form);
  164. for (FormData formData: dataList) {
  165. allData.add(formData.getData());
  166. }
  167. }
  168. getClient().importData(allData);
  169. }
  170.  
  171. @Override
  172. public void setClient(OpenClinicaSoapClient client) {
  173. this.client = (OpenClinicaSoapClientImpl) client;
  174. }
  175. }
Add Comment
Please, Sign In to add comment