/* * OpenClinica is distributed under the GNU Lesser General Public License (GNU * LGPL). * * For details see: http://www.openclinica.org/license copyright 2003-2005 Akaza * Research * */ package org.akaza.openclinica.logic.odmExport; import java.util.Iterator; import java.util.LinkedHashMap; import javax.sql.DataSource; import org.akaza.openclinica.bean.extract.DatasetBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.odmbeans.MetaDataVersionProtocolBean; import org.akaza.openclinica.bean.odmbeans.OdmStudyBean; import org.akaza.openclinica.dao.hibernate.RuleSetRuleDao; import org.akaza.openclinica.job.JobTerminationMonitor; /** * Populate metadata for a ODM XML file. It supports: * <ul> * <li>ODM XML file contains only one ODM Study element.<br> * In this case, Include element references only to external MetadataVersion. * </li> * <li>ODM XML file contains multiple Study elements - one parent study and its * site(s). <br> * In this case, Include element can reference to both internal and external * MetadataVersion. ODM fields in dataset table are for the study. For site(s), * siteOID will be appended automatically. </li> * </ul> * * @author ywang (May, 2009) */ public class MetaDataCollector extends OdmDataCollector { private LinkedHashMap<String, OdmStudyBean> odmStudyMap; private static int textLength = 4000; private RuleSetRuleDao ruleSetRuleDao; // protected final Logger logger = // LoggerFactory.getLogger(getClass().getName()); public MetaDataCollector(DataSource ds, StudyBean study,RuleSetRuleDao ruleSetRuleDao) { super(ds, study); this.ruleSetRuleDao = ruleSetRuleDao; odmStudyMap = new LinkedHashMap<String, OdmStudyBean>(); } public MetaDataCollector(DataSource ds, DatasetBean dataset, StudyBean currentStudy,RuleSetRuleDao ruleSetRuleDao) { super(ds, dataset, currentStudy); this.ruleSetRuleDao = ruleSetRuleDao; odmStudyMap = new LinkedHashMap<String, OdmStudyBean>(); } public MetaDataCollector(DataSource ds,RuleSetRuleDao ruleSetRuleDao) { this.ruleSetRuleDao = ruleSetRuleDao; } @Override public void collectFileData() { this.collectOdmRoot(); this.collectMetadataUnitMap(); } public void collectMetadataUnitMap() { Iterator<OdmStudyBase> it = this.getStudyBaseMap().values().iterator(); MetaDataVersionProtocolBean protocol = new MetaDataVersionProtocolBean(); while (it.hasNext()) { JobTerminationMonitor.check(); OdmStudyBase u = it.next(); StudyBean study = u.getStudy(); MetadataUnit meta = new MetadataUnit(this.ds, this.dataset, this.getOdmbean(), study, this.getCategory(),getRuleSetRuleDao()); meta.collectOdmStudy(null); if (this.getCategory() == 1) { if (study.isSite(study.getParentStudyId())) { meta.getOdmStudy().setParentStudyOID(meta.getParentOdmStudyOid()); MetaDataVersionProtocolBean p = meta.getOdmStudy().getMetaDataVersion().getProtocol(); if (p != null && p.getStudyEventRefs().size() > 0) { } else { logger.error("site " + study.getName() + " will be assigned protocol with StudyEventRefs size=" + protocol.getStudyEventRefs().size()); meta.getOdmStudy().getMetaDataVersion().setProtocol(protocol); } } else { protocol = meta.getOdmStudy().getMetaDataVersion().getProtocol(); } } odmStudyMap.put(u.getStudy().getOid(), meta.getOdmStudy()); } } public void collectMetadataUnitMap(String formVersionOID) { Iterator<OdmStudyBase> it = this.getStudyBaseMap().values().iterator(); MetaDataVersionProtocolBean protocol = new MetaDataVersionProtocolBean(); while (it.hasNext()) { JobTerminationMonitor.check(); OdmStudyBase u = it.next(); StudyBean study = u.getStudy(); MetadataUnit meta = new MetadataUnit(this.ds); meta.setStudyBase(u); meta.setOdmStudy(new OdmStudyBean()); meta.setParentStudy(new StudyBean()); meta.collectOdmStudy(formVersionOID); if (this.getCategory() == 1) { if (study.isSite(study.getParentStudyId())) { meta.getOdmStudy().setParentStudyOID(meta.getParentOdmStudyOid()); MetaDataVersionProtocolBean p = meta.getOdmStudy().getMetaDataVersion().getProtocol(); if (p != null && p.getStudyEventRefs().size() > 0) { } else { logger.error("site " + study.getName() + " will be assigned protocol with StudyEventRefs size=" + protocol.getStudyEventRefs().size()); meta.getOdmStudy().getMetaDataVersion().setProtocol(protocol); } } else { protocol = meta.getOdmStudy().getMetaDataVersion().getProtocol(); } } odmStudyMap.put(u.getStudy().getOid(), meta.getOdmStudy()); } } public LinkedHashMap<String, OdmStudyBean> getOdmStudyMap() { return odmStudyMap; } public void setOdmStudyMap(LinkedHashMap<String, OdmStudyBean> odmStudyMap) { this.odmStudyMap = odmStudyMap; } public static void setTextLength(int len) { textLength = len; } public static int getTextLength() { return textLength; } public RuleSetRuleDao getRuleSetRuleDao() { return ruleSetRuleDao; } public void setRuleSetRuleDao(RuleSetRuleDao ruleSetRuleDao) { this.ruleSetRuleDao = ruleSetRuleDao; } public void collectFileData(String formVersionOID) { this.collectOdmRoot(); this.collectMetadataUnitMap(formVersionOID); } }