public StringBuffer synchronize() {
    List<DivisionLdap> withBadLeader = new ArrayList<DivisionLdap>();
    List<Division> fromDb = divisionDAO.getDivisionsAll();
    List<DivisionLdap> fromLdap = divisionDAO.getDivisionsFromLDAP();
    StringBuffer sb = new StringBuffer("");

    List<Division> forUpdate = new ArrayList<Division>();
    List<DivisionLdap> forAppend = new ArrayList<DivisionLdap>();

    sb.append("Start synchronization divisions.\n\n");
    for (int indexLdap = 0; indexLdap < fromLdap.size(); indexLdap++) {
      DivisionLdap ldapDiv = fromLdap.get(indexLdap);
      if (ldapDiv.isLeaderVerified()) {
        boolean exist = false;
        for (int indexDb = 0; indexDb < fromDb.size(); indexDb++) {
          Division dbDiv = fromDb.get(indexDb);
          String dbSid = dbDiv.getLdap_objectSid();
          String ldapSid = ldapDiv.getLdapObjectSid();
          if (dbSid != null && dbSid.equals(ldapSid)) {
            if (dbDiv.isActive()) {
              boolean updated = false;
              updated = updated | updateName(dbDiv, ldapDiv);
              updated = updated | updateLeader(dbDiv, ldapDiv);
              if (updated) {
                forUpdate.add(dbDiv);
              }
            }
            exist = true;
            break;
          }
        }
        if (!exist) {
          forAppend.add(ldapDiv);
        }
      } else {
        withBadLeader.add(ldapDiv);
      }
    }

    sb.append(add(forAppend));
    sb.append(divisionDAO.setDivision(forUpdate));

    sendMailService.sendAdminAlert(withBadLeader);
    return sb;

    //		testIdGenerator();
    //		return new StringBuffer("Goo");
  }
 private StringBuffer add(List<DivisionLdap> forAppend) {
   StringBuffer sb = new StringBuffer();
   for (DivisionLdap ldapDiv : forAppend) {
     Division division = new Division();
     division.setName(ldapDiv.getLdap_name());
     division.setLdapName(ldapDiv.getLdap_name());
     division.setLdap_objectSid(ldapDiv.getLdapObjectSid());
     Employee leader = employeeService.findByObjectSid(ldapDiv.getLeaderSid());
     if (leader == null) {
       logger.debug("div name {}", ldapDiv.getLdap_name());
       logger.debug("not found leader sid {}", ldapDiv.getLeaderSid());
     }
     division.setLeader(leader);
     Set<Employee> employees = getEmpoyees(ldapDiv.getMembers());
     division.setEmployees(employees);
     division.setActive(true);
     sb.append(divisionDAO.setDivision(division));
   }
   return sb;
 }
 /**
  * Ищет активное подразделение с указанным идентификатором.
  *
  * @param division идентификатор подразделение
  * @return объект типа Division или null, если подразделение не найдено.
  */
 public Division find(Integer division) {
   return divisionDAO.find(division);
 }
 /**
  * Ищет активное подразделение с указанным именем.
  *
  * @param title название подразделение
  * @return объект типа Division или null, если подразделение не найдено.
  */
 public Division find(String title) {
   return divisionDAO.find(title);
 }
 public List<Division> getDivisions() {
   return divisionDAO.getDivisions();
 }