Package com.vst.dao.hibernate

Source Code of com.vst.dao.hibernate.BuildingObjectDaoHibernate

package com.vst.dao.hibernate;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import com.vst.dao.BuildingObjectDao;
import com.vst.model.Answer;
import com.vst.model.BuildingObject;
import com.vst.model.ConstructionDefect;
import com.vst.model.ConstructionExample;
import com.vst.model.ConstructionType;
import com.vst.model.DangerCategory;
import com.vst.model.DefectType;
import com.vst.model.DefectVarity;
import com.vst.model.DefectZone;
import com.vst.model.DocumentType;
import com.vst.model.Material;
import com.vst.model.ObjectAnswer;
import com.vst.model.ObjectConstruction;
import com.vst.model.ObjectPhoto;
import com.vst.model.Question;
import com.vst.model.QuestionType;

public class BuildingObjectDaoHibernate extends BaseDaoHibernate<BuildingObject> implements BuildingObjectDao {

    public List getDocAnswers(String objectId) {
        return super.getSession().createQuery("from ObjectAnswer where buildingObjectId =? and question.forObjectStructure=0").setString(0, objectId).list();
    }


    public List getObjectAnswersAnswers(String objectId) {
        return super.getSession().createQuery("from ObjectAnswer where buildingObjectId =? and question.forObjectStructure=1").setString(0, objectId).list();

    }


    public List getBuildingObjectsForList() {
//        List buildingObjectList = getSession().createQuery("select new BuildingObject(objectId,technicalTask,wayToTechnicalTask,(select object(user) from User user where user.id=buildingObject.user.id),name,description,country,region,city,street,house,block,organizationName,organizationZip,organizationCountry,organizationRegion,organizationCity,organizationHouse,organizationStreet,organizationBlock,organizationFlat,headerFamily,headerMiddleName,headerName,organozationPhone,(select object(dangerCategory) from DangerCategory dangerCategory where dangerCategory.dangerCategoryId=buildingObject.dangerCategory.dangerCategoryId),(select object(objectType) from ObjectType objectType where objectType.objectTypeId=buildingObject.objectType.objectTypeId)) from BuildingObject buildingObject").list();
//        for (int i = 0; i < buildingObjectList.size(); i++) {
//            BuildingObject buildingObject = (BuildingObject) buildingObjectList.get(i);
//            List objectAnswers = getSession().createQuery("select new ObjectAnswer(objectAnswerId,objectConstructionId,answerContents,answerComment,buildingObjectId,question) from ObjectAnswer where objectId=?").setString(0, String.valueOf(buildingObject.getObjectId())).list();
//            //filling answer list
//            for (int j = 0; j < objectAnswers.size(); j++) {
//                ObjectAnswer objectAnswer = (ObjectAnswer) objectAnswers.get(j);
//                objectAnswer.setAnswers(super.getSession().createQuery("from Answer where answerId in (select answers.answerId from ObjectAnswer objectAnswer inner join objectAnswer.answers as answers where objectAnswer.objectAnswerId=?)").setString(0, objectAnswer.getObjectAnswerId().toString()).list());
//
//            }
//            buildingObject.setDocumentationQuestions(objectAnswers);
//
//        }
//        return buildingObjectList;

    return loadObjectsList(null);
    }



