Example usage for org.dom4j DocumentHelper createElement

List of usage examples for org.dom4j DocumentHelper createElement

Introduction

In this page you can find the example usage for org.dom4j DocumentHelper createElement.

Prototype

public static Element createElement(String name) 

Source Link

Usage

From source file:com.adspore.splat.xep0060.PubSubEngine.java

License:Open Source License

private static IQ getPublishedItems(PubSubService service, IQ iq, Element itemsElement) {
    String nodeID = itemsElement.attributeValue("node");
    String subID = itemsElement.attributeValue("subid");
    Node node;/*from  ww w. j ava  2s .  c om*/
    if (nodeID == null) {
        // User must specify a leaf node ID so return a nodeid-required error
        Element pubsubError = DocumentHelper
                .createElement(QName.get("nodeid-required", "http://jabber.org/protocol/pubsub#errors"));
        return createErrorPacket(iq, PacketError.Condition.bad_request, pubsubError);
    } else {
        // Look for the specified node
        node = service.getNode(nodeID);
        if (node == null) {
            // Node does not exist. Return item-not-found error
            return createErrorPacket(iq, PacketError.Condition.item_not_found, null);
        }
    }
    if (node.isCollectionNode()) {
        // Node is a collection node. Return feature-not-implemented error
        Element pubsubError = DocumentHelper
                .createElement(QName.get("unsupported", "http://jabber.org/protocol/pubsub#errors"));
        pubsubError.addAttribute("feature", "retrieve-items");
        return createErrorPacket(iq, PacketError.Condition.feature_not_implemented, pubsubError);
    }
    // Check if sender and subscriber JIDs match or if a valid "trusted proxy" is being used
    JID subscriberJID = iq.getFrom();
    // TODO Assumed that the owner of the subscription is the bare JID of the subscription JID. Waiting StPeter answer for explicit field.
    JID owner = new JID(subscriberJID.getNode(), subscriberJID.getDomain(), null, true);
    // Check if the node's access model allows the subscription to proceed
    AccessModel accessModel = node.getAccessModel();
    if (!accessModel.canAccessItems(node, owner, subscriberJID)) {
        return createErrorPacket(iq, accessModel.getSubsriptionError(),
                accessModel.getSubsriptionErrorDetail());
    }
    // Check that the requester is not an outcast
    NodeAffiliate affiliate = node.getAffiliate(owner);
    if (affiliate != null && affiliate.getAffiliation() == NodeAffiliate.Affiliation.outcast) {
        return createErrorPacket(iq, PacketError.Condition.forbidden, null);
    }

    // Get the user's subscription
    NodeSubscription subscription = null;
    if (node.isMultipleSubscriptionsEnabled() && (node.getSubscriptions(owner).size() > 1)) {
        if (subID == null) {
            // No subid was specified and the node supports multiple subscriptions and the user
            // has multiple subscriptions
            Element pubsubError = DocumentHelper
                    .createElement(QName.get("subid-required", "http://jabber.org/protocol/pubsub#errors"));
            return createErrorPacket(iq, PacketError.Condition.bad_request, pubsubError);
        } else {
            // Check if the specified subID belongs to an existing node subscription
            subscription = node.getSubscription(subID);
            if (subscription == null) {
                Element pubsubError = DocumentHelper
                        .createElement(QName.get("invalid-subid", "http://jabber.org/protocol/pubsub#errors"));
                return createErrorPacket(iq, PacketError.Condition.not_acceptable, pubsubError);
            }
        }
    }

    if (subscription != null && !subscription.isActive()) {
        Element pubsubError = DocumentHelper
                .createElement(QName.get("not-subscribed", "http://jabber.org/protocol/pubsub#errors"));
        return createErrorPacket(iq, PacketError.Condition.not_authorized, pubsubError);
    }

    LeafNode leafNode = (LeafNode) node;
    // Get list of items to send to the user
    boolean forceToIncludePayload = false;
    List<PublishedItem> items;
    String max_items = itemsElement.attributeValue("max_items");
    int recentItems = 0;
    if (max_items != null) {
        try {
            // Parse the recent number of items requested
            recentItems = Integer.parseInt(max_items);
        } catch (NumberFormatException e) {
            // There was an error parsing the number so assume that all items were requested
            Log.warn("Assuming that all items were requested", e);
            max_items = null;
        }
    }
    if (max_items != null) {
        // Get the N most recent published items
        items = new ArrayList<PublishedItem>(leafNode.getPublishedItems(recentItems));
    } else {
        List requestedItems = itemsElement.elements("item");
        if (requestedItems.isEmpty()) {
            // Get all the active items that were published to the node
            items = new ArrayList<PublishedItem>(leafNode.getPublishedItems());
        } else {
            items = new ArrayList<PublishedItem>();
            // Indicate that payload should be included (if exists) no matter
            // the node configuration
            forceToIncludePayload = true;
            // Get the items as requested by the user
            for (Iterator it = requestedItems.iterator(); it.hasNext();) {
                Element element = (Element) it.next();
                String itemID = element.attributeValue("id");
                PublishedItem item = leafNode.getPublishedItem(itemID);
                if (item != null) {
                    items.add(item);
                }
            }
        }
    }

    if (subscription != null && subscription.getKeyword() != null) {
        // Filter items that do not match the subscription keyword
        for (Iterator<PublishedItem> it = items.iterator(); it.hasNext();) {
            PublishedItem item = it.next();
            if (!subscription.isKeywordMatched(item)) {
                // Remove item that does not match keyword
                it.remove();
            }
        }
    }

    // Send items to the user
    leafNode.sendPublishedItems(iq, items, forceToIncludePayload);

    //   FIXME:  Temporary return value
    return createSuccessPacket(iq);
}

