package com.vst.dao.hibernate;
import java.util.ArrayList;
import java.util.List;
import com.vst.dao.DefectCategoryDao;
import com.vst.dao.util.RefferenceUtil;
import com.vst.model.ConstructionDefect;
import com.vst.model.DefectCategory;
import com.vst.model.DefectParameter;
import com.vst.model.DefectRecomendation;
public class DefectCategoryDaoHibernate extends BaseDaoHibernate<DefectCategory> implements DefectCategoryDao {
public boolean isUniqueDefectCategory(DefectCategory defectCategory){
int count = super.getSession().createQuery("from DefectCategory defectCategory where defectCategory.defectCategoryName.defectCategoryNameId=? AND defectCategory.constructionType.constructionTypeId=? AND defectCategory.defectZone.defectZoneId=? AND defectCategory.defectType.defectTypeId=? AND defectCategory.defectVarity.varityId=? AND defectCategory.defectCategoryId<>? ").setString(0, defectCategory.getDefectCategoryName().getDefectCategoryNameId().toString()).setString(1, defectCategory.getConstructionType().getConstructionTypeId().toString()).setString(2,defectCategory.getDefectZone().getDefectZoneId().toString()).setString(3,defectCategory.getDefectType().getDefectTypeId().toString()).setString(4,defectCategory.getDefectVarity().getVarityId().toString()).setString(5,String.valueOf(defectCategory.getDefectCategoryId())).list().size();
return count == 0;
}
public List getDefectCategorysByConstructionTypeIdDefectZoneId(String constructionTypeId,String defectZoneId){
return getSession().createQuery("from DefectCategory defectCategory where defectCategory.defectZone.defectZoneId=? AND defectCategory.constructionType.constructionTypeId=?").setString(0,defectZoneId).setString(1,constructionTypeId).list();
}
public Integer getDangerCategoryByParameters(Integer constructionTypeId,Integer defectZoneId,Integer defectTypeId,Integer defectVarityId, List parameterList){
String queryParameter="";
String queryCondition="";
for (int i = 0; i < parameterList.size(); i++) {
DefectParameter defectParameter = (DefectParameter) parameterList.get(i);
queryParameter+="left join fetch defectCategory.categoryParameters as categoryParameters"+i+" ";
if(i==0){
queryCondition+=" AND ";
if(parameterList.size()!=1){
queryCondition+="(";
}
}
else{
queryCondition+=" OR ";
}
queryCondition+=" (categoryParameters"+i+".parameter.parameterId="+defectParameter.getParameter().getParameterId()+" AND categoryParameters"+i+".parameterValue>="+defectParameter.getParameterValue()+" AND categoryParameters"+i+".parameterBeginValue<="+defectParameter.getParameterValue()+" AND (NOT categoryParameters"+i+".parameterValue=1000000 )) ";
if(i==parameterList.size()-1 && parameterList.size()!=1){
queryCondition+=")";
}
}
List defectCategoryList=super.getSession().createQuery("from DefectCategory defectCategory "+queryParameter+" where defectCategory.constructionType.constructionTypeId=? AND defectCategory.defectZone.defectZoneId=? AND defectCategory.defectType.defectTypeId=? AND defectCategory.defectVarity.varityId=?"+queryCondition+" order by defectCategory.defectCategoryName.defectPriority asc").setInteger(0,constructionTypeId.intValue()).setInteger(1,defectZoneId.intValue()).setInteger(2,defectTypeId.intValue()).setInteger(3,defectVarityId.intValue()).list();
DefectCategory defectCategory=null;
if(defectCategoryList.size()==0){
return new Integer(-1);
}
else{
defectCategory=(DefectCategory)defectCategoryList.get(defectCategoryList.size()-1);
return (Integer)super.getSession().createQuery("select dangerCategory.dangerCategoryId from DangerCategory dangerCategory where dangerCategory.categoryName=?)").setString(0,defectCategory.getDefectCategoryName().getDefectCategoryName()).uniqueResult();
}
}
public List getDefectCategoryByParameters(DefectRecomendation defectRecomendation) {
String hqlQuery = "from DefectCategory defectCategory ";
boolean isFirst = true;
if (!defectRecomendation.getFormDefectType().getDefectTypeId().equals(new Integer(-1))) {
if (!isFirst) {
hqlQuery += " AND ";
}
if (isFirst) {
isFirst = false;
hqlQuery += " where ";
}
hqlQuery += " defectCategory.defectType.defectTypeId=" + defectRecomendation.getFormDefectType().getDefectTypeId() + " ";
}
if (!defectRecomendation.getFormDefectVarity().getVarityId().equals(new Integer(-1))) {
if (!isFirst) {
hqlQuery += " AND ";
}
if (isFirst) {
isFirst = false;
hqlQuery += " where ";
}
hqlQuery += " defectCategory.defectVarity.varityId=" + defectRecomendation.getFormDefectVarity().getVarityId() + " ";
}
if (!defectRecomendation.getFormConstructionType().getConstructionTypeId().equals(new Integer(-1))) {
if (!isFirst) {
hqlQuery += " AND ";
}
if (isFirst) {
isFirst = false;
hqlQuery += " where ";
}
hqlQuery += " defectCategory.constructionType.constructionTypeId=" + defectRecomendation.getFormConstructionType().getConstructionTypeId() + " ";
}
if (!defectRecomendation.getFormDefectZone().getDefectZoneId().equals(new Integer(-1))) {
if (!isFirst) {
hqlQuery += " AND ";
}
if (isFirst) {
isFirst = false;
hqlQuery += " where ";
}
hqlQuery += " defectCategory.defectZone.defectZoneId=" + defectRecomendation.getFormDefectZone().getDefectZoneId() + " ";
}
//System.out.println("hqlQuery==="+hqlQuery);
return getHibernateTemplate().find(hqlQuery);
}
public List getCategoriesByVarityIdConstructionTypeId(String varityId, String constructionTypeId) {
return super.getSession().createQuery("from DefectCategory defectCategory where defectCategory.defectVarity.varityId=? AND defectCategory.constructionType.constructionTypeId=?").setString(0, varityId).setString(1, constructionTypeId).list();
}
public List getCategoriesByVarityId(String varityId) {
return super.getSession().createQuery("from DefectCategory defectCategory where defectCategory.defectVarity.varityId=?").setString(0, varityId).list();
}
public DefectCategory getDefectCategoryByConstructionDefect(String constructionDefectId,String constructionTypeId) {
ConstructionDefect constructionDefect = (ConstructionDefect) super.getSession().createQuery("from ConstructionDefect constructionDefect where constructionDefect.constructionDefectId=?").setString(0, constructionDefectId).uniqueResult();
String defectZoneId=constructionDefect.getDefectZone().getDefectZoneId().toString();
String defectTypeId=constructionDefect.getDefectType().getDefectTypeId().toString();
String defectVarityId=constructionDefect.getDefectVarity().getVarityId().toString();
String hqlQuery = "from DefectCategory defectCategory ";
List parameterList = constructionDefect.getDefectParameters();
boolean hasParameters = parameterList.size() > 0;
String queryParameter="";
String queryCondition="";
for (int i = 0; i < parameterList.size(); i++) {
DefectParameter defectParameter = (DefectParameter) parameterList.get(i);
queryParameter+="left join fetch defectCategory.categoryParameters as categoryParameters"+i+" ";
if(i==0){
queryCondition+=" AND ";
if(parameterList.size()!=1){
queryCondition+="(";
}
}
else{
queryCondition+=" OR ";
}
queryCondition+=" (categoryParameters"+i+".parameter.parameterId="+defectParameter.getParameter().getParameterId()+" AND categoryParameters"+i+".parameterValue>="+defectParameter.getParameterValue()+" AND categoryParameters"+i+".parameterBeginValue<="+defectParameter.getParameterValue()+" AND (NOT categoryParameters"+i+".parameterValue=1000000 )) ";
if(i==parameterList.size()-1 && parameterList.size()!=1){
queryCondition+=")";
}
}
List defectCategoryList=super.getSession().createQuery("from DefectCategory defectCategory "+queryParameter+" where defectCategory.constructionType.constructionTypeId=? AND defectCategory.defectZone.defectZoneId=? AND defectCategory.defectType.defectTypeId=? AND defectCategory.defectVarity.varityId=?"+queryCondition+" order by defectCategory.defectCategoryName.defectPriority asc").setString(0,constructionTypeId).setString(1,defectZoneId).setString(2,defectTypeId).setString(3,defectVarityId).list();
if(defectCategoryList.size()==0){
return null;
}
else{
return (DefectCategory)defectCategoryList.get(defectCategoryList.size()-1);
}
}
public List getConnectedRefferences(final String defectCategoryId){
List defectRecomendationList= super.getSession().createQuery("from DefectRecomendation defectRecomendation where defectRecomendation.defectCategory.defectCategoryId=?").setString(0, defectCategoryId).list();
List referenceList=new ArrayList();
RefferenceUtil.makeURL(referenceList,"defectRecomendation",defectRecomendationList);
return referenceList;
}
public boolean isDefectCategoryUsed(String defectCategoryId) {
Long count = (Long) super.getSession().createQuery("select count(*) from DefectRecomendation defectRecomendation where defectRecomendation.defectCategory.defectCategoryId=?").setString(0, defectCategoryId).uniqueResult();
if (count == null || count.intValue() == 0) {
return false;
}
return true;
}
/**
* @see com.vst.dao.DefectCategoryDao#getDefectCategorys(com.vst.model.DefectCategory)
*/
public List getDefectCategorys(final DefectCategory defectCategory) {
return getHibernateTemplate().find("from DefectCategory order by constructionType,defectZone,defectType,defectVarity,defectCategoryName");
/* Remove the line above and uncomment this code block if you want
to use Hibernate's Query by Example API.
if (defectCategory == null) {
return getHibernateTemplate().find("from DefectCategory");
} else {
// filter on properties set in the defectCategory
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Example ex = Example.create(defectCategory).ignoreCase().enableLike(MatchMode.ANYWHERE);
return session.createCriteria(DefectCategory.class).add(ex).list();
}
};
return (List) getHibernateTemplate().execute(callback);
}*/
}
/**
* @see com.vst.dao.DefectCategoryDao#getDefectCategory(Integer defectCategoryId)
*/
public DefectCategory getDefectCategory(final Integer defectCategoryId) {
DefectCategory defectCategory = (DefectCategory) getObject(defectCategoryId);
return defectCategory;
}
/**
* @see com.vst.dao.DefectCategoryDao#saveDefectCategory(DefectCategory defectCategory)
*/
public void saveDefectCategory(final DefectCategory defectCategory) {
saveObject(defectCategory);
}
/**
* @see com.vst.dao.DefectCategoryDao#removeDefectCategory(Integer defectCategoryId)
*/
public void removeDefectCategory(final Integer defectCategoryId) {
removeObject(defectCategoryId);
}
@Override
Class<DefectCategory> getServiceClass() {
return DefectCategory.class;
}
}