  private List<?> loadObjectsList(Integer buildingObjectId){

    List<?> qlist = getSession().createQuery(
        "select " +
        " q.questionId," +
        " q.questionPriority," +
        " q.contents," +
        " q.forObjectStructure," +
        " q.forAllConstructions," +
        " q.necessary," +
          " q.noVariants," +
          " q.fewAnswers," +
          " q.questionType," +
          " q.documentType" +
        " from Question as q left join q.documentType").list();
    Map<Integer, Question> qmap = new HashMap<Integer, Question>();
    for (Object o : qlist){
      Object[] cols = (Object[]) o;
      Question question = new Question();
      question.setQuestionId((Integer) cols[0]);
      question.setQuestionPriority((Integer) cols[1]);
      question.setContents((String) cols[2]);
      question.setForAllConstructions((Boolean) cols[3]);
      question.setForObjectStructure((Boolean) cols[4]);
      question.setNecessary((Boolean) cols[5]);
      question.setNoVariants((Boolean) cols[6]);
      question.setFewAnswers((Boolean) cols[7]);
      question.setQuestionType((QuestionType) cols[8]);
      if (cols[9] != null) {
        question.setDocumentType((DocumentType) cols[9]);
      } else {
        question.setDocumentType(new DocumentType());
      }
//      q.setAnswers(new ArrayList<Answer>());
      qmap.put(question.getQuestionId(), question);
    }

    Map<Integer, Answer> amap = new HashMap<Integer, Answer>();
    List<?> alist = getSession().createQuery(
        "select " +
        " answerId, "+
          " contents, "+
          " answerInterpritation, "+
          " letter," +
          " question.questionId" +
    " from Answer").list();

    for (Object o : alist){
      Object[] cols = (Object[]) o;
      Answer answer = new Answer();
      answer.setAnswerId((Integer) cols[0]);
      answer.setContents((String) cols[1]);
      answer.setAnswerInterpritation((String) cols[2]);
      answer.setLetter((String) cols[3]);
      Question question = qmap.get((Integer) cols[4]);
      if (question!=null) {
        question.getAnswers().add(answer);
        answer.setQuestion(question);
      }
      amap.put(answer.getAnswerId(), answer);
    }


    getSession().createQuery(
      "from DangerCategory").list();
    getSession().createQuery(
       "from ObjectType").list();
    getSession().createQuery(
       "from User u left join fetch u.roles").list();

    String boHQL =
      "select new BuildingObject(objectId," +
      " technicalTask,wayToTechnicalTask, " +
      "(select object(user) from User user " +
      "  where user.id=buildingObject.user.id), " +
      " name, " +
      " description, " +
      " country, " +
      " region, " +
      " city, " +
      " street, " +
      " house, " +
      " block, " +
      " organizationName, " +
      " organizationZip, " +
      " organizationCountry, " +
      " organizationRegion, " +
      " organizationCity, " +
      "organizationHouse,organizationStreet,organizationBlock,organizationFlat, " +
      "headerFamily,headerMiddleName,headerName,organozationPhone, " +
      "(select object(dangerCategory) from DangerCategory dangerCategory  " +
      " where dangerCategory.dangerCategoryId=buildingObject.dangerCategory.dangerCategoryId), " +
      " (select object(objectType) from ObjectType objectType where objectType.objectTypeId=buildingObject.objectType.objectTypeId))" +
      " from BuildingObject buildingObject";

    List<?> buildingObjectList = null;
    if  (buildingObjectId ==null) {
      buildingObjectList = getSession().createQuery(
          boHQL).list();
    } else {
      boHQL = boHQL + " where buildingObject.objectId=?";
      buildingObjectList = getSession().createQuery(
          boHQL).setString(0, buildingObjectId.toString()).list();
    }

    Map<Integer, BuildingObject> boMap = new HashMap<Integer, BuildingObject>();
    for(Object o : buildingObjectList){
      BuildingObject bo = (BuildingObject) o;
            List objectAnswers = getSession().createQuery("select new ObjectAnswer(objectAnswerId,objectConstructionId,answerContents,answerComment,buildingObjectId,question) from ObjectAnswer where objectId=?").setString(0, String.valueOf(bo.getObjectId())).list();

           for (int j = 0; j < objectAnswers.size(); j++) {
               ObjectAnswer objectAnswer = (ObjectAnswer) objectAnswers.get(j);
               objectAnswer.setAnswers(super.getSession().createQuery("from Answer where answerId in (select answers.answerId from ObjectAnswer objectAnswer inner join objectAnswer.answers as answers where objectAnswer.objectAnswerId=?)").setString(0, objectAnswer.getObjectAnswerId().toString()).list());

           }
           bo.setDocumentationQuestions(objectAnswers);
      //we have already lazy list
      //bo.setDocQuestions(new ArrayList<ObjectAnswer>());
      //bo.setObjectQuestions(new ArrayList<ObjectAnswer>());
      //bo.setDocumentationQuestions(new ArrayList<ObjectAnswer>());
      boMap.put(bo.getObjectId(), bo);
    }

    String oaHQL = "select objectAnswerId, " +
    " buildingObjectId, " +
    " answerContents, " +
    " answerComment, " +
    " question.questionId from ObjectAnswer";

    List<?> oqustion = null;
    if  (buildingObjectId ==null) {
      oqustion = getSession().createQuery(
          oaHQL).list();
    } else {
      oaHQL = oaHQL + " where buildingObjectId=?";
      oqustion = getSession().createQuery(
          oaHQL).setString(0, buildingObjectId.toString()).list();
    }

    Map<Integer, ObjectAnswer> oaMap = new HashMap<Integer, ObjectAnswer>();
    for (Object o : oqustion) {
      Object[] cols = (Object[]) o;
      ObjectAnswer oa = new ObjectAnswer();
      oa.setObjectAnswerId((Integer) cols[0]);
      oa.setBuildingObjectId((Integer) cols[1]);
      oa.setAnswerContents((String) cols[2]);
      oa.setAnswerComment((String) cols[3]);
//      oa.setAnswers(new ArrayList<Answer>());
      Question q = qmap.get((Integer) cols[4]);
      if (q != null) {
        oa.setQuestion(q);
        BuildingObject bo = boMap.get(oa.getBuildingObjectId());
        if (bo != null) {
          oa.setBuildingObject(bo);
          if (q.isForObjectStructure()) {
            bo.getObjectQuestions().add(oa);
          } else {
            bo.getDocQuestions().add(oa);
          }
          if (q.getQuestionType().getQuestionTypeId() == 1){
            bo.getDocumentationQuestions().add(oa);
          }
        }
      }
      oaMap.put(oa.getObjectAnswerId(), oa);
    }

    List<?> oanswer = null;
    String oanswerHQL =
      "select oa.objectAnswerId, " +
        " a.answerId " +
        " from ObjectAnswer oa left join oa.answers as a ";

    if  (buildingObjectId ==null) {
      oanswer = getSession().createQuery(
          oanswerHQL).list();
    } else {
      oanswerHQL = oanswerHQL + " where oa.buildingObjectId=?";
      oanswer = getSession().createQuery(
          oanswerHQL).setString(0, buildingObjectId.toString()).list();
    }

    for (Object o : oanswer) {
      Object[] cols = (Object[]) o;
      ObjectAnswer oa = oaMap.get((Integer) cols[0]);
      if (oa != null) {
        Answer a = amap.get((Integer) cols[1]);
        if (a!=null){
          oa.getAnswers().add(a);
        }
      }
    }


    return buildingObjectList;
  }