From source file:com.adspore.splat.xep0060.PubSubEngine.java

License:Open Source License

private static IQ createNode(PubSubService service, IQ iq, Element childElement, Element createElement) {
    // Get sender of the IQ packet
    JID from = iq.getFrom();/* w w w. jav  a2  s .co m*/
    // Verify that sender has permissions to create nodes
    if (!service.canCreateNode(from)) {
        // The user is not allowed to create nodes so return an error
        return createErrorPacket(iq, PacketError.Condition.forbidden, null);
    }
    DataForm completedForm = null;
    CollectionNode parentNode = null;
    String nodeID = createElement.attributeValue("node");
    String newNodeID = nodeID;
    if (nodeID == null) {
        // User requested an instant node
        if (!service.isInstantNodeSupported()) {
            // Instant nodes creation is not allowed so return an error
            Element pubsubError = DocumentHelper
                    .createElement(QName.get("nodeid-required", "http://jabber.org/protocol/pubsub#errors"));
            return createErrorPacket(iq, PacketError.Condition.not_acceptable, pubsubError);
        }
        do {
            // Create a new nodeID and make sure that the random generated string does not
            // match an existing node. Probability to match an existing node are very very low
            // but they exist :)
            newNodeID = StringUtils.randomString(15);
        } while (service.getNode(newNodeID) != null);
    }
    boolean collectionType = false;
    // Check if user requested to configure the node (using a data form)
    Element configureElement = childElement.element("configure");
    if (configureElement != null) {
        // Get the data form that contains the parent nodeID
        completedForm = getSentConfigurationForm(configureElement);
        if (completedForm != null) {
            // Calculate newNodeID when new node is affiliated with a Collection
            FormField field = completedForm.getField("pubsub#collection");
            if (field != null) {
                List<String> values = field.getValues();
                if (!values.isEmpty()) {
                    String parentNodeID = values.get(0);
                    Node tempNode = service.getNode(parentNodeID);
                    if (tempNode == null) {
                        // Requested parent node was not found so return an error
                        return createErrorPacket(iq, PacketError.Condition.item_not_found, null);
                    } else if (!tempNode.isCollectionNode()) {
                        // Requested parent node is not a collection node so return an error
                        return createErrorPacket(iq, PacketError.Condition.not_acceptable, null);
                    }
                    parentNode = (CollectionNode) tempNode;
                }
            }
            field = completedForm.getField("pubsub#node_type");
            if (field != null) {
                // Check if user requested to create a new collection node
                List<String> values = field.getValues();
                if (!values.isEmpty()) {
                    collectionType = "collection".equals(values.get(0));
                }
            }
        }
    }
    // If no parent was defined then use the root collection node
    if (parentNode == null && service.isCollectionNodesSupported()) {
        parentNode = service.getRootCollectionNode();
    }
    // Check that the requested nodeID does not exist
    Node existingNode = service.getNode(newNodeID);
    if (existingNode != null) {
        // There is a conflict since a node with the same ID already exists
        return createErrorPacket(iq, PacketError.Condition.conflict, null);
    }

    if (collectionType && !service.isCollectionNodesSupported()) {
        // Cannot create a collection node since the service doesn't support it
        Element pubsubError = DocumentHelper
                .createElement(QName.get("unsupported", "http://jabber.org/protocol/pubsub#errors"));
        pubsubError.addAttribute("feature", "collections");
        return createErrorPacket(iq, PacketError.Condition.feature_not_implemented, pubsubError);
    }

    if (parentNode != null && !collectionType) {
        // Check if requester is allowed to add a new leaf child node to the parent node
        if (!parentNode.isAssociationAllowed(from)) {
            // User is not allowed to add child leaf node to parent node. Return an error.
            return createErrorPacket(iq, PacketError.Condition.forbidden, null);
        }
        // Check if number of child leaf nodes has not been exceeded
        if (parentNode.isMaxLeafNodeReached()) {
            // Max number of child leaf nodes has been reached. Return an error.
            Element pubsubError = DocumentHelper
                    .createElement(QName.get("max-nodes-exceeded", "http://jabber.org/protocol/pubsub#errors"));
            return createErrorPacket(iq, PacketError.Condition.conflict, pubsubError);
        }
    }

    // Create and configure the node
    boolean conflict = false;
    Node newNode = null;
    try {
        // TODO Assumed that the owner of the subscription is the bare JID of the subscription JID. Waiting StPeter answer for explicit field.
        JID owner = new JID(from.getNode(), from.getDomain(), null, true);
        synchronized (newNodeID.intern()) {
            if (service.getNode(newNodeID) == null) {
                // Create the node
                if (collectionType) {
                    newNode = new CollectionNode(service, parentNode, newNodeID, from);
                } else {
                    newNode = new LeafNode(service, parentNode, newNodeID, from);
                }
                // Add the creator as the node owner
                newNode.addOwner(owner);
                // Configure and save the node to the backend store
                if (completedForm != null) {
                    newNode.configure(completedForm);
                } else {
                    newNode.saveToDB();
                }
            } else {
                conflict = true;
            }
        }
        if (conflict) {
            // There is a conflict since a node with the same ID already exists
            return createErrorPacket(iq, PacketError.Condition.conflict, null);
        } else {
            // Return success to the node owner
            IQ reply = IQ.createResultIQ(iq);
            // Include new nodeID if it has changed from the original nodeID
            if (!newNode.getNodeID().equals(nodeID)) {
                Element elem = reply.setChildElement("pubsub", "http://jabber.org/protocol/pubsub");
                elem.addElement("create").addAttribute("node", newNode.getNodeID());
            }
            return reply;
        }
    } catch (NotAcceptableException e) {
        // Node should have at least one owner. Return not-acceptable error.
        return createErrorPacket(iq, PacketError.Condition.not_acceptable, null);
    }
}

