+ LOG.debug("Received unsubscribe-dtcl");
+
+ if (idIntsListener == null || dtclReg == null) {
+ final RpcError error = RpcResultBuilder.newError(
+ ErrorType.RPC, "Dtcl missing.", "No DataTreeChangeListener registered.");
+ return Futures.immediateFuture(RpcResultBuilder.<UnsubscribeDtclOutput>failed().withRpcError(error).build());
+ }
+
+ final DOMDataReadOnlyTransaction rTx = domDataBroker.newReadOnlyTransaction();
+ try {
+ if (dtclReg != null) {
+ dtclReg.close();
+ dtclReg = null;
+ }
+
+ final Optional<NormalizedNode<?, ?>> readResult =
+ rTx.read(CONTROLLER_CONFIG, WriteTransactionsHandler.ID_INT_YID).checkedGet();
+
+ if (!readResult.isPresent()) {
+ final RpcError error = RpcResultBuilder.newError(
+ ErrorType.APPLICATION, "Final read empty.", "No data read from id-ints list.");
+ return Futures.immediateFuture(RpcResultBuilder.<UnsubscribeDtclOutput>failed()
+ .withRpcError(error).build());
+ }
+
+ return Futures.immediateFuture(
+ RpcResultBuilder.success(new UnsubscribeDtclOutputBuilder()
+ .setCopyMatches(idIntsListener.checkEqual(readResult.get()))).build());
+
+ } catch (final ReadFailedException e) {
+ final RpcError error = RpcResultBuilder.newError(
+ ErrorType.APPLICATION, "Read failed.", "Final read from id-ints failed.");
+ return Futures.immediateFuture(RpcResultBuilder.<UnsubscribeDtclOutput>failed()
+ .withRpcError(error).build());
+
+ }