  public BuildingObject getBuildingObjectForList(Integer buildingObjectId) {
    List<?> l = loadObjectsList(buildingObjectId);
    if (l.isEmpty()) {
      return null;
    } else {
      return (BuildingObject) l.get(0);
    }
  }


    public BuildingObject getBuildingObjectForBreadCrump(final String objectId) {
        return (BuildingObject) super.getSession().createQuery("select new BuildingObject(objectId,name) from BuildingObject where objectId=?").setString(0, objectId).uniqueResult();
    }


    public List getConstructionDefectsOfType(String constructionTypeId, String buildingObjectId) {
        return super.getSession().createQuery("from ConstructionDefect constructionDefect where constructionDefect.exampleId in (select constructionExample.exampleId from ConstructionExample constructionExample where constructionExample.constructionType.constructionTypeId=? AND constructionExample.objectConstructionId in (select objectConstruction.typeId from ObjectConstruction objectConstruction where objectConstruction.objectId=?))").setString(0, constructionTypeId).setString(1, buildingObjectId).list();
    }


    public DangerCategory getConstructionRecommendedDangerCategory(String buildingObjectId) {
        if (getHibernateTemplate().find("from ConstructionExample constructionExample inner join fetch constructionExample.exampleDefects as defects where (defects.dangerCategory.categoryName='A' OR defects.dangerCategory.categoryName='А') AND constructionExample.buildObjectId=" + buildingObjectId).size() != 0) {
            return (DangerCategory) super.getSession().createQuery("from DangerCategory dangerCategory where dangerCategory.categoryName='A'  OR dangerCategory.categoryName='А'").uniqueResult();
        } else {
            if (getHibernateTemplate().find("from ConstructionExample constructionExample inner join fetch constructionExample.exampleDefects as defects where (defects.dangerCategory.categoryName='B' OR defects.dangerCategory.categoryName='Б') AND constructionExample.buildObjectId=" + buildingObjectId).size() != 0) {
                return (DangerCategory) super.getSession().createQuery("from DangerCategory dangerCategory where dangerCategory.categoryName='B' OR dangerCategory.categoryName='Б'").uniqueResult();

            }

        }
        return (DangerCategory) super.getSession().createQuery("from DangerCategory dangerCategory where dangerCategory.categoryName='C' OR dangerCategory.categoryName='В'").uniqueResult();

    }


