package com.vst.dao.hibernate;
import java.util.ArrayList;
import java.util.List;
import com.vst.dao.ReasonDao;
import com.vst.dao.util.RefferenceUtil;
import com.vst.model.Reason;
public class ReasonDaoHibernate extends BaseDaoHibernate<Reason> implements ReasonDao {
public boolean isUniqueReason(Reason reason){
int count = super.getSession().createQuery("from Reason reason where reason.constructionType.constructionTypeId=? AND reason.defectZone.defectZoneId=? AND reason.defectType.defectTypeId=? AND reason.defectVarity.varityId=? AND reason.reasonName.reasonNameId=? AND reason.reasonId<>? ").setString(0, reason.getConstructionType().getConstructionTypeId().toString()).setString(1, reason.getDefectZone().getDefectZoneId().toString()).setString(2,reason.getDefectType().getDefectTypeId().toString()).setString(3,reason.getDefectVarity().getVarityId().toString()).setString(4,reason.getReasonName().getReasonNameId().toString()).setString(5,String.valueOf(reason.getReasonId())).list().size();
return count == 0;
}
public List getReasonsByDefectTypeVarityConstructionZone(String defectTypeId, String defectVarityId, String constructionTypeId, String defectZoneId) {
return getSession().createQuery("from Reason reason where reason.defectType.defectTypeId=? AND reason.defectVarity.varityId=? AND reason.constructionType.constructionTypeId=? AND reason.defectZone.defectZoneId=?").setString(0, defectTypeId).setString(1, defectVarityId).setString(2, constructionTypeId).setString(3, defectZoneId).list();
}
public boolean isReasonUsed(String reasonId) {
Long count = (Long) super.getSession().createQuery("select count(*) from DefectType defectType inner join defectType.reasons as reasons where reasons.reasonId=?").setString(0, reasonId).uniqueResult();
Long count1 = (Long) super.getSession().createQuery("select count(*) from ConstructionDefect constructionDefect where constructionDefect.reason.reasonId=?").setString(0, reasonId).uniqueResult();
if(count==null){
count = new Long(0);
}
if(count1==null){
count1 = new Long(0);
}
if (count.intValue()+count1.intValue() == 0) {
return false;
}
return true;
}
public List getConnectedRefferences(final String reasonId){
List defectTypeList = super.getSession().createQuery("from DefectType defectType inner join defectType.reasons as reasons where reasons.reasonId=?").setString(0, reasonId).list();
List constructionDefectList = super.getSession().createQuery("from ConstructionDefect constructionDefect where constructionDefect.reason.reasonId=?").setString(0, reasonId).list();
List refferenceList=new ArrayList();
RefferenceUtil.makeURL(refferenceList,"defectType",defectTypeList);
RefferenceUtil.makeURL(refferenceList,"constructionDefect",constructionDefectList);
return refferenceList;
}
public List getReasonsByConstructionVarityZone(String constructionTypeId, String varityId, String defectZoneId) {
return super.getSession().createQuery("from Reason reason where reason.defectVarity.varityId=? AND reason.constructionType.constructionTypeId=? AND reason.defectZone.defectZoneId=?").setString(0, varityId).setString(1, constructionTypeId).setString(2, defectZoneId).list();
}
public List getOtherReasonsForConstrcutionsInObject(String typeId, String buildingObjectId) {
return super.getSession().createQuery("select constructionDefect.otherReason from ConstructionDefect constructionDefect where (constructionDefect.reason is null) AND (constructionDefect.exampleId in (select exampleId from ConstructionExample constructionExample where constructionExample.buildObjectId=? AND constructionExample.constructionType.constructionTypeId=?)) group by constructionDefect.otherReason").setString(0, buildingObjectId).setString(1, typeId).list();
}
public List getReasonsForConstrcutionsInObject(String typeId, String buildingObjectId) {
return super.getSession().createQuery("select constructionDefect.reason from ConstructionDefect constructionDefect where (constructionDefect.reason is not null) AND (constructionDefect.exampleId in (select exampleId from ConstructionExample constructionExample where constructionExample.buildObjectId=? AND constructionExample.constructionType.constructionTypeId=?)) group by constructionDefect.reason").setString(0, buildingObjectId).setString(1, typeId).list();
}
public List getReasonsByType(final String defectTypeId, final String defectVarityId, final String defectZoneId, final String constructionTypeId) {
// DefectType defectType = (DefectType) super.getObject(DefectType.class, defectTypeId);
// return defectType.getReasons();
List rlist = new ArrayList();
rlist = super.getSession().createQuery("from Reason res where res.defectType.defectTypeId=? AND res.defectVarity.varityId=? AND res.defectZone.defectZoneId=? AND res.constructionType.constructionTypeId=?").setString(0, defectTypeId).setString(1, defectVarityId).setString(2, defectZoneId).setString(3, constructionTypeId).list();
System.out.println(rlist);
return rlist;
}
/**
* @see com.vst.dao.ReasonDao#getReasons(com.vst.model.Reason)
*/
public List getReasons(final Reason reason) {
return getHibernateTemplate().find("from Reason");
/* Remove the line above and uncomment this code block if you want
to use Hibernate's Query by Example API.
if (reason == null) {
return getHibernateTemplate().find("from Reason");
} else {
// filter on properties set in the reason
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Example ex = Example.create(reason).ignoreCase().enableLike(MatchMode.ANYWHERE);
return session.createCriteria(Reason.class).add(ex).list();
}
};
return (List) getHibernateTemplate().execute(callback);
}*/
}
/**
* @see com.vst.dao.ReasonDao#getReason(Integer reasonId)
*/
public Reason getReason(final Integer reasonId) {
Reason reason = (Reason) getObject(reasonId);
return reason;
}
/**
* @see com.vst.dao.ReasonDao#saveReason(Reason reason)
*/
public void saveReason(final Reason reason) {
saveObject(reason);
}
/**
* @see com.vst.dao.ReasonDao#removeReason(Integer reasonId)
*/
public void removeReason(final Integer reasonId) {
removeObject(reasonId);
}
@Override
Class<Reason> getServiceClass() {
return Reason.class;
}
}