package org.akaza.openclinica.dao.hibernate; import java.util.ArrayList; import java.util.List; import org.akaza.openclinica.bean.oid.OidGenerator; import org.akaza.openclinica.bean.oid.StudySubjectOidGenerator; import org.akaza.openclinica.domain.datamap.Study; import org.akaza.openclinica.domain.datamap.StudyEvent; import org.akaza.openclinica.domain.datamap.StudySubject; public class StudySubjectDao extends AbstractDomainDao<StudySubject> { @Override Class<StudySubject> domainClass() { // TODO Auto-generated method stub return StudySubject.class; } public StudySubject 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 (StudySubject) q.uniqueResult(); } public StudySubject findByLabelAndStudy(String embeddedStudySubjectId, Study study) { getSessionFactory().getStatistics().logSummary(); String query = "from " + getDomainClassName() + " do where do.study.studyId = :studyid and do.label = :label"; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setInteger("studyid", study.getStudyId()); q.setString("label", embeddedStudySubjectId); return (StudySubject) q.uniqueResult(); } public StudySubject findByLabelAndStudyOrParentStudy(String embeddedStudySubjectId, Study study) { getSessionFactory().getStatistics().logSummary(); String query = "from " + getDomainClassName() + " do where (do.study.studyId = :studyid or do.study.study.studyId = :studyid) and do.label = :label"; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setInteger("studyid", study.getStudyId()); q.setString("label", embeddedStudySubjectId); return (StudySubject) q.uniqueResult(); } public ArrayList<StudySubject> findByLabelAndParentStudy(String embeddedStudySubjectId, Study parentStudy) { getSessionFactory().getStatistics().logSummary(); String query = "from " + getDomainClassName() + " do where do.study.study.studyId = :studyid and do.label = :label"; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setInteger("studyid", parentStudy.getStudyId()); q.setString("label", embeddedStudySubjectId); return (ArrayList<StudySubject>) q.list(); } @SuppressWarnings({ "rawtypes", "unchecked" }) public ArrayList<StudyEvent> fetchListSEs(String id) { String query = " from StudyEvent se where se.studySubject.ocOid = :id order by se.studyEventDefinition.ordinal,se.sampleOrdinal"; org.hibernate.Query q = getCurrentSession().createQuery(query); q.setString("id", id.toString()); return (ArrayList<StudyEvent>) q.list(); } public String getValidOid(StudySubject studySubject, ArrayList<String> oidList) { OidGenerator oidGenerator = new StudySubjectOidGenerator(); String oid = getOid(studySubject); String oidPreRandomization = oid; while (findByOcOID(oid) != null || oidList.contains(oid)) { oid = oidGenerator.randomizeOid(oidPreRandomization); } return oid; } private String getOid(StudySubject studySubject) { OidGenerator oidGenerator = new StudySubjectOidGenerator(); String oid; try { oid = studySubject.getOcOid() != null ? studySubject.getOcOid() : oidGenerator.generateOid(studySubject.getLabel()); return oid; } catch (Exception e) { throw new RuntimeException("CANNOT GENERATE OID"); } } public int findTheGreatestLabel() { List<StudySubject> allStudySubjects = super.findAll(); int greatestLabel = 0; for (StudySubject subject:allStudySubjects) { int labelInt = 0; try { labelInt = Integer.parseInt(subject.getLabel()); } catch (NumberFormatException ne) { labelInt = 0; } if (labelInt > greatestLabel) { greatestLabel = labelInt; } } return greatestLabel; } }