/* * 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.dao.submit; import org.akaza.openclinica.bean.core.EntityBean; import org.akaza.openclinica.bean.submit.EventCRFBean; import org.akaza.openclinica.bean.submit.SectionBean; import org.akaza.openclinica.dao.core.AuditableEntityDAO; import org.akaza.openclinica.dao.core.DAODigester; import org.akaza.openclinica.dao.core.SQLFactory; import org.akaza.openclinica.dao.core.TypeNames; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import javax.sql.DataSource; /** * <P> * SectionDAO.java, the data access object for creation and access to the * sections of a CRF. CRFs will have more than one version, which in turn will * have one or more sections, which will have one or more items with metadata * for presentation. * * @author thickerson * * */ public class SectionDAO extends AuditableEntityDAO { // private DAODigester digester; @Override protected void setDigesterName() { digesterName = SQLFactory.getInstance().DAO_SECTION; } public SectionDAO(DataSource ds) { super(ds); } public SectionDAO(DataSource ds, DAODigester digester) { super(ds); this.digester = digester; } // This constructor sets up the Locale for JUnit tests; see the locale // member variable in EntityDAO, and its initializeI18nStrings() method public SectionDAO(DataSource ds, DAODigester digester, Locale locale) { this(ds, digester); this.locale = locale; } @Override public void setTypesExpected() { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); this.setTypeExpected(2, TypeNames.INT);// crf version id this.setTypeExpected(3, TypeNames.INT); this.setTypeExpected(4, TypeNames.STRING);// label this.setTypeExpected(5, TypeNames.STRING);// title this.setTypeExpected(6, TypeNames.STRING);// subtitle this.setTypeExpected(7, TypeNames.STRING);// instructions this.setTypeExpected(8, TypeNames.STRING);// page num label this.setTypeExpected(9, TypeNames.INT);// order by this.setTypeExpected(10, TypeNames.INT);// parent id this.setTypeExpected(11, TypeNames.DATE); this.setTypeExpected(12, TypeNames.DATE); this.setTypeExpected(13, TypeNames.INT);// owner id this.setTypeExpected(14, TypeNames.INT);// update id this.setTypeExpected(15, TypeNames.INT);// borders } public EntityBean update(EntityBean eb) { SectionBean sb = (SectionBean) eb; HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(sb.getCRFVersionId())); variables.put(new Integer(2), new Integer(sb.getStatus().getId())); variables.put(new Integer(3), sb.getLabel()); variables.put(new Integer(4), sb.getTitle()); variables.put(new Integer(5), sb.getInstructions()); variables.put(new Integer(6), sb.getSubtitle()); variables.put(new Integer(7), sb.getPageNumberLabel()); variables.put(new Integer(8), new Integer(sb.getOrdinal())); variables.put(new Integer(9), new Integer(sb.getUpdaterId())); variables.put(new Integer(10), new Integer(sb.getBorders())); variables.put(new Integer(11), new Integer(sb.getId())); this.execute(digester.getQuery("update"), variables); return eb; } public EntityBean create(EntityBean eb) { SectionBean sb = (SectionBean) eb; HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(sb.getCRFVersionId())); variables.put(new Integer(2), new Integer(sb.getStatus().getId())); variables.put(new Integer(3), sb.getLabel()); variables.put(new Integer(4), sb.getTitle()); variables.put(new Integer(5), sb.getInstructions()); variables.put(new Integer(6), sb.getSubtitle()); variables.put(new Integer(7), sb.getPageNumberLabel()); variables.put(new Integer(8), new Integer(sb.getOrdinal())); variables.put(new Integer(9), new Integer(sb.getParentId())); variables.put(new Integer(10), new Integer(sb.getOwnerId())); variables.put(new Integer(11), new Integer(sb.getBorders())); this.execute(digester.getQuery("create"), variables); return eb; } public Object getEntityFromHashMap(HashMap hm) { SectionBean eb = new SectionBean(); this.setEntityAuditInformation(eb, hm); eb.setId(((Integer) hm.get("section_id")).intValue()); eb.setCRFVersionId(((Integer) hm.get("crf_version_id")).intValue()); eb.setLabel((String) hm.get("label")); eb.setTitle((String) hm.get("title")); eb.setInstructions((String) hm.get("instructions")); eb.setSubtitle((String) hm.get("subtitle")); eb.setPageNumberLabel((String) hm.get("page_number_label")); eb.setOrdinal(((Integer) hm.get("ordinal")).intValue()); eb.setParentId(((Integer) hm.get("parent_id")).intValue()); eb.setBorders(((Integer) hm.get("borders")).intValue()); return eb; } public Collection findAll() { this.setTypesExpected(); ArrayList alist = this.select(digester.getQuery("findAll")); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { SectionBean eb = (SectionBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public Collection findAll(String strOrderByColumn, boolean blnAscendingSort, String strSearchPhrase) { ArrayList al = new ArrayList(); return al; } public Collection findByVersionId(int ID) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ID)); String sql = digester.getQuery("findByVersionId"); ArrayList alist = this.selectByCache(sql, variables); ArrayList al = new ArrayList(); Iterator it = alist.iterator(); while (it.hasNext()) { SectionBean eb = (SectionBean) this.getEntityFromHashMap((HashMap) it.next()); al.add(eb); } return al; } public EntityBean findByPK(int ID) { SectionBean eb = new SectionBean(); this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ID)); String sql = digester.getQuery("findByPK"); ArrayList alist = this.selectByCache(sql, variables); Iterator it = alist.iterator(); if (it.hasNext()) { eb = (SectionBean) this.getEntityFromHashMap((HashMap) it.next()); } return eb; } public Collection findAllByPermission(Object objCurrentUser, int intActionType, String strOrderByColumn, boolean blnAscendingSort, String strSearchPhrase) { ArrayList al = new ArrayList(); return al; } public Collection findAllByPermission(Object objCurrentUser, int intActionType) { ArrayList al = new ArrayList(); return al; } public ArrayList findAllByCRFVersionId(int crfVersionId) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(crfVersionId)); return this.executeFindAllQuery("findAllByCRFVersion", variables); } private HashMap getNumItemsBySectionIdFromRows(ArrayList rows) { HashMap answer = new HashMap(); Iterator it = rows.iterator(); while (it.hasNext()) { HashMap hm = (HashMap) it.next(); Integer sectionIdInt = (Integer) hm.get("section_id"); Integer numItemsInt = (Integer) hm.get("num_items"); if (numItemsInt != null && sectionIdInt != null) { answer.put(sectionIdInt, numItemsInt); } } return answer; } //JN : bySectionID indicates group by section id public HashMap getNumItemsBySectionId() { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count String sql = digester.getQuery("getNumItemsBySectionId"); ArrayList rows = this.select(sql); return getNumItemsBySectionIdFromRows(rows); } /** * Groups by sectionId and takes sectionID * @param sb * @return */ public HashMap getNumItemsBySection(SectionBean sb){ this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count String sql = digester.getQuery("getNumItemsBySection"); ArrayList rows = this.select(sql); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsPlusRepeatBySectionId(EventCRFBean ecb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); String sql = digester.getQuery("getNumItemsPlusRepeatBySectionId"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsCompletedBySectionId(EventCRFBean ecb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); String sql = digester.getQuery("getNumItemsCompletedBySectionId"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsCompletedBySection(EventCRFBean ecb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); String sql = digester.getQuery("getNumItemsCompletedBySection"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsPendingBySectionId(EventCRFBean ecb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); String sql = digester.getQuery("getNumItemsPendingBySectionId"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsPendingBySection(EventCRFBean ecb,SectionBean sb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); variables.put(new Integer(1), new Integer(sb.getId())); String sql = digester.getQuery("getNumItemsPendingBySection"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsBlankBySectionId(EventCRFBean ecb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); String sql = digester.getQuery("getNumItemsBlankBySectionId"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public HashMap getNumItemsBlankBySection(EventCRFBean ecb,SectionBean sb) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id this.setTypeExpected(2, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getId())); variables.put(new Integer(1), new Integer(sb.getId())); String sql = digester.getQuery("getNumItemsBlankBySectionId"); ArrayList rows = this.select(sql, variables); return getNumItemsBySectionIdFromRows(rows); } public SectionBean findNext(EventCRFBean ecb, SectionBean current) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getCRFVersionId())); variables.put(new Integer(2), new Integer(current.getOrdinal())); String sql = digester.getQuery("findNext"); ArrayList rows = this.select(sql, variables); SectionBean answer = new SectionBean(); if (rows.size() > 0) { HashMap row = (HashMap) rows.get(0); answer = (SectionBean) getEntityFromHashMap(row); } return answer; } public SectionBean findPrevious(EventCRFBean ecb, SectionBean current) { this.setTypesExpected(); HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(ecb.getCRFVersionId())); variables.put(new Integer(2), new Integer(current.getOrdinal())); String sql = digester.getQuery("findPrevious"); ArrayList rows = this.select(sql, variables); SectionBean answer = new SectionBean(); if (rows.size() > 0) { HashMap row = (HashMap) rows.get(0); answer = (SectionBean) getEntityFromHashMap(row); } return answer; } public void deleteTestSection(String label) { HashMap variables = new HashMap(); variables.put(new Integer(1), label); this.execute(digester.getQuery("deleteTestSection"), variables); } public boolean hasSCDItem(Integer sectionId) { return countSCDItemBySectionId(sectionId) > 0; } public int countSCDItemBySectionId(Integer sectionId) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // count HashMap variables = new HashMap(); variables.put(new Integer(1), sectionId); ArrayList rows = this.select(digester.getQuery("countSCDItemBySectionId"), variables); if(rows.size()>0) { return (Integer) ((HashMap) rows.iterator().next()).get("count"); } else { return 0; } } public boolean containNormalItem(Integer crfVersionId, Integer sectionId) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); //item_id HashMap variables = new HashMap(); variables.put(new Integer(1), sectionId); variables.put(new Integer(2), crfVersionId); variables.put(new Integer(3), crfVersionId); variables.put(new Integer(4), sectionId); variables.put(new Integer(5), crfVersionId); ArrayList rows = this.select(digester.getQuery("containNormalItem"), variables); if(rows.size()>0) { return (Integer) ((HashMap) rows.iterator().next()).get("item_id") > 0; } else { return false; } } public HashMap getSectionIdForTabId(int crfVersionId, int tabId) { this.unsetTypeExpected(); this.setTypeExpected(1, TypeNames.INT); // section_id HashMap variables = new HashMap(); variables.put(new Integer(1), new Integer(crfVersionId)); variables.put(new Integer(2), new Integer(tabId)); ArrayList rows = this.select(digester.getQuery("getSectionIdForTabId"), variables); return getSectionIdFromRows(rows); } private HashMap getSectionIdFromRows(ArrayList rows) { HashMap answer = new HashMap(); Iterator it = rows.iterator(); HashMap hm = new HashMap(); while (it.hasNext()) { hm = (HashMap) it.next(); } return hm; } }