package org.akaza.openclinica.dao.hibernate;
import org.akaza.openclinica.bean.oid.CrfOidGenerator;
import org.akaza.openclinica.bean.oid.OidGenerator;
import org.akaza.openclinica.domain.datamap.CrfBean;
public class CrfDao extends AbstractDomainDao<CrfBean> {
@Override
Class<CrfBean> domainClass() {
// TODO Auto-generated method stub
return CrfBean.class;
}
public CrfBean findByName(String crfName) {
String query = "from " + getDomainClassName() + " crf where crf.name = :crfName ";
org.hibernate.Query q = getCurrentSession().createQuery(query);
q.setString("crfName", crfName);
return (CrfBean) q.uniqueResult();
}
public CrfBean 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 (CrfBean) q.uniqueResult();
}
public CrfBean findByCrfId(Integer crfId) {
String query = "from " + getDomainClassName() + " crf where crf.crfId = :crfId ";
org.hibernate.Query q = getCurrentSession().createQuery(query);
q.setInteger("crfId", crfId);
return (CrfBean) q.uniqueResult();
}
private String getOid(CrfBean crf, String crfName) {
OidGenerator oidGenerator = new CrfOidGenerator();
String oid;
try {
oid = crf.getOcOid() != null ? crf.getOcOid() : oidGenerator.generateOid(crfName);
return oid;
} catch (Exception e) {
throw new RuntimeException("CANNOT GENERATE OID");
}
}
public String getValidOid(CrfBean crfBean, String crfName) {
OidGenerator oidGenerator = new CrfOidGenerator();
String oid = getOid(crfBean, crfName);
String oidPreRandomization = oid;
while (findByOcOID(oid) != null) {
oid = oidGenerator.randomizeOid(oidPreRandomization);
}
return oid;
}
}