CandidateListChangeListener implements DOMDataTreeChangeListener { @Override public void onDataTreeChanged(final Collection<DataTreeCandidate> changes) { for (DataTreeCandidate change: changes) { DataTreeCandidateNode changeRoot = change.getRootNode(); ModificationType type = changeRoot.getModificationType(); LOG.debug("{}: Candidate node changed: {}, {}", logId, type, change.getRootPath()); NodeIdentifierWithPredicates candidateKey = (NodeIdentifierWithPredicates) change.getRootPath().getLastPathArgument(); String candidate = candidateKey.getValue(CANDIDATE_NAME_QNAME).toString(); YangInstanceIdentifier entityId = extractEntityPath(change.getRootPath()); if (type == ModificationType.WRITE || type == ModificationType.APPEARED) { LOG.debug("{}: Candidate {} was added for entity {}", logId, candidate, entityId); Collection<String> newCandidates = addToCurrentCandidates(entityId, candidate); shard.tell(new CandidateAdded(entityId, candidate, new ArrayList<>(newCandidates)), shard); } else if (type == ModificationType.DELETE || type == ModificationType.DISAPPEARED) { LOG.debug("{}: Candidate {} was removed for entity {}", logId, candidate, entityId); Collection<String> newCandidates = removeFromCurrentCandidates(entityId, candidate); shard.tell(new CandidateRemoved(entityId, candidate, new ArrayList<>(newCandidates)), shard); } } } CandidateListChangeListener(final ActorRef shard, final String logId); @Override void onDataTreeChanged(final Collection<DataTreeCandidate> changes);  }
@Test public void testOnDataTreeChanged() throws Exception { TestKit kit = new TestKit(getSystem()); new CandidateListChangeListener(kit.getRef(), "test").init(shardDataTree); String memberName1 = "member-1"; writeNode(ENTITY_OWNERS_PATH, entityOwnersWithCandidate(ENTITY_TYPE, ENTITY_ID1, memberName1)); CandidateAdded candidateAdded = kit.expectMsgClass(CandidateAdded.class); assertEquals("getEntityId", entityPath(ENTITY_TYPE, ENTITY_ID1), candidateAdded.getEntityPath()); assertEquals("getNewCandidate", memberName1, candidateAdded.getNewCandidate()); assertEquals("getAllCandidates", ImmutableSet.of(memberName1), ImmutableSet.copyOf(candidateAdded.getAllCandidates())); writeNode(ENTITY_OWNERS_PATH, entityOwnersWithCandidate(ENTITY_TYPE, ENTITY_ID1, memberName1)); kit.expectNoMessage(Duration.ofMillis(500)); String memberName2 = "member-2"; writeNode(ENTITY_OWNERS_PATH, entityOwnersWithCandidate(ENTITY_TYPE, ENTITY_ID1, memberName2)); candidateAdded = kit.expectMsgClass(CandidateAdded.class); assertEquals("getEntityId", entityPath(ENTITY_TYPE, ENTITY_ID1), candidateAdded.getEntityPath()); assertEquals("getNewCandidate", memberName2, candidateAdded.getNewCandidate()); assertEquals("getAllCandidates", ImmutableSet.of(memberName1, memberName2), ImmutableSet.copyOf(candidateAdded.getAllCandidates())); writeNode(ENTITY_OWNERS_PATH, entityOwnersWithCandidate(ENTITY_TYPE, ENTITY_ID2, memberName1)); candidateAdded = kit.expectMsgClass(CandidateAdded.class); assertEquals("getEntityId", entityPath(ENTITY_TYPE, ENTITY_ID2), candidateAdded.getEntityPath()); assertEquals("getNewCandidate", memberName1, candidateAdded.getNewCandidate()); assertEquals("getAllCandidates", ImmutableSet.of(memberName1), ImmutableSet.copyOf(candidateAdded.getAllCandidates())); deleteNode(candidatePath(ENTITY_TYPE, ENTITY_ID1, memberName1)); CandidateRemoved candidateRemoved = kit.expectMsgClass(CandidateRemoved.class); assertEquals("getEntityId", entityPath(ENTITY_TYPE, ENTITY_ID1), candidateRemoved.getEntityPath()); assertEquals("getRemovedCandidate", memberName1, candidateRemoved.getRemovedCandidate()); assertEquals("getRemainingCandidates", ImmutableSet.of(memberName2), ImmutableSet.copyOf(candidateRemoved.getRemainingCandidates())); deleteNode(candidatePath(ENTITY_TYPE, ENTITY_ID1, memberName2)); candidateRemoved = kit.expectMsgClass(CandidateRemoved.class); assertEquals("getEntityId", entityPath(ENTITY_TYPE, ENTITY_ID1), candidateRemoved.getEntityPath()); assertEquals("getRemovedCandidate", memberName2, candidateRemoved.getRemovedCandidate()); assertEquals("getRemainingCandidates", ImmutableSet.of(), ImmutableSet.copyOf(candidateRemoved.getRemainingCandidates())); }