package org.akaza.openclinica.dao.hibernate; import java.util.ArrayList; import org.akaza.openclinica.bean.oid.ItemGroupOidGenerator; import org.akaza.openclinica.bean.oid.OidGenerator; import org.akaza.openclinica.domain.datamap.CrfBean; import org.akaza.openclinica.domain.datamap.ItemGroup; public class ItemGroupDao extends AbstractDomainDao<ItemGroup> { @Override Class<ItemGroup> domainClass() { return ItemGroup.class; } public ItemGroup findByOcOID(String OCOID) { getSessionFactory().getStatistics().logSummary(); String query = "from " + getDomainClassName() + " do where do.ocOid = :OCOID"; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setString("OCOID", OCOID); return (ItemGroup) q.uniqueResult(); } public ItemGroup findByNameCrfId(String groupName, CrfBean crf) { getSessionFactory().getStatistics().logSummary(); String query = "from " + getDomainClassName() + " do where do.name = :groupName and do.crf = :crf"; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setString("groupName", groupName); q.setEntity("crf", crf); return (ItemGroup) q.uniqueResult(); } @SuppressWarnings("unchecked") public ArrayList<ItemGroup> findByCrfVersionId(Integer crfVersionId) { String query = "select distinct ig.* from item_group ig, item_group_metadata igm where igm.crf_version_id = " + crfVersionId + " and ig.item_group_id = igm.item_group_id"; org.hibernate.Query q = getCurrentSession().createSQLQuery(query).addEntity(ItemGroup.class); return (ArrayList<ItemGroup>) q.list(); } public String getValidOid(ItemGroup itemGroup, String crfName, String itemGroupLabel, ArrayList<String> oidList) { OidGenerator oidGenerator = new ItemGroupOidGenerator(); String oid = getOid(itemGroup, crfName, itemGroupLabel); String oidPreRandomization = oid; while (findByOcOID(oid) != null || oidList.contains(oid)) { oid = oidGenerator.randomizeOid(oidPreRandomization); } return oid; } private String getOid(ItemGroup itemGroup, String crfName, String itemGroupLabel) { OidGenerator oidGenerator = new ItemGroupOidGenerator(); String oid; try { oid = itemGroup.getOcOid() != null ? itemGroup.getOcOid() : oidGenerator.generateOid(crfName, itemGroupLabel); return oid; } catch (Exception e) { throw new RuntimeException("CANNOT GENERATE OID"); } } }