package org.akaza.openclinica.dao.hibernate; import java.util.ArrayList; import org.akaza.openclinica.bean.oid.ItemOidGenerator; import org.akaza.openclinica.bean.oid.OidGenerator; import org.akaza.openclinica.domain.datamap.Item; public class ItemDao extends AbstractDomainDao<Item> { @Override Class<Item> domainClass() { // TODO Auto-generated method stub return Item.class; } public Item findByOcOID(String OCOID) { String query = "from " + getDomainClassName() + " item where item.ocOid = :ocoid "; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setString("ocoid", OCOID); return (Item) q.uniqueResult(); } public Item findByNameCrfId(String name, Integer crfId) { String query = "select distinct i.* from item i, item_form_metadata ifm,crf_version cv " + "where i.name= '" + name + "' and i.item_id= ifm.item_id " + "and ifm.crf_version_id=cv.crf_version_id " + "and cv.crf_id=" + crfId; org.hibernate.Query q = getCurrentSession().createSQLQuery(query).addEntity(Item.class); return ((Item) q.uniqueResult()); } public int getItemDataTypeId(Item item) { String query = "select item_data_type_id from item where item_id = " + item.getItemId(); org.hibernate.Query q = getCurrentSession().createSQLQuery(query); return ((Number) q.uniqueResult()).intValue(); } @SuppressWarnings("unchecked") public ArrayList<Item> findByItemGroupCrfVersionOrdered(Integer itemGroupId, Integer crfVersionId) { String query = "select distinct i.* from item i, item_group fg, item_group_metadata fgim " + " where fg.item_group_id= " + String.valueOf(itemGroupId) + " and fg.item_group_id=fgim.item_group_id and fgim.crf_version_id= " + String.valueOf(crfVersionId) + " and fgim.item_id=i.item_id order by i.item_id"; org.hibernate.Query q = getCurrentSession().createSQLQuery(query).addEntity(Item.class); return (ArrayList<Item>) q.list(); } public String getValidOid(Item item, String crfName, String itemLabel, ArrayList<String> oidList) { OidGenerator oidGenerator = new ItemOidGenerator(); String oid = getOid(item, crfName, itemLabel); String oidPreRandomization = oid; while (findByOcOID(oid) != null || oidList.contains(oid)) { oid = oidGenerator.randomizeOid(oidPreRandomization); } return oid; } private String getOid(Item item, String crfName, String itemLabel) { OidGenerator oidGenerator = new ItemOidGenerator(); String oid; try { oid = item.getOcOid() != null ? item.getOcOid() : oidGenerator.generateOid(crfName, itemLabel); return oid; } catch (Exception e) { throw new RuntimeException("CANNOT GENERATE OID"); } } }