private static void updateWaypointRelations(BTContainerImpl impl, BTContainerDto dto) { // Kopieren der Container-Liste // TODO can this be null? Set waypointDtos = new HashSet(dto.getWaypoints()); // Schritt 1: updaten der vorhandenen sites for (Iterator iter = impl.getWaypoints().iterator(); iter.hasNext(); ) { BTWaypointImpl waypointImpl = (BTWaypointImpl) iter.next(); boolean exists = false; for (Iterator iterator = waypointDtos.iterator(); iterator.hasNext(); ) { BTWaypointDto waypointDto = (BTWaypointDto) iterator.next(); if (waypointImpl.getId().equals(waypointDto.getId())) { ImplCache.put(waypointDto, waypointImpl); BTWaypointProxy.updateImpl(waypointImpl, waypointDto); // dto entfernen, um nur neue übrig zu behalten iterator.remove(); exists = true; break; } } // Schritt 2: site nicht mehr vorhanden -> löschen if (!exists) { iter.remove(); } } // Schritt 3: neue sites anlegen for (Iterator iterator = waypointDtos.iterator(); iterator.hasNext(); ) { BTWaypointDto waypointDto = (BTWaypointDto) iterator.next(); // Könnte theoretisch schon angelegt sein (über eine noch zu deginierende Beziehung) ;-) BTWaypointImpl newImpl = BTWaypointProxy.getOrCreateImpl(waypointDto); impl.addBTWaypointToWaypoints(newImpl); } }
public static BTContainerImpl getOrCreateImpl(BTContainerDto dto) { BTContainerImpl containerImpl = (BTContainerImpl) ImplCache.get(dto); if (containerImpl == null) { containerImpl = createImpl(dto); ImplCache.put(dto, containerImpl); } return containerImpl; }