/** * Update the set of process scans for a given resource type * * @param resourceType * @param existingType */ private void updateProcessScans(ResourceType resourceType, ResourceType existingType) { Set<ProcessScan> existingScans = existingType.getProcessScans(); Set<ProcessScan> newScans = resourceType.getProcessScans(); Set<ProcessScan> scansToPersist = CollectionsUtil.missingInFirstSet(existingScans, newScans); Set<ProcessScan> scansToDelete = CollectionsUtil.missingInFirstSet(newScans, existingScans); Set<ProcessScan> scansToUpdate = CollectionsUtil.intersection(existingScans, newScans); // update scans that may have changed for (ProcessScan scan : scansToUpdate) { for (ProcessScan nScan : newScans) { if (scan.equals(nScan)) { scan.setName(nScan.getName()); } } } // persist new scans for (ProcessScan scan : scansToPersist) { existingType.addProcessScan(scan); } // remove deleted ones for (ProcessScan scan : scansToDelete) { existingScans.remove(scan); entityManager.remove(scan); } }