    public List getObjectConstructionsByTypeId(String buildingObjectId, String typeId) {
        return super.getSession().createQuery("from ObjectConstruction objConstr where objConstr.objectId=? AND objConstr.constructionType.constructionTypeId=?").setString(0, buildingObjectId).setString(1, typeId).list();
    }


    public List getObjectGroupedConstructionTypes(String objectId) {
        return super.getSession().createQuery("select objConstr.constructionType from ObjectConstruction objConstr where objConstr.objectId=? group by objConstr.constructionType").setString(0, objectId).list();
    }


    public Integer getObjectConstructionTypeExampleNum(String objectId, String typeId) {
      Long res = (Long) super.getSession().createQuery("select count(*) from ConstructionExample example where example.buildObjectId=? AND  example.constructionType.constructionTypeId=?").setString(0, objectId).setString(1, typeId).uniqueResult();
        return res.intValue();
    }

    public Integer getExampleNumberByConstructionType(String constructionTypeId, String buildObjectId) {
      Long size =
         (Long) super.getSession().createQuery("select count(*) from ConstructionExample constructionExample where constructionExample.objectConstructionId=? and constructionExample.buildObjectId=?").setString(0, constructionTypeId).setString(1, buildObjectId).uniqueResult();
      return size.intValue();
    }
  
   
    public Integer getObjectConstructionTypeExampleByCategory(String objectId, String typeId, String dangerCategoryName) {
        return new Integer(super.getSession().createQuery("from ConstructionExample example inner join fetch example.exampleDefects as defects  where example.buildObjectId=? AND  example.constructionType.constructionTypeId=? AND defects.dangerCategory.categoryName=?").setString(0, objectId).setString(1, typeId).setString(2, dangerCategoryName).list().size());
    }


    public List getDocumentationQuestions() {
        return getHibernateTemplate().find(
            "from Question question  " +
            " inner  join fetch question.questionType as questionType " +
            " where questionType.questionTypeId=1 " +
            "  order by questionPriority,forObjectStructure asc");
    }

