/**
   * Find all events in the given month and year.
   *
   * @param month - 0-11 (0 = January)
   * @param year
   */
  public List findEventsFor(int month, int year) {
    List events = null;
    try {
      startOperation();
      Date firstDay = DateUtils.newDate(month, 1, year);
      Date lastDay = DateUtils.newDate(month + 1, 1, year);

      String q =
          "from Event event where event.startDate >= :firstDay and event.startDate < :lastDay";
      Query query = getSession().createQuery(q);

      query.setParameter("firstDay", firstDay);
      query.setParameter("lastDay", lastDay);
      events = query.list();
      getTx().commit();
    } catch (HibernateException e) {
      handleException(e);
    } finally {
      HibernateFactory.close(getSession());
    }
    return events;
  }
  /**
   * Erzeugen einer vollständigen Query an der Session mit allen angegeben Suchkriterien. Mit
   * attributeNamesToSelect können einzelne Attribute geladen werden.
   *
   * @param session
   * @param attributeNamesToSelect null oder Länge = 0 führt zur Selektion des IMSFacilityImpl
   * @return entweder ein IMSFacilityImpl, oder ein Object[] aus den gewählten Attributen
   */
  public Query getQuery(Session session, String[] attributeNamesToSelect)
      throws HibernateException {
    // Der Buffer für die gesammelten where-clause-Häppchen.
    StringBuffer whereClause = new StringBuffer();

    // Der Zähler für die automatische Nummerierung der positional parameter.
    int paramNumber = 0;

    // Im ersten Durchgang werden alle übergebenen Suchkriterien abgeklappert, um daraus
    // einen korrekten HQL-Query-String zu bauen.
    // Im Anschluss an das Erzeugen der Query über die Session mit dem Query-String, müssen
    // alle übergebenen Suchkriterien ein zweites Mal abgeklappert werden, um per
    // setParameter() die Kriterien in die Query einzusetzen.

    if (!id.isEmpty()) {
      whereClause.append('(');
      for (int i = 0; i < id.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.id = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!name.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < name.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append(
            "upper(btsitetemplate.name) like upper(:QueryParam" + ++paramNumber + ")");
      }
      whereClause.append(')');
    }

    if (!company.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < company.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.company = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!reference.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < reference.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append(
            "upper(btsitetemplate.reference) like upper(:QueryParam" + ++paramNumber + ")");
      }
      whereClause.append(')');
    }

    if (!contact.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < contact.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.contact = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!phone.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < phone.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.phone = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!fax.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < fax.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.fax = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!mobile.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < mobile.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.mobile = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!email.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < email.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.email = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!street.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < street.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.street = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!housenumber.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < housenumber.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.housenumber = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!zip.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < zip.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.zip = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!city.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < city.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append(
            "upper(btsitetemplate.city) like upper(:QueryParam" + ++paramNumber + ")");
      }
      whereClause.append(')');
    }

    if (!state.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < state.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.state = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!country.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < country.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.country like :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!remarks.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < remarks.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.remarks = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!regionid.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < regionid.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.regionid = :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    if (!type.isEmpty()) {
      if (paramNumber > 0) {
        whereClause.append(" and ");
      }
      whereClause.append('(');
      for (int i = 0; i < type.size(); i++) {
        if (i > 0) {
          whereClause.append(" or ");
        }
        whereClause.append("btsitetemplate.type= :QueryParam" + ++paramNumber);
      }
      whereClause.append(')');
    }

    // Endgültige Query erzeugen.
    String where = "";
    if (whereClause.length() > 0) {
      where = " where " + whereClause.toString();
    }

    StringBuffer selectClause = new StringBuffer();
    if (attributeNamesToSelect != null) {
      for (int i = 0; i < attributeNamesToSelect.length; i++) {
        selectClause.append("btsitetemplate.");
        selectClause.append(attributeNamesToSelect[i]);
        if (i + 1 < attributeNamesToSelect.length) {
          selectClause.append(", ");
        }
      }
    }

    Query query =
        session.createQuery(
            "select "
                + selectClause.toString()
                + " from BTSiteTemplateImpl btsitetemplate "
                + where);

    // Positional parameter setzen.
    paramNumber = 0;

    for (int i = 0; i < id.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, id.get(i));
    }

    for (int i = 0; i < name.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, name.get(i));
    }

    for (int i = 0; i < company.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, company.get(i));
    }

    for (int i = 0; i < reference.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, reference.get(i));
    }

    for (int i = 0; i < contact.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, contact.get(i));
    }

    for (int i = 0; i < phone.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, phone.get(i));
    }

    for (int i = 0; i < fax.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, fax.get(i));
    }

    for (int i = 0; i < mobile.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, mobile.get(i));
    }

    for (int i = 0; i < email.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, email.get(i));
    }

    for (int i = 0; i < street.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, street.get(i));
    }

    for (int i = 0; i < housenumber.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, housenumber.get(i));
    }

    for (int i = 0; i < zip.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, zip.get(i));
    }

    for (int i = 0; i < city.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, city.get(i));
    }

    for (int i = 0; i < state.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, state.get(i));
    }

    for (int i = 0; i < country.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, country.get(i));
    }

    for (int i = 0; i < remarks.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, remarks.get(i));
    }

    for (int i = 0; i < regionid.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, regionid.get(i));
    }

    for (int i = 0; i < type.size(); i++) {
      query.setParameter("QueryParam" + ++paramNumber, type.get(i));
    }

    return query;
  }
  private ActionForward ExportToExcel(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
    try {
      ActionErrors errors = this.getActionErrors(request.getSession());
      String DataId = request.getParameter("DataId");
      if ((DataId == null) || (DataId.length() < 1))
        actionDebug.addGlobalError(errors, "error.context.required");
      if (!errors.empty()) {
        saveErrors(request, errors);
        return null;
      }

      // Get Excel Template Path
      String TemplatePath = GetTemplateFolder();
      if (TemplatePath == null) return null;

      // Fetch related Data
      net.sf.hibernate.Session hs = Hibernate2Session.currentSession();
      ExpenseMaster findmaster = (ExpenseMaster) hs.load(ExpenseMaster.class, new Long(DataId));
      if (findmaster == null) return null;
      UserLogin ul = findmaster.getExpenseUser();
      List ExpList =
          hs.createQuery("select et from ExpenseType as et order by et.expSeq ASC").list();
      Iterator itExpType = ExpList.iterator();
      Date dayStart = findmaster.getExpenseDate();
      ArrayList DateList = new ArrayList();
      for (int i = 0; i < 14; i++) {
        DateList.add(UtilDateTime.getDiffDay(dayStart, i));
      }
      Iterator itDate = DateList.iterator();
      Query q =
          hs.createQuery(
              "select ed from ExpenseDetail as ed inner join ed.ExpMaster as em inner join ed.ExpType as et where em.Id =:DataId order by ed.ExpenseDate, et.expSeq ASC");
      q.setParameter("DataId", DataId);
      List detailList = q.list();
      q =
          hs.createQuery(
              "select ec from ExpenseComments as ec inner join ec.ExpMaster as em where em.Id =:DataId order by ec.ExpenseDate");
      q.setParameter("DataId", DataId);
      List CmtsList = q.list();
      Iterator itDetail = detailList.iterator();
      Iterator itCmts = CmtsList.iterator();
      ExpenseDetail ed = null;
      if (itDetail.hasNext()) {
        ed = (ExpenseDetail) itDetail.next();
      } else {
        return null;
      }
      ExpenseComments ec = null;
      if (itCmts.hasNext()) {
        ec = (ExpenseComments) itCmts.next();
      }
      // Start to output the excel file
      response.reset();
      response.setHeader(
          "Content-Disposition",
          "attachment;filename=\"Expense" + findmaster.getFormCode() + ".xls\"");
      response.setContentType("application/octet-stream");

      // Use POI to read the selected Excel Spreadsheet
      HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(TemplatePath + "\\" + ExcelTemplate));
      // Select the first worksheet
      HSSFSheet sheet = wb.getSheet(FormSheetName);

      // Header
      HSSFRow row = sheet.getRow(5);
      HSSFCell cell = row.getCell((short) 1); // ER No.
      cell.setCellValue(findmaster.getFormCode());
      cell = row.getCell((short) 4); // Department
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
      cell.setCellValue(ul.getParty().getDescription());
      cell = row.getCell((short) 8); // User Name
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
      cell.setCellValue(ul.getName());
      cell = row.getCell((short) 12); // Customer
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
      cell.setCellValue(
          findmaster.getProject().getCustomer().getPartyId()
              + ":"
              + findmaster.getProject().getCustomer().getDescription());

      if (findmaster.getClaimType().equals("CY")) { // Paid by
        cell = sheet.getRow(1).getCell((short) 12);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
        cell.setCellValue(
            findmaster.getProject().getBillTo().getPartyId()
                + ":"
                + findmaster.getProject().getBillTo().getDescription()
                + "("
                + findmaster.getProject().getBillTo().getChineseName()
                + ")");
      }

      cell = sheet.getRow(2).getCell((short) 12);
      cell.setCellValue(findmaster.getExpenseCurrency().getCurrId());
      cell = sheet.getRow(3).getCell((short) 12);
      cell.setCellValue(findmaster.getCurrencyRate().floatValue());
      cell = sheet.getRow(4).getCell((short) 12); // Project Information
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
      cell.setCellValue(
          findmaster.getProject().getProjId()
              + ":"
              + findmaster.getProject().getProjName()
              + " ( "
              + findmaster.getProject().getDepartment().getDescription()
              + " )");

      cell = sheet.getRow(25).getCell((short) 3);
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
      cell.setCellValue("Employee (" + ul.getName() + ")");
      cell = sheet.getRow(27).getCell((short) 3);
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
      cell.setCellValue(
          "Confirmed By (" + findmaster.getProject().getProjectManager().getName() + ")");

      // List Header
      int ExcelRow = 0;
      int ExcelCol = 0;

      // List
      boolean NullData = true;
      ExcelRow = ListStartRow;
      while (itDate.hasNext()) {
        Date fd = (Date) itDate.next();
        row = sheet.getRow(ExcelRow);
        cell = row.getCell((short) 0);
        cell.setCellValue(fd);
        ExcelCol = ListStartCol;
        itExpType = ExpList.iterator();
        while (itExpType.hasNext()) {
          ExpenseType et = (ExpenseType) itExpType.next();
          NullData = false;
          ExcelCol++;
          if (ed != null) {
            if (ed.getExpenseDate().equals(fd) && ed.getExpType().equals(et)) {
              cell = row.getCell((short) ExcelCol);
              cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
              cell.setCellValue(ed.getUserAmount().doubleValue());
              if (itDetail.hasNext()) {
                ed = (ExpenseDetail) itDetail.next();
              }
            }
          }
        }
        if (ec != null) {
          if (ec.getExpenseDate().equals(fd)) {
            cell = row.getCell((short) 1);
            cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
            cell.setCellValue(ec.getComments());
            if (itCmts.hasNext()) {
              ec = (ExpenseComments) itCmts.next();
            }
          }
        }
        ExcelRow++;
      }

      // 写入Excel工作表
      wb.write(response.getOutputStream());
      // 关闭Excel工作薄对象
      response.getOutputStream().close();
      response.flushBuffer();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  /**
   * Retrieves the records for class name in sourceObjectName according to field values passed in
   * the passed session.
   *
   * @param whereColumnName An array of field names.
   * @param whereColumnCondition The comparision condition for the field values.
   * @param whereColumnValue An array of field values.
   * @param joinCondition The join condition.
   * @param The session object.
   */
  public List retrieve(
      String sourceObjectName,
      String[] selectColumnName,
      String[] whereColumnName,
      String[] whereColumnCondition,
      Object[] whereColumnValue,
      String joinCondition)
      throws DAOException {
    List list = null;
    try {
      StringBuffer sqlBuff = new StringBuffer();

      String className = Utility.parseClassName(sourceObjectName);

      // Logger.out.debug("***********className:"+className);
      if (selectColumnName != null && selectColumnName.length > 0) {
        sqlBuff.append("Select ");

        // Added by Aarti
        // --------------------------------
        //                if(sourceObjectName.equals(Site.class.getName()))
        //                {
        //                    sqlBuff.append(className + "." + Constants.SYSTEM_IDENTIFIER);
        //                    sqlBuff.append(", ");
        //                }
        // ---------------------------------
        for (int i = 0; i < selectColumnName.length; i++) {
          sqlBuff.append(className + "." + selectColumnName[i]);
          if (i != selectColumnName.length - 1) {
            sqlBuff.append(", ");
          }
        }
        sqlBuff.append(" ");
      }
      // Logger.out.debug(" String : "+sqlBuff.toString());

      Query query = null;
      sqlBuff.append("from " + sourceObjectName + " " + className);
      // Logger.out.debug(" String : "+sqlBuff.toString());

      if ((whereColumnName != null && whereColumnName.length > 0)
          && (whereColumnCondition != null && whereColumnCondition.length == whereColumnName.length)
          && (whereColumnValue != null)) {
        if (joinCondition == null) joinCondition = Constants.AND_JOIN_CONDITION;

        sqlBuff.append(" where ");

        // Adds the column name and search condition in where clause.
        for (int i = 0; i < whereColumnName.length; i++) {
          sqlBuff.append(className + "." + whereColumnName[i] + " ");
          if (whereColumnCondition[i].indexOf("in") != -1) {
            sqlBuff.append(whereColumnCondition[i] + "(  ");
            Object valArr[] = (Object[]) whereColumnValue[i];
            for (int j = 0; j < valArr.length; j++) {
              // Logger.out.debug(sqlBuff);
              sqlBuff.append("? ");
              if ((j + 1) < valArr.length) sqlBuff.append(", ");
            }
            sqlBuff.append(") ");
          } else if (whereColumnCondition[i].indexOf("is not null") != -1) {
            sqlBuff.append(whereColumnCondition[i]);
          } else if (whereColumnCondition[i].indexOf("is null") != -1) {
            sqlBuff.append(whereColumnCondition[i]);
          } else {
            sqlBuff.append(whereColumnCondition[i] + " ? ");
          }

          if (i < (whereColumnName.length - 1)) sqlBuff.append(" " + joinCondition + " ");
        }

        // Logger.out.debug(sqlBuff.toString());

        query = session.createQuery(sqlBuff.toString());

        int index = 0;
        // Adds the column values in where clause
        for (int i = 0; i < whereColumnValue.length; i++) {
          // Logger.out.debug("whereColumnValue[i]. " + whereColumnValue[i]);
          if (whereColumnCondition[i].equals("is null")
              || whereColumnCondition[i].equals("is not null")) {
          } else {

            Object obj = whereColumnValue[i];
            if (obj instanceof Object[]) {
              Object[] valArr = (Object[]) obj;
              for (int j = 0; j < valArr.length; j++) {
                query.setParameter(index, valArr[j]);
                index++;
              }
            } else {
              query.setParameter(index, obj);
              index++;
            }
          }
        }
      } else {
        query = session.createQuery(sqlBuff.toString());
      }

      list = query.list();

      //          Added by Aarti
      // --------------------------------

      //            if(sourceObjectName.equals(Site.class.getName()))
      //            {
      //                boolean isAuthorized;
      //                Object[] objects = null;
      //                Object[] newObjects = null;
      //                Long id;
      //                Site site;
      //
      //                if (selectColumnName != null && selectColumnName.length > 0)
      //                {
      //                    if(list != null)
      //                    {
      //                        for(int i=0; i<list.size();)
      //                        {
      //                            objects = (Object[]) list.get(i);
      //
      //                            if(objects != null)
      //                            {
      //                                newObjects = new Object[objects.length-1];
      //                                id = (Long) objects[0];
      //                                isAuthorized = SecurityManager.getInstance(this.getClass())
      //                                .isAuthorized("*****@*****.**",
      //                                        sourceObjectName+"_"+id,
      //                                        Permissions.USE);
      //                                Logger.out.debug(" User's Authorization to update
      // "+sourceObjectName+"_"+id+" "+isAuthorized);
      //                                list.remove(i);
      //                                if(isAuthorized)
      //                                {
      //                                    for(int x = 1;x<objects.length;x++ )
      //                                    {
      //                                        newObjects[x-1] = objects[x];
      //                                    }
      //                                    list.add(i,newObjects);
      //                                    i++;
      //                                }
      //                            }
      //                        }
      //                    }
      //                }
      //                else
      //                {
      //                    if(list != null)
      //                    {
      //                        for(int i=0; i<list.size();)
      //                        {
      //                            site = (Site) list.get(i);
      //                            if(site !=null)
      //                            {
      //                                isAuthorized = SecurityManager.getInstance(this.getClass())
      //                                .isAuthorized("*****@*****.**",
      //                                        sourceObjectName+"_"+site.getId(),
      //                                        Permissions.USE);
      //                                Logger.out.debug(" User's Authorization to update
      // "+sourceObjectName+"_"+site.getId()+" "+isAuthorized);
      //
      //                                if(isAuthorized)
      //                                {
      //                                    i++;
      //                                }
      //                                else
      //                                {
      //                                    list.remove(i);
      //                                }
      //                            }
      //                        }
      //                    }
      //                }
      //            }
      // ---------------------------------

      // Logger.out.debug(" String : " + sqlBuff.toString());
    } catch (HibernateException hibExp) {
      Logger.out.error(hibExp.getMessage(), hibExp);
      throw new DAOException("Error in retrieve " + hibExp.getMessage(), hibExp);
    } catch (Exception exp) {
      Logger.out.error(exp.getMessage(), exp);
      throw new DAOException("Logical Erroe in retrieve method " + exp.getMessage(), exp);
    }
    return list;
  }