+ private void searchForEntitiesOwnedBy(final Set<String> ownedBy, final EntityWalker walker) {
+ LOG.debug("{}: Searching for entities owned by {}", persistenceId(), ownedBy);
+
+ searchForEntities((entityTypeNode, entityNode) -> {
+ Optional<DataContainerChild<? extends PathArgument, ?>> possibleOwner =
+ entityNode.getChild(ENTITY_OWNER_NODE_ID);
+ String currentOwner = possibleOwner.isPresent() ? possibleOwner.get().getValue().toString() : "";
+ if (ownedBy.contains(currentOwner)) {
+ walker.onEntity(entityTypeNode, entityNode);
+ }
+ });
+ }
+
+ private void removeCandidateFromEntities(final MemberName member) {
+ final List<Modification> modifications = new ArrayList<>();
+ searchForEntities((entityTypeNode, entityNode) -> {
+ if (hasCandidate(entityNode, member)) {
+ YangInstanceIdentifier entityId =
+ (YangInstanceIdentifier) entityNode.getIdentifier().getKeyValues().get(ENTITY_ID_QNAME);
+ YangInstanceIdentifier candidatePath = candidatePath(
+ entityTypeNode.getIdentifier().getKeyValues().get(ENTITY_TYPE_QNAME).toString(),
+ entityId, member.getName());
+
+ LOG.info("{}: Found entity {}, removing candidate {}, path {}", persistenceId(), entityId,
+ member, candidatePath);
+
+ modifications.add(new DeleteModification(candidatePath));
+ }
+ });
+
+ commitCoordinator.commitModifications(modifications, this);
+ }
+
+ private static boolean hasCandidate(final MapEntryNode entity, final MemberName candidateName) {
+ return ((MapNode)entity.getChild(CANDIDATE_NODE_ID).get()).getChild(candidateNodeKey(candidateName.getName()))
+ .isPresent();
+ }
+
+ private void searchForEntities(final EntityWalker walker) {
+ Optional<NormalizedNode<?, ?>> possibleEntityTypes = getDataStore().readNode(ENTITY_TYPES_PATH);
+ if (!possibleEntityTypes.isPresent()) {
+ return;
+ }
+
+ for (MapEntryNode entityType: ((MapNode) possibleEntityTypes.get()).getValue()) {
+ Optional<DataContainerChild<?, ?>> possibleEntities = entityType.getChild(ENTITY_NODE_ID);
+ if (!possibleEntities.isPresent()) {
+ // shouldn't happen but handle anyway
+ continue;
+ }
+
+ for (MapEntryNode entity: ((MapNode) possibleEntities.get()).getValue()) {
+ walker.onEntity(entityType, entity);
+ }
+ }
+ }
+
+ private void writeNewOwner(final YangInstanceIdentifier entityPath, final String newOwner) {