+ public Future<RpcResult<UnsubscribeYnlOutput>> unsubscribeYnl(final UnsubscribeYnlInput input) {
+ LOG.debug("Received unsubscribe-ynl, input: {}", input);
+
+ if (!ynlRegistrations.containsKey(input.getId())) {
+ final RpcError rpcError = RpcResultBuilder
+ .newError(ErrorType.APPLICATION, "missing-registration", "No ynl listener with this id registered.");
+ final RpcResult<UnsubscribeYnlOutput> result =
+ RpcResultBuilder.<UnsubscribeYnlOutput>failed().withRpcError(rpcError).build();
+ return Futures.immediateFuture(result);
+ }
+
+ final ListenerRegistration<YnlListener> registration = ynlRegistrations.remove(input.getId());
+ final UnsubscribeYnlOutput output = registration.getInstance().getOutput();
+
+ registration.close();
+
+ return Futures.immediateFuture(RpcResultBuilder.<UnsubscribeYnlOutput>success().withResult(output).build());
+ }
+
+ @Override
+ public Future<RpcResult<CheckPublishNotificationsOutput>> checkPublishNotifications(
+ final CheckPublishNotificationsInput input) {
+
+ final PublishNotificationsTask task = publishNotificationsTasks.get(input.getId());
+
+ if (task == null) {
+ return Futures.immediateFuture(RpcResultBuilder.success(
+ new CheckPublishNotificationsOutputBuilder().setActive(false)).build());
+ }
+
+ final CheckPublishNotificationsOutputBuilder checkPublishNotificationsOutputBuilder =
+ new CheckPublishNotificationsOutputBuilder().setActive(!task.isFinished());
+
+ if (task.getLastError() != null) {
+ final StringWriter sw = new StringWriter();
+ final PrintWriter pw = new PrintWriter(sw);
+ task.getLastError().printStackTrace(pw);
+ checkPublishNotificationsOutputBuilder.setLastError(task.getLastError().toString() + sw.toString());
+ }
+
+ final CheckPublishNotificationsOutput output =
+ checkPublishNotificationsOutputBuilder.setPublishCount(task.getCurrentNotif()).build();
+
+ return Futures.immediateFuture(RpcResultBuilder.success(output).build());