    public void savePreparedDocumentationQuestions(Integer objectId) {
    Long objcnt = (Long) getSession().createQuery(
        "select count(*) from BuildingObject " +
        " where objectId=?")
        .setInteger(0, objectId)
        .uniqueResult();

    if(objcnt==0){
      return;
    }

    Long qcnt = (Long) getSession().createQuery(
        "select count(*) from ObjectAnswer as oa" +
        " where oa.question.questionType.questionTypeId=1" +
        "  and oa.buildingObject.objectId=?")
        .setInteger(0, objectId)
        .uniqueResult();
    if (qcnt > 0){
      return;
    }

    List<?> qlist = getSession().createQuery(
        "select " +
        " q.questionId," +
        " q.questionPriority," +
        " q.contents," +
        " q.forObjectStructure," +
        " q.forAllConstructions," +
        " q.necessary," +
          " q.noVariants," +
          " q.fewAnswers," +
          " q.questionType" +
        " from Question as q").list();
    Map<Integer, Question> qmap = new HashMap<Integer, Question>();
    for (Object o : qlist){
      Object[] cols = (Object[]) o;
      Question q = new Question();
      q.setQuestionId((Integer) cols[0]);
      q.setQuestionPriority((Integer) cols[1]);
      q.setContents((String) cols[2]);
      q.setForAllConstructions((Boolean) cols[3]);
      q.setForObjectStructure((Boolean) cols[4]);
      q.setNecessary((Boolean) cols[5]);
      q.setNoVariants((Boolean) cols[6]);
      q.setFewAnswers((Boolean) cols[7]);
      q.setQuestionType((QuestionType) cols[8]);
//      q.setAnswers(new ArrayList<Answer>());
      qmap.put(q.getQuestionId(), q);
    }

    Map<Integer, Answer> amap = new HashMap<Integer, Answer>();
    List<?> alist = getSession().createQuery(
        "select " +
        " answerId, "+
          " contents, "+
          " answerInterpritation, "+
          " letter," +
          " question.questionId" +
    " from Answer").list();

    for (Object o : alist){
      Object[] cols = (Object[]) o;
      Answer answer = new Answer();
      answer.setAnswerId((Integer) cols[0]);
      answer.setContents((String) cols[1]);
      answer.setAnswerInterpritation((String) cols[2]);
      answer.setLetter((String) cols[3]);
      Question question = qmap.get((Integer) cols[4]);
      if (question!=null) {
        question.getAnswers().add(answer);
        answer.setQuestion(question);
      }
      amap.put(answer.getAnswerId(), answer);
    }

//    BuildingObject bo = new BuildingObject(objectId, "dummy");
    BuildingObject bo = (BuildingObject) getSession()
      .createCriteria(BuildingObject.class)
      .add(Restrictions.idEq(objectId))
      .setFetchMode("photoes", FetchMode.SELECT)
      .setFetchMode("constructionTypes", FetchMode.SELECT)
      .setFetchMode("documentationQuestions", FetchMode.SELECT)
      .setFetchMode("currentDocumentationQuestions", FetchMode.SELECT)
      .setFetchMode("constructionExamples", FetchMode.SELECT)
      .setFetchMode("objectQuestions", FetchMode.SELECT)
      .setFetchMode("docQuestions", FetchMode.SELECT)
      .setFetchMode("currentObjectQuestions", FetchMode.SELECT)
      .setFetchMode("levelPlanList", FetchMode.SELECT)
      .uniqueResult();

    Session sess = getSession();
    for(Question question: qmap.values()){
      if(question.getQuestionType().getQuestionTypeId()==1){
        ObjectAnswer objectAnswer = new ObjectAnswer();
        objectAnswer.setBuildingObject(bo);
        objectAnswer.setObjectConstruction(null);
                objectAnswer.setQuestion(question);
                bo.getDocumentationQuestions().add(objectAnswer);

      }
    }
    sess.saveOrUpdate(bo);
  }

    public List getAnswersByDocumentation(String objectId, String type) {
        return super.getSession().createQuery("from ObjectAnswer objectAnswer where objectAnswer.question.questionType.questionTypeId=1 AND objectAnswer.question.forObjectStructure=? AND objectAnswer.buildingObjectId=? order by objectAnswer.question.documentType.documentTypeId asc").setString(0, type).setString(1, objectId).list();
    }


    public List findBuildingObjectsByName(BuildingObject buildingObject) {
        Criteria criteria = super.getSession().createCriteria(BuildingObject.class);
        if (buildingObject.isByFragments()) {
            criteria.add(Expression.like("name", buildingObject.getName(), MatchMode.ANYWHERE));
        } else {
            criteria.add(Expression.eq("name", buildingObject.getName()));

        }

        return criteria.list();
    }


    public void evict(BuildingObject buildingObject) {
        super.getSession().evict(buildingObject);
    }


    /**
     * @see com.vst.dao.BuildingObjectDao#getBuildingObjects(com.vst.model.BuildingObject)
     */

