private void addDeleteNodeNotifications(String node, List<Packet> notifications)
     throws Exception {
   ResultSet<NodeSubscription> subscriptions = channelManager.getNodeSubscriptionListeners(node);
   Message notification = createNodeDeletedNotificationMessage(node);
   if (subscriptions != null) {
     for (NodeSubscription subscription : subscriptions) {
       notification.setTo(subscription.getListener().toString());
       notifications.add(notification.createCopy());
     }
   }
   Collection<JID> adminUsers = Configuration.getInstance().getAdminUsers();
   for (JID admin : adminUsers) {
     notification.setTo(admin);
     notifications.add(notification.createCopy());
   }
 }
  private void addDeleteItemNotifications(String node, String itemId, List<Packet> notifications)
      throws NodeStoreException {
    ResultSet<NodeSubscription> subscriptions = channelManager.getNodeSubscriptionListeners(node);
    Message notification = createItemDeleteNotificationMessage(node, itemId);
    if (subscriptions != null) {
      for (NodeSubscription subscription : subscriptions) {
        if (subscription.getSubscription().equals(Subscriptions.subscribed)) {
          notification.setTo(subscription.getListener().toString());
          notifications.add(notification);
        }
      }
    }

    Collection<JID> adminUsers = Configuration.getInstance().getAdminUsers();
    for (JID admin : adminUsers) {
      notification.setTo(admin);
      notifications.add(notification);
    }
  }
  private void notifySubscribers(HashMap<String, String> configuration)
      throws NodeStoreException, InterruptedException {
    ResultSet<NodeSubscription> subscribers = channelManager.getNodeSubscriptionListeners(node);
    Document document = getDocumentHelper();
    Element message = document.addElement("message");
    message.addAttribute("remote-server-discover", "false");
    Element event = message.addElement("event");
    Element configurationElement = event.addElement("configuration");
    configurationElement.addAttribute("node", node);
    event.addNamespace("", Event.NAMESPACE);
    message.addAttribute("from", request.getTo().toString());
    message.addAttribute("type", "headline");
    Message rootElement = new Message(message);

    Element dataForm = configurationElement.addElement("x");
    dataForm.addAttribute("type", "result");
    dataForm.addNamespace("", DataForm.NAMESPACE);
    DataForm df = new DataForm(dataForm);

    FormField field;
    for (Map.Entry<String, String> entry : configuration.entrySet()) {
      String key = entry.getKey();
      Object value = entry.getValue();
      field = df.addField(key, null, null);
      field.addValue(value);
      // ...
    }

    for (NodeSubscription subscriber : subscribers) {
      Message notification = rootElement.createCopy();
      notification.setTo(subscriber.getListener());
      outQueue.put(notification);
    }

    Collection<JID> admins = getAdminUsers();
    for (JID admin : admins) {
      Message notification = rootElement.createCopy();
      notification.setTo(admin);
      outQueue.put(notification);
    }
  }
  private void addUnsubscribeFromNodeNotifications(
      JID userJid, String node, List<Packet> notifications) throws NodeStoreException {

    ResultSet<NodeSubscription> subscribers = channelManager.getNodeSubscriptionListeners(node);

    Message messagePacket = createUnsubscribeNotification(userJid, node);
    if (subscribers != null) {
      for (NodeSubscription subscriber : subscribers) {
        Message notification = messagePacket.createCopy();
        notification.setTo(subscriber.getListener());
        notifications.add(notification);
      }
    }

    Collection<JID> adminUsers = Configuration.getInstance().getAdminUsers();
    for (JID admin : adminUsers) {
      Message notification = messagePacket.createCopy();
      notification.setTo(admin);
      notifications.add(notification);
    }
  }