From source file:com.adspore.splat.xep0060.PubSubEngine.java

License:Open Source License

private static IQ getDefaultNodeConfiguration(PubSubService service, IQ iq, Element childElement,
        Element defaultElement) {
    String type = defaultElement.attributeValue("type");
    type = type == null ? "leaf" : type;

    boolean isLeafType = "leaf".equals(type);
    DefaultNodeConfiguration config = service.getDefaultNodeConfiguration(isLeafType);
    if (config == null) {
        // Service does not support the requested node type so return an error
        Element pubsubError = DocumentHelper
                .createElement(QName.get("unsupported", "http://jabber.org/protocol/pubsub#errors"));
        pubsubError.addAttribute("feature", isLeafType ? "leaf" : "collections");
        return createErrorPacket(iq, PacketError.Condition.feature_not_implemented, pubsubError);
    }/*  www  .j a v  a 2 s  . co  m*/

    // Return data form containing default node configuration
    IQ reply = IQ.createResultIQ(iq);
    Element replyChildElement = childElement.createCopy();
    reply.setChildElement(replyChildElement);
    replyChildElement.element("default").add(config.getConfigurationForm().getElement());
    return reply;
}

From source file:com.adspore.splat.xep0060.PubSubEngine.java

License:Open Source License

private static IQ purgeNode(PubSubService service, IQ iq, Element purgeElement) {
    String nodeID = purgeElement.attributeValue("node");
    if (nodeID == null) {
        // NodeID was not provided. Return bad-request error
        return createErrorPacket(iq, PacketError.Condition.bad_request, null);
    }//w  ww.  j a  va  2 s .c  om
    Node node = service.getNode(nodeID);
    if (node == null) {
        // Node does not exist. Return item-not-found error
        return createErrorPacket(iq, PacketError.Condition.item_not_found, null);
    }
    if (!node.isAdmin(iq.getFrom())) {
        // Requesting entity is prohibited from configuring this node. Return forbidden error
        return createErrorPacket(iq, PacketError.Condition.forbidden, null);
    }
    if (!((LeafNode) node).isPersistPublishedItems()) {
        // Node does not persist items. Return feature-not-implemented error
        Element pubsubError = DocumentHelper
                .createElement(QName.get("unsupported", "http://jabber.org/protocol/pubsub#errors"));
        pubsubError.addAttribute("feature", "persistent-items");
        return createErrorPacket(iq, PacketError.Condition.feature_not_implemented, pubsubError);
    }
    if (node.isCollectionNode()) {
        // Node is a collection node. Return feature-not-implemented error
        Element pubsubError = DocumentHelper
                .createElement(QName.get("unsupported", "http://jabber.org/protocol/pubsub#errors"));
        pubsubError.addAttribute("feature", "purge-nodes");
        return createErrorPacket(iq, PacketError.Condition.feature_not_implemented, pubsubError);
    }

    // Purge the node
    ((LeafNode) node).purge();
    return createSuccessPacket(iq);
}