    public List getBuildingObjects(final BuildingObject buildingObject) {
        return getHibernateTemplate().find("from BuildingObject order by region");

        /* Remove the line above and uncomment this code block if you want
           to use Hibernate's Query by Example API.
        if (buildingObject == null) {
            return getHibernateTemplate().find("from BuildingObject");
        } else {
            // filter on properties set in the buildingObject
            HibernateCallback callback = new HibernateCallback() {
                public Object doInHibernate(Session session) throws HibernateException {
                    Example ex = Example.create(buildingObject).ignoreCase().enableLike(MatchMode.ANYWHERE);
                    return session.createCriteria(BuildingObject.class).add(ex).list();
                }
            };
            return (List) getHibernateTemplate().execute(callback);
        }*/
    }


    public List getBuildingObjectsForTree() {
      // load light buildings list
        List<?> bdList = getSession().createQuery(
                "select new BuildingObject(  bo.objectId," +
                        "bo.name," +
                        "bo.region" +
                        ") " +
                        "from BuildingObject bo order by region").list();

        //index building list
        Map<Integer, BuildingObject> ceMap =
          new HashMap<Integer, BuildingObject>();
        for (Object n : bdList){
          BuildingObject bo =
            (BuildingObject) n;
//          bo.setConstructionTypes(new ArrayList<ObjectConstruction>());
          ceMap.put(bo.getObjectId(), bo);
        }

        // load constructions list
        List<?> crows = getSession().createQuery(
           "select oc.typeId," +
               "oc.description," +
               "oc.objectId," +
               "m.materialId," +
               "m.materialName," +
               "ct.constructionTypeId," +
               "ct.name" +
            " " +
            "from ObjectConstruction oc, ConstructionType ct,"+
            " Material m where "+
            "  ct.material.materialId = m.materialId"+
            "  and oc.constructionType.constructionTypeId = ct.constructionTypeId"+
            "  and oc.objectId in (select objectId from BuildingObject)").list();

        // process references
        Map<Integer, ObjectConstruction> coMap =
          new HashMap<Integer, ObjectConstruction>();
        for (Object o : crows) {
          Object[] cols = (Object[]) o;
          ObjectConstruction oc = new ObjectConstruction(
              (Integer) cols[0],
              (String) cols[1], new ConstructionType());
          oc.setObjectId((Integer) cols[2]);
//          oc.setConstructionExamples(new ArrayList<ConstructionExample>());
          coMap.put(oc.getTypeId(), oc);
          Material m = new Material();
          m.setMaterialId((Integer) cols[3]);
          m.setMaterialName((String) cols[4]);

          ConstructionType ct = oc.getConstructionType();
          ct.setConstructionTypeId((Integer) cols[5]);
          ct.setName((String) cols[6]);

           oc.setNumberInObject(getExampleNumberByConstructionType(oc.getTypeId().toString(),oc.getObjectId().toString()).intValue());
            //System.out.println("NIO:"+oc.getNumberInObject()); 
      
          BuildingObject bo = ceMap.get(oc.getObjectId());
          if (bo !=null) {
            bo.getConstructionTypes().add(oc);
          }
        }

        //process examples
        List<?> allExamples = getAllExamplesList();
        for (Object o : allExamples) {
          ConstructionExample ce =
            (ConstructionExample) o;

          ObjectConstruction oc = coMap.get(ce.getObjectConstructionId());
          if(oc != null){
            oc.getConstructionExamples().add(ce);
          }
        }

        return bdList;
    }

