/** createODMfile, added by tbh, 01/2009 */ public HashMap<String, Integer> createODMFile( String odmVersion, long sysTimeBegin, String generalFileDir, DatasetBean datasetBean, StudyBean currentStudy, String generalFileDirCopy, ExtractBean eb, Integer currentStudyId, Integer parentStudyId, String studySubjectNumber) { Integer ssNumber = getStudySubjectNumber(studySubjectNumber); MetaDataCollector mdc = new MetaDataCollector(ds, datasetBean, currentStudy); AdminDataCollector adc = new AdminDataCollector(ds, datasetBean, currentStudy); ClinicalDataCollector cdc = new ClinicalDataCollector(ds, datasetBean, currentStudy); MetaDataCollector.setTextLength(200); if (odmVersion != null) { // by default odmVersion is 1.2 if ("1.3".equals(odmVersion)) { ODMBean odmb = new ODMBean(); odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 ODM1-3-0.xsd"); ArrayList<String> xmlnsList = new ArrayList<String>(); xmlnsList.add("xmlns=\"http://www.cdisc.org/ns/odm/v1.3\""); odmb.setXmlnsList(xmlnsList); odmb.setODMVersion("1.3"); mdc.setODMBean(odmb); adc.setOdmbean(odmb); cdc.setODMBean(odmb); } else if ("oc1.2".equals(odmVersion)) { ODMBean odmb = new ODMBean(); // odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.2 OpenClinica-ODM1-2-1.xsd"); odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.2 OpenClinica-ODM1-2-1-OC1.xsd"); ArrayList<String> xmlnsList = new ArrayList<String>(); xmlnsList.add("xmlns=\"http://www.cdisc.org/ns/odm/v1.2\""); xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/openclinica_odm/v1.2\""); odmb.setXmlnsList(xmlnsList); odmb.setODMVersion("oc1.2"); mdc.setODMBean(odmb); adc.setOdmbean(odmb); cdc.setODMBean(odmb); } else if ("oc1.3".equals(odmVersion)) { ODMBean odmb = mdc.getODMBean(); // odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 OpenClinica-ODM1-3-0.xsd"); odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 OpenClinica-ODM1-3-0-OC1.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\""); odmb.setXmlnsList(xmlnsList); odmb.setODMVersion("oc1.3"); mdc.setODMBean(odmb); adc.setOdmbean(odmb); cdc.setODMBean(odmb); } } ////////////////////////////////////////// ////////// MetaData Extraction ////////// mdc.collectFileData(); MetaDataReportBean metaReport = new MetaDataReportBean(mdc.getOdmStudyMap()); metaReport.setODMVersion(odmVersion); metaReport.setOdmBean(mdc.getODMBean()); metaReport.createChunkedOdmXml(Boolean.TRUE); long sysTimeEnd = System.currentTimeMillis() - sysTimeBegin; String ODMXMLFileName = mdc.getODMBean().getFileOID() + ".xml"; int fId = this.createFileK( ODMXMLFileName, generalFileDir, metaReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); if (!"".equals(generalFileDirCopy)) { int fId2 = this.createFileK( ODMXMLFileName, generalFileDirCopy, metaReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); } ////////////////////////////////////////// ////////// AdminData Extraction ////////// adc.collectFileData(); AdminDataReportBean adminReport = new AdminDataReportBean(adc.getOdmAdminDataMap()); adminReport.setODMVersion(odmVersion); adminReport.setOdmBean(mdc.getODMBean()); adminReport.createChunkedOdmXml(Boolean.TRUE); sysTimeEnd = System.currentTimeMillis() - sysTimeBegin; fId = this.createFileK( ODMXMLFileName, generalFileDir, adminReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); if (!"".equals(generalFileDirCopy)) { int fId2 = this.createFileK( ODMXMLFileName, generalFileDirCopy, adminReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); } ////////////////////////////////////////// ////////// ClinicalData Extraction /////// DatasetDAO dsdao = new DatasetDAO(ds); String sql = eb.getDataset().getSQLStatement(); String st_sed_in = dsdao.parseSQLDataset(sql, true, true); String st_itemid_in = dsdao.parseSQLDataset(sql, false, true); int datasetItemStatusId = eb.getDataset().getDatasetItemStatus().getId(); String ecStatusConstraint = dsdao.getECStatusConstraint(datasetItemStatusId); String itStatusConstraint = dsdao.getItemDataStatusConstraint(datasetItemStatusId); Iterator<OdmStudyBase> it = cdc.getStudyBaseMap().values().iterator(); while (it.hasNext()) { OdmStudyBase u = it.next(); ArrayList newRows = dsdao.selectStudySubjects( u.getStudy().getId(), 0, st_sed_in, st_itemid_in, dsdao.genDatabaseDateConstraint(eb), ecStatusConstraint, itStatusConstraint); /////////////// int fromIndex = 0; boolean firstIteration = true; while (fromIndex < newRows.size()) { int toIndex = fromIndex + ssNumber < newRows.size() ? fromIndex + ssNumber : newRows.size() - 1; List x = newRows.subList(fromIndex, toIndex + 1); fromIndex = toIndex + 1; String studySubjectIds = ""; for (int i = 0; i < x.size(); i++) { StudySubjectBean sub = new StudySubjectBean(); sub = (StudySubjectBean) x.get(i); studySubjectIds += "," + sub.getId(); } // for studySubjectIds = studySubjectIds.replaceFirst(",", ""); ClinicalDataUnit cdata = new ClinicalDataUnit( ds, datasetBean, cdc.getOdmbean(), u.getStudy(), cdc.getCategory(), studySubjectIds); cdata.setCategory(cdc.getCategory()); cdata.collectOdmClinicalData(); FullReportBean report = new FullReportBean(); report.setClinicalData(cdata.getOdmClinicalData()); report.setOdmStudyMap(mdc.getOdmStudyMap()); report.setODMVersion(odmVersion); // report.setOdmStudy(mdc.getOdmStudy()); report.setOdmBean(mdc.getODMBean()); if (firstIteration && fromIndex >= newRows.size()) { report.createChunkedOdmXml(Boolean.TRUE, true, true); firstIteration = false; } else if (firstIteration) { report.createChunkedOdmXml(Boolean.TRUE, true, false); firstIteration = false; } else if (fromIndex >= newRows.size()) { report.createChunkedOdmXml(Boolean.TRUE, false, true); } else { report.createChunkedOdmXml(Boolean.TRUE, false, false); } fId = this.createFileK( ODMXMLFileName, generalFileDir, report.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); if (!"".equals(generalFileDirCopy)) { int fId2 = this.createFileK( ODMXMLFileName, generalFileDirCopy, report.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); } } } sysTimeEnd = System.currentTimeMillis() - sysTimeBegin; fId = this.createFileK( ODMXMLFileName, generalFileDir, "</ODM>", datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, true); if (!"".equals(generalFileDirCopy)) { int fId2 = this.createFileK( ODMXMLFileName, generalFileDirCopy, "</ODM>", datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); } ////////////////////////////////////////// ////////// pre pagination extraction ///// /* mdc.collectFileData(); adc.collectOdmAdminDataMap(); cdc.collectOdmClinicalDataMap(); FullReportBean report = new FullReportBean(); report.setClinicalDataMap(cdc.getOdmClinicalDataMap()); report.setAdminDataMap(adc.getOdmAdminDataMap()); report.setOdmStudyMap(mdc.getOdmStudyMap()); report.setOdmBean(mdc.getODMBean()); report.setODMVersion(odmVersion); report.createOdmXml(Boolean.TRUE); long sysTimeEnd = System.currentTimeMillis() - sysTimeBegin; String ODMXMLFileName = mdc.getODMBean().getFileOID() + ".xml"; int fId = this.createFile(ODMXMLFileName, generalFileDir, report.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, true); if (!"".equals(generalFileDirCopy)) { int fId2 = this.createFile(ODMXMLFileName, generalFileDirCopy, report.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false); } */ // return ODMXMLFileName; HashMap answerMap = new HashMap<String, Integer>(); answerMap.put(ODMXMLFileName, new Integer(fId)); return answerMap; }