From source file:com.ah.be.ls.stat.StatManager.java

private Element createFeatureElement(int featureId, String featureName) {
    Element ele = DocumentHelper.createElement("feature");
    ele.addAttribute("id", String.valueOf(featureId));
    ele.addAttribute("name", featureName);
    return ele;/*from  w ww  .  j a v  a  2  s  . c  o  m*/
}

From source file:com.ah.be.ls.stat.StatManager.java

private Element createVhmStatElement(String vhmId) {
    Element elem = DocumentHelper.createElement("stat");
    return elem.addAttribute("vhm-id", vhmId);
}

From source file:com.ah.be.ls.stat.StatManager.java

private Element createPlatformElement(String apModel) {
    Element ele = DocumentHelper.createElement("platform");
    ele.addAttribute("type", String.valueOf(apModel));
    return ele;/*from ww  w.  jav a2 s. c  o  m*/
}

From source file:com.ah.be.ls.stat.StatManager.java

private Element createL2Element(int number) {
    Element ele = DocumentHelper.createElement("L2");
    return ele.addAttribute("count", String.valueOf(number));
}

From source file:com.ah.be.ls.stat.StatManager.java

private Element createL3Element(int number) {
    Element ele = DocumentHelper.createElement("L3");
    return ele.addAttribute("count", String.valueOf(number));
}

From source file:com.ah.be.ls.stat.StatManager.java

private Element createSwitchElement(int number) {
    Element ele = DocumentHelper.createElement("SW");
    return ele.addAttribute("count", String.valueOf(number));
}