    protected List getAllExamplesList(){
      List<?> cerows =  getSession().createQuery
        (       //  (Integer exampleId, String exampleNumber, String exampleName
            "select " +
            " ce.exampleId, " +
            " ce.exampleRelativeNumber, " +
            " ce.exampleName, "+
            " ce.objectId, " +
            " ce.objectConstructionId " +
            "from ConstructionExample as ce "
        ).list();

      List<ConstructionExample> ceList = new ArrayList<ConstructionExample>();
      Map<Integer, ConstructionExample> ceMap =
        new HashMap<Integer, ConstructionExample>();
      for (Object o : cerows) {
          Object[] cols = (Object[]) o;
          ConstructionExample ce = new ConstructionExample();
          ce.setExampleId((Integer) cols[0]);
          ce.setExampleRelativeNumber((Integer) cols[1]);
          ce.setExampleName((String) cols[2]);
          ce.setObjectId((Integer) cols[3]);
          ce.setObjectConstructionId((Integer) cols[4]);
          ceList.add(ce);
          ceMap.put(ce.getExampleId(), ce);
      }

        List<?> res = getSession().createQuery(
              "select "+
              " cd.constructionDefectId, "+
              " cd.comment, "+
              " dt.defectTypeId, "+
              " dt.defectTypeName,"+
              " dv.varityId, "+
              " dv.varityName,"+
              " dz.defectZoneId, "+
              " dz.defectZoneName,"+
              " cd.exampleId"+
              " from ConstructionDefect as cd, DefectType as dt, " +
              " DefectZone as dz, DefectVarity dv"+
              " where cd.defectType.defectTypeId = dt.defectTypeId " +
              "  and cd.defectZone.defectZoneId = dz.defectZoneId " +
              "  and cd.defectVarity.varityId = dv.varityId")
                  .list();

          for (Object r : res){
            Object[] rescolumns = (Object[]) r;
            ConstructionDefect cd = new ConstructionDefect(
              (Integer) rescolumns[0], (String) rescolumns[1]);
            DefectType dt = new DefectType(
               (Integer) rescolumns[2], (String) rescolumns[3]);
            DefectVarity dv = new DefectVarity(
              (Integer) rescolumns[4], (String) rescolumns[5]);
            DefectZone dz = new DefectZone(
               (Integer) rescolumns[6], (String) rescolumns[7]);

            cd.setDefectType(dt);
            cd.setDefectVarity(dv);
            cd.setDefectZone(dz);

            ConstructionExample ce =
              ceMap.get((Integer) rescolumns[8]);
            if (ce != null) {
              ce.getExampleDefects().add(cd);
            }
          }
       return ceList;
    }



    public List getConstructionTypesForTree(Integer objectId) {
        return getSession().createQuery(
                "select new ObjectConstruction(  oc.typeId," +
                        "oc.description," +
                        "oc.constructionType" +
                        ") " +
                        "from ObjectConstruction oc where oc.objectId=?").setInteger(0, objectId.intValue()).list();
    }

    /**
     * @see com.vst.dao.BuildingObjectDao#getBuildingObject(Integer objectId)
     */

    public BuildingObject getBuildingObject(final Integer objectId) {
        BuildingObject buildingObject = (BuildingObject) getObject(objectId);
        return buildingObject;
    }

    /**
     * @see com.vst.dao.BuildingObjectDao#saveBuildingObject(BuildingObject buildingObject)
     */

    public void saveBuildingObject(final BuildingObject buildingObject) {
      super.saveObject(buildingObject);
      // super.getSession().flush();
    }

    /**
     * @see com.vst.dao.BuildingObjectDao#removeBuildingObject(Integer objectId)
     */

    public void removeBuildingObject(final Integer objectId) {
        super.removeObject(objectId);
    }


//    private Connection getConnection(Properties props) {
//
//        String driverURL = "jdbc:mysql://localhost/vstbase?useUnicode=true&amp;characterEncoding=UTF-8";
//        Connection dbConn = null;
//        try {
//            Class.forName("com.mysql.jdbc.Driver");
//            dbConn = (Connection) DriverManager.getConnection(driverURL, props);
//            return dbConn;
//        }
//        catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }


    public boolean haveNecessaryQuestionsWithOutAnswers(Integer buildingObjectId, Properties props) throws SQLException {
//
//        Connection dbConn = getConnection(props);
//        Statement st = (Statement) dbConn.createStatement();
//        ResultSet rs = (ResultSet) st.executeQuery("select objectAnswers.* from objectAnswers, questions, answerObjectRelations where objectAnswers.objectId=" + buildingObjectId + " and objectAnswers.questionId=questions.questionId and questions.necessary=true and answerObjectRelations.objectAnswerId=objectAnswers.objectAnswerId and answerObjectRelations.answerId=-1");
//
//        if (rs.next()) {
//            return true;      //есть не отв вопросы
//        } else {
//            return false;
//        }
//
//
      return false;
    }


  public List<ObjectPhoto> getObjectPhotoes(Integer objectId) {
    List<ObjectPhoto> res = getSession()
        .createQuery(" from ObjectPhoto where objectId=?")
        .setString(0, objectId.toString()).list();
    return res;
  }

  private String StringParam(String val){
    return val==null ? "" : val;
  }

  public void updateBuildingObjectByMainForm(Integer objectId,
      BuildingObject formObject) {
    getSession().createQuery(
        "update BuildingObject b set "+
        " b.name=:name," +
        " b.description=:description," +
        " b.country=:country," +
        " b.region=:region," +
        " b.city=:city," +
        " b.street=:street," +
        " b.house=:house," +
        " b.block=:block," +
        " b.organizationName=:organizationName," +
        " b.organizationZip=:organizationZip," +
        " b.organizationCountry=:organizationCountry," +
        " b.organizationRegion=:organizationRegion," +
        " b.organizationCity=:organizationCity," +
        " b.organizationStreet=:organizationStreet," +
        " b.organizationHouse=:organizationHouse," +
        " b.organizationBlock=:organizationBlock," +
        " b.organizationFlat=:organizationFlat," +
        " b.headerFamily=:headerFamily," +
        " b.headerMiddleName=:headerMiddleName," +
        " b.headerName=:headerName," +
        " b.organozationPhone=:organozationPhone," +
        " b.researchCompanyName=:researchCompanyName," +
        " b.researchCompanyPrincipal=:researchCompanyPrincipal," +
        " b.objectType.objectTypeId=:objectType," +
        " b.dangerCategory.dangerCategoryId=:dangerCategory," +
        " b.user.id=:user" +
        " where b.objectId=:objectId")
        .setInteger("objectId", objectId)
        .setString("name", StringParam(formObject.getName()))
        .setString("description", StringParam(formObject.getDescription()))
        .setString("country", StringParam(formObject.getCountry()))
        .setString("region", StringParam(formObject.getRegion()))
        .setString("city", StringParam(formObject.getCity()))
        .setString("street", StringParam(formObject.getStreet()))
        .setString("house", StringParam(formObject.getHouse()))
        .setString("block", StringParam(formObject.getBlock()))
        .setString("organizationName", StringParam(formObject.getOrganizationName()))
        .setString("organizationZip", StringParam(formObject.getOrganizationZip()))
        .setString("organizationCountry", StringParam(formObject.getOrganizationCountry()))
        .setString("organizationRegion", StringParam(formObject.getOrganizationRegion()))
        .setString("organizationCity", StringParam(formObject.getOrganizationCity()))
        .setString("organizationStreet", StringParam(formObject.getOrganizationStreet()))
        .setString("organizationHouse", StringParam(formObject.getOrganizationHouse()))
        .setString("organizationBlock", StringParam(formObject.getOrganizationBlock()))
        .setString("organizationFlat", StringParam(formObject.getOrganizationFlat()))
        .setString("headerFamily", StringParam(formObject.getHeaderFamily()))
        .setString("headerMiddleName", StringParam(formObject.getHeaderMiddleName()))
        .setString("headerName", StringParam(formObject.getHeaderName()))
        .setString("organozationPhone", StringParam(formObject.getOrganozationPhone()))
        .setString("researchCompanyName", StringParam(formObject.getResearchCompanyName()))
        .setString("researchCompanyPrincipal", StringParam(formObject.getResearchCompanyPrincipal()))
        .setInteger("objectType", formObject.getObjectType()==null?-1:formObject.getObjectType().getObjectTypeId())
        .setInteger("dangerCategory", formObject.getDangerCategory()==null?-1:formObject.getDangerCategory().getDangerCategoryId())
        .setInteger("user", formObject.getUser().getId())
        .executeUpdate();

  }


  @Override
  Class<BuildingObject> getServiceClass() {
    return BuildingObject.class;
  }

}
TOP

Related Classes of com.vst.dao.hibernate.BuildingObjectDaoHibernate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.