//мап существующих итемов по внешнему ключу
//потом будет списком на удаление
HashMap<String,DirectoryServiceItem> presentItems = new HashMap<String, DirectoryServiceItem>();
ROList<DirectoryServiceItem> itemsList = dir.getItemsList();
for (int i = 0; i < itemsList.size(); i++) {
DirectoryServiceItem item = itemsList.get(i);
//Выбираем для апдейта только посещения(услуги из группы посещения) с заданным внешним ключем (код посещения)
if (item.getID() != 0 && !item.getCode().trim().isEmpty()
&& item.getGroup().getID() == ServiceGroup.SERVICE_GROUP_VISIT) {
presentItems.put(item.getCode().trim(), item);
}
}
for (Entry<String, ServiceData> entry : codeMap.entrySet()) {
ServiceData d = entry.getValue();
DirectoryServiceItem pItem = presentItems.get(entry.getKey());
if (pItem != null) {
if (!pItem.getReqType().getTitle().equals(d.reqType)
|| !pItem.getTitle().equals(d.name)
|| !pItem.getVisitType().getTitle().equals(d.visitType)
|| !pItem.isVisible()) {
//либо разпассивировать либо изменить данные
pItem.setReqType(getReqType(d.reqType));
pItem.setTitle(d.name);
pItem.setVisitType(getVisitType(d.visitType));
pItem.setServiceClass(dirServiceClass.getItemFromID(ServiceClass.SERVICE_CLASS_VISIT));
pItem.setVisible(true);
}
presentItems.remove(entry.getKey());
} else {
//Создать новый
ServiceDetails details = new ServiceDetails();
details.title = d.name;
details.external_key = entry.getKey();
details.code = entry.getKey();
details.reqTypeID = getReqType(d.reqType).getID();
details.visitTypeID = getVisitType(d.visitType).getID();
details.serviceGroup = ServiceGroup.SERVICE_GROUP_VISIT;
details.serviceClass = ServiceClass.SERVICE_CLASS_VISIT;
details.description = "";
DirectoryServiceItem newItem = new DirectoryServiceItem(details);
dir.getItems().append(newItem);
}
}
//Удаление (а может пассивация решает бин)