Search in sources :

Example 1 with ClinicalDataUnit

use of org.akaza.openclinica.logic.odmExport.ClinicalDataUnit in project OpenClinica by OpenClinica.

the class OdmFileCreation method createODMFile.

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, boolean zipped, boolean saveToDB, boolean deleteOld, String odmType, UserAccountBean userBean) {
    Integer ssNumber = getStudySubjectNumber(studySubjectNumber);
    MetaDataCollector mdc = new MetaDataCollector(dataSource, datasetBean, currentStudy, ruleSetRuleDao);
    AdminDataCollector adc = new AdminDataCollector(dataSource, datasetBean, currentStudy);
    ClinicalDataCollector cdc = new ClinicalDataCollector(dataSource, datasetBean, currentStudy);
    MetaDataCollector.setTextLength(200);
    if (deleteOld) {
        File file = new File(generalFileDir);
        if (file.isDirectory()) {
            files = file.listFiles();
            oldFiles = Arrays.asList(files);
        }
    }
    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\"");
            xmlnsList.add("xmlns:OpenClinica=\"http://www.openclinica.org/ns/odm_ext_v121/v3.1\"");
            xmlnsList.add("xmlns:OpenClinicaRules=\"http://www.openclinica.org/ns/rules/v3.1\"");
            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");
            odmb.setSchemaLocation("http://www.cdisc.org/ns/odm/v1.3 OpenClinica-ODM1-3-0-OC3-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");
            odmb.setOdmType(odmType);
            mdc.setODMBean(odmb);
            adc.setOdmbean(odmb);
            cdc.setODMBean(odmb);
        }
    }
    //////////////////////////////////////////
    ////////// MetaData Extraction //////////
    mdc.collectFileData();
    MetaDataReportBean metaReport = new MetaDataReportBean(mdc.getOdmStudyMap(), coreResources);
    metaReport.setODMVersion(odmVersion);
    metaReport.setOdmBean(mdc.getODMBean());
    metaReport.createChunkedOdmXml(Boolean.TRUE);
    long sysTimeEnd = System.currentTimeMillis() - sysTimeBegin;
    String ODMXMLFileName = mdc.getODMBean().getFileOID() + ".xml";
    int fId = createFileK(ODMXMLFileName, generalFileDir, metaReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
    if (!"".equals(generalFileDirCopy)) {
        int fId2 = createFileK(ODMXMLFileName, generalFileDirCopy, metaReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
    }
    //////////////////////////////////////////
    ////////// 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 = createFileK(ODMXMLFileName, generalFileDir, adminReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
    if (!"".equals(generalFileDirCopy)) {
        int fId2 = createFileK(ODMXMLFileName, generalFileDirCopy, adminReport.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
    }
    //////////////////////////////////////////
    ////////// ClinicalData Extraction ///////
    DatasetDAO dsdao = new DatasetDAO(dataSource);
    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()) {
        JobTerminationMonitor.check();
        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()) {
            JobTerminationMonitor.check();
            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(dataSource, 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 = createFileK(ODMXMLFileName, generalFileDir, report.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
            if (!"".equals(generalFileDirCopy)) {
                int fId2 = createFileK(ODMXMLFileName, generalFileDirCopy, report.getXmlOutput().toString(), datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
            }
        }
    }
    sysTimeEnd = System.currentTimeMillis() - sysTimeBegin;
    fId = createFileK(ODMXMLFileName, generalFileDir, "</ODM>", datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, saveToDB, zipped, deleteOld, userBean);
    if (!"".equals(generalFileDirCopy)) {
        int fId2 = createFileK(ODMXMLFileName, generalFileDirCopy, "</ODM>", datasetBean, sysTimeEnd, ExportFormatBean.XMLFILE, false, zipped, deleteOld, userBean);
    }
    //////////////////////////////////////////
    ////////// 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);
         * }
         */
    HashMap answerMap = new HashMap<String, Integer>();
    // JN: Zipped in the next stage as thats where the ODM file is named and copied over in default categories.
    // if(zipped)
    // { try {
    // zipFile(ODMXMLFileName,generalFileDir);
    //
    // } catch (IOException e) {
    // // TODO Auto-generated catch block
    // logger.error(e.getMessage());
    // e.printStackTrace();
    // }
    //
    // } // return ODMXMLFileName;
    answerMap.put(ODMXMLFileName, new Integer(fId));
    return answerMap;
}
Also used : ClinicalDataCollector(org.akaza.openclinica.logic.odmExport.ClinicalDataCollector) ClinicalDataUnit(org.akaza.openclinica.logic.odmExport.ClinicalDataUnit) HashMap(java.util.HashMap) AdminDataCollector(org.akaza.openclinica.logic.odmExport.AdminDataCollector) ArrayList(java.util.ArrayList) OdmStudyBase(org.akaza.openclinica.logic.odmExport.OdmStudyBase) MetaDataReportBean(org.akaza.openclinica.bean.extract.odm.MetaDataReportBean) DatasetDAO(org.akaza.openclinica.dao.extract.DatasetDAO) FullReportBean(org.akaza.openclinica.bean.extract.odm.FullReportBean) AdminDataReportBean(org.akaza.openclinica.bean.extract.odm.AdminDataReportBean) StudySubjectBean(org.akaza.openclinica.bean.managestudy.StudySubjectBean) ODMBean(org.akaza.openclinica.bean.odmbeans.ODMBean) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) MetaDataCollector(org.akaza.openclinica.logic.odmExport.MetaDataCollector) File(java.io.File)

Aggregations

File (java.io.File)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 AdminDataReportBean (org.akaza.openclinica.bean.extract.odm.AdminDataReportBean)1 FullReportBean (org.akaza.openclinica.bean.extract.odm.FullReportBean)1 MetaDataReportBean (org.akaza.openclinica.bean.extract.odm.MetaDataReportBean)1 StudySubjectBean (org.akaza.openclinica.bean.managestudy.StudySubjectBean)1 ODMBean (org.akaza.openclinica.bean.odmbeans.ODMBean)1 DatasetDAO (org.akaza.openclinica.dao.extract.DatasetDAO)1 AdminDataCollector (org.akaza.openclinica.logic.odmExport.AdminDataCollector)1 ClinicalDataCollector (org.akaza.openclinica.logic.odmExport.ClinicalDataCollector)1 ClinicalDataUnit (org.akaza.openclinica.logic.odmExport.ClinicalDataUnit)1 MetaDataCollector (org.akaza.openclinica.logic.odmExport.MetaDataCollector)1 OdmStudyBase (org.akaza.openclinica.logic.odmExport.OdmStudyBase)1