public void createOrUpdateProject(NamedNodeMap nodeMap, ProjectDAO dao) { Project project = new Project(); // проект из БД // поля синхронизации String name = nodeMap.getNamedItem("name").getNodeValue().trim(); // название проекта String idProject = nodeMap.getNamedItem("id").getNodeValue(); // id проекта String status = nodeMap.getNamedItem("status").getNodeValue(); // статус проекта String pmLdap = nodeMap.getNamedItem("pm").getNodeValue(); // руководитель проекта String hcLdap = nodeMap.getNamedItem("hc").getNodeValue(); // hc // ищем в БД запись о проекте Project findingProject = dao.findByProjectId(idProject); if (findingProject == null) { // если проекта еще нет в БД project.setActive(newStatus.contains(status)); // установим ему новый статус } else { // если проект уже существовал - статус менять не будем // см. //APLANATS-408 project.setActive(findingProject.isActive()); } project.setName(name); project.setProjectId(idProject); if (project.isActive()) { if (!setPM(project, pmLdap)) { return; // если не указан РП или его нет в БД, то проект не сохраняем, переходим к // следующему } setDivision(project, hcLdap); // установим подразделение пользователя } dao.store(project); // запишем в БД }
/* * Синхронизация проектов с аплановской системой ведения проектов * По адресу OQurl находится список проектов вместе с сотрудниками * в виде xml (файл синхронизации) * * <project id="" name="" description="" customer="" ending="" status="7-архив" pm="CN=Somebody Dmitry/CN=Users/DC=aplana/DC=com" hc="CN=Zaitsev Dmitry/CN=Users/DC=aplana/DC=com" > * <workgroup> * <user>Ivanov Ivan</user> * <user>Smirnov S***n</user> * <user>Sidorov Igor</user> * </workgroup> * </project> */ @Transactional public void sync() { trace.setLength(0); try { trace.append("Начало синхронизации\n"); projectDAO.setTrace(trace); // получим список веток project из xml файла NodeList nodes = getOQasNodeList(); trace .append("В файле синхронизации найдено: ") .append(nodes.getLength()) .append(" проектов\n"); for (int i = 0; i < nodes.getLength(); i++) { createOrUpdateProject(nodes.item(i).getAttributes(), projectDAO); } trace.append("Синхронизация завершена\n"); } catch (Exception e) { logger.error("oq project sync error: ", e); trace.append("Синхронизация прервана из-за ошибки: ").append(e.getMessage()).append("\n"); } }