package org.akaza.openclinica.web.restful; import java.util.ArrayList; import java.util.LinkedHashMap; import javax.sql.DataSource; import net.sf.json.JSON; import net.sf.json.xml.XMLSerializer; import org.akaza.openclinica.bean.extract.odm.ClinicalDataReportBean; import org.akaza.openclinica.bean.extract.odm.FullReportBean; import org.akaza.openclinica.bean.extract.odm.MetaDataReportBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.odmbeans.ODMBean; import org.akaza.openclinica.bean.odmbeans.OdmClinicalDataBean; import org.akaza.openclinica.dao.core.CoreResources; import org.akaza.openclinica.dao.hibernate.RuleSetDao; import org.akaza.openclinica.dao.hibernate.RuleSetRuleDao; import org.akaza.openclinica.dao.hibernate.StudyDao; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.akaza.openclinica.dao.service.StudyConfigService; import org.akaza.openclinica.dao.service.StudyParameterValueDAO; import org.akaza.openclinica.domain.datamap.Study; import org.akaza.openclinica.logic.odmExport.AdminDataCollector; import org.akaza.openclinica.logic.odmExport.MetaDataCollector; /** * R * @author jnyayapathi * */ public class MetadataCollectorResource { private static final int INDENT_LEVEL = 2; private DataSource dataSource; private StudyDAO studyDao; private RuleSetRuleDao ruleSetRuleDao; private CoreResources coreResources; //Testing purposes TODO:remove me private StudyDao studyDaoHib; public StudyDao getStudyDaoHib() { return studyDaoHib; } public void setStudyDaoHib(StudyDao studyDaoHib) { this.studyDaoHib = studyDaoHib; } public CoreResources getCoreResources() { return coreResources; } public void setCoreResources(CoreResources coreResources) { this.coreResources = coreResources; } public RuleSetRuleDao getRuleSetRuleDao() { return ruleSetRuleDao; } public void setRuleSetRuleDao(RuleSetRuleDao ruleSetRuleDao) { this.ruleSetRuleDao = ruleSetRuleDao; } public StudyDAO getStudyDao() { return new StudyDAO(dataSource); } public void setStudyDao(StudyDAO studyDao) { this.studyDao = studyDao; } public DataSource getDataSource() { return dataSource; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public MetadataCollectorResource(){ } public String collectODMMetadata(String studyOID){ StudyBean studyBean = getStudyDao().findByOid(studyOID); MetaDataCollector mdc = new MetaDataCollector(this.dataSource, studyBean,getRuleSetRuleDao()); AdminDataCollector adc = new AdminDataCollector(this.dataSource, studyBean); MetaDataCollector.setTextLength(200); ODMBean odmb = mdc.getODMBean(); odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 OpenClinica-ODM1-3-0-OC2-0.xsd"); ArrayList<String> xmlnsList = new ArrayList<String>(); xmlnsList.add("xmlns=\"http://www.cdisc.org/ns/odm/v1.3\""); //xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/openclinica_odm/v1.3\""); xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/odm_ext_v130/v3.1\""); xmlnsList.add("xmlns:OpenClinicaRules=\"http://www.openclinica.org/ns/rules/v3.1\""); odmb.setXmlnsList(xmlnsList); odmb.setODMVersion("oc1.3"); mdc.setODMBean(odmb); adc.setOdmbean(odmb); mdc.collectFileData(); adc.collectFileData(); FullReportBean report = new FullReportBean(); report.setAdminDataMap(adc.getOdmAdminDataMap()); report.setOdmStudyMap(mdc.getOdmStudyMap()); report.setCoreResources(getCoreResources()); report.setOdmBean(mdc.getODMBean()); report.setODMVersion("oc1.3"); report.createStudyMetaOdmXml(Boolean.FALSE); return report.getXmlOutput().toString().trim(); } public String collectODMMetadataJson(String studyOID){ net.sf.json.xml.XMLSerializer xmlserializer = new XMLSerializer(); JSON json = xmlserializer.read(collectODMMetadata(studyOID)); return json.toString(INDENT_LEVEL); } public JSON collectODMMetadataJson(String studyOID,String formVersionOID){ net.sf.json.xml.XMLSerializer xmlserializer = new XMLSerializer(); JSON json = xmlserializer.read(collectODMMetadataForForm(studyOID,formVersionOID)); return json; } public String collectODMMetadataJsonString(String studyOID,String formVersionOID){ net.sf.json.xml.XMLSerializer xmlserializer = new XMLSerializer(); JSON json = xmlserializer.read(collectODMMetadataForForm(studyOID,formVersionOID)); return json.toString(INDENT_LEVEL); } public String collectODMMetadataForForm(String studyOID,String formVersionOID) { StudyBean studyBean = getStudyDao().findByOid(studyOID); if(studyBean!=null) studyBean = populateStudyBean(studyBean); MetaDataCollector mdc = new MetaDataCollector(this.dataSource, studyBean,getRuleSetRuleDao()); AdminDataCollector adc = new AdminDataCollector(this.dataSource, studyBean); MetaDataCollector.setTextLength(200); ODMBean odmb = mdc.getODMBean(); odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 OpenClinica-ODM1-3-0-OC2-0.xsd"); ArrayList<String> xmlnsList = new ArrayList<String>(); xmlnsList.add("xmlns=\"http://www.cdisc.org/ns/odm/v1.3\""); //xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/openclinica_odm/v1.3\""); xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/odm_ext_v130/v3.1\""); xmlnsList.add("xmlns:OpenClinicaRules=\"http://www.openclinica.org/ns/rules/v3.1\""); odmb.setXmlnsList(xmlnsList); odmb.setODMVersion("oc1.3"); mdc.setODMBean(odmb); adc.setOdmbean(odmb); if(studyBean==null) mdc.collectFileData(formVersionOID); else mdc.collectFileData(); adc.collectFileData(); FullReportBean report = new FullReportBean(); report.setAdminDataMap(adc.getOdmAdminDataMap()); report.setOdmStudyMap(mdc.getOdmStudyMap()); report.setCoreResources(getCoreResources()); report.setOdmBean(mdc.getODMBean()); report.setODMVersion("oc1.3"); report.createStudyMetaOdmXml(Boolean.FALSE); return report.getXmlOutput().toString().trim(); } public FullReportBean collectODMMetadataForClinicalData(String studyOID,String formVersionOID, LinkedHashMap<String,OdmClinicalDataBean> clinicalDataMap) { StudyBean studyBean = getStudyDao().findByOid(studyOID); if(studyBean!=null) studyBean = populateStudyBean(studyBean); MetaDataCollector mdc = new MetaDataCollector(this.dataSource, studyBean,getRuleSetRuleDao()); AdminDataCollector adc = new AdminDataCollector(this.dataSource, studyBean); MetaDataCollector.setTextLength(200); ODMBean odmb = mdc.getODMBean(); odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 OpenClinica-ODM1-3-0-OC2-0.xsd"); ArrayList<String> xmlnsList = new ArrayList<String>(); xmlnsList.add("xmlns=\"http://www.cdisc.org/ns/odm/v1.3\""); //xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/openclinica_odm/v1.3\""); xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/odm_ext_v130/v3.1\""); xmlnsList.add("xmlns:OpenClinicaRules=\"http://www.openclinica.org/ns/rules/v3.1\""); odmb.setXmlnsList(xmlnsList); odmb.setODMVersion("oc1.3"); mdc.setODMBean(odmb); adc.setOdmbean(odmb); if(studyBean==null) mdc.collectFileData(formVersionOID); else mdc.collectFileData(); adc.collectFileData(); FullReportBean report = new FullReportBean(); report.setAdminDataMap(adc.getOdmAdminDataMap()); report.setOdmStudyMap(mdc.getOdmStudyMap()); report.setCoreResources(getCoreResources()); report.setOdmBean(mdc.getODMBean()); //report.setClinicalData(odmClinicalDataBean); report.setClinicalDataMap(clinicalDataMap); report.setODMVersion("oc1.3"); return report; } private StudyBean populateStudyBean(StudyBean studyBean) { StudyParameterValueDAO spvdao = new StudyParameterValueDAO(this.dataSource); @SuppressWarnings("rawtypes") ArrayList studyParameters = spvdao.findParamConfigByStudy(studyBean); studyBean.setStudyParameters(studyParameters); StudyConfigService scs = new StudyConfigService(this.dataSource); if (studyBean.getParentStudyId() <= 0) {// top study studyBean = scs.setParametersForStudy(studyBean); } else { // YW << studyBean.setParentStudyName(((StudyBean) getStudyDao().findByPK(studyBean.getParentStudyId())).getName()); // YW >> studyBean = scs.setParametersForSite(studyBean); } return studyBean; } }