Search in sources :

Example 6 with DOMNode

use of org.structr.web.entity.dom.DOMNode in project structr by structr.

the class DOMNodeChildrenCommand method processMessage.

@Override
public void processMessage(final WebSocketMessage webSocketData) {
    final DOMNode node = getDOMNode(webSocketData.getId());
    if (node == null) {
        return;
    }
    final List<GraphObject> result = new LinkedList<>();
    DOMNode currentNode = (DOMNode) node.getFirstChild();
    while (currentNode != null) {
        result.add(currentNode);
        currentNode = (DOMNode) currentNode.getNextSibling();
    }
    webSocketData.setView(PropertyView.Ui);
    webSocketData.setResult(result);
    // send only over local connection
    getWebSocket().send(webSocketData, true);
}
Also used : DOMNode(org.structr.web.entity.dom.DOMNode) GraphObject(org.structr.core.GraphObject)

Example 7 with DOMNode

use of org.structr.web.entity.dom.DOMNode in project structr by structr.

the class InsertBeforeCommand method processMessage.

@Override
public void processMessage(final WebSocketMessage webSocketData) {
    final String id = webSocketData.getId();
    final Map<String, Object> nodeData = webSocketData.getNodeData();
    final String refId = (String) nodeData.get("refId");
    final String parentId = (String) nodeData.get("parentId");
    // check node to append
    if (id == null) {
        getWebSocket().send(MessageBuilder.status().code(422).message("No node to append").build(), true);
        return;
    }
    // check for parent ID
    if (parentId == null) {
        getWebSocket().send(MessageBuilder.status().code(422).message("Cannot add node without parentId").build(), true);
        return;
    }
    final DOMNode refNode = getDOMNode(refId);
    // check if parent node with given ID exists
    final DOMNode parentNode = getDOMNode(parentId);
    if (parentNode == null) {
        getWebSocket().send(MessageBuilder.status().code(404).message("Parent node not found").build(), true);
        return;
    }
    final DOMNode node = getDOMNode(id);
    try {
        // append node to parent
        if (node != null) {
            parentNode.insertBefore(node, refNode);
        }
    } catch (DOMException dex) {
        // send DOM exception
        getWebSocket().send(MessageBuilder.status().code(422).message(dex.getMessage()).build(), true);
    }
}
Also used : DOMException(org.w3c.dom.DOMException) DOMNode(org.structr.web.entity.dom.DOMNode)

Example 8 with DOMNode

use of org.structr.web.entity.dom.DOMNode in project structr by structr.

the class ReplaceDOMNodeCommand method processMessage.

@Override
public void processMessage(final WebSocketMessage webSocketData) {
    final Map<String, Object> nodeData = webSocketData.getNodeData();
    final String parentId = (String) nodeData.get("parentId");
    final String newId = (String) nodeData.get("newId");
    final String oldId = (String) nodeData.get("oldId");
    final String pageId = webSocketData.getPageId();
    if (pageId != null) {
        // check for parent ID before creating any nodes
        if (parentId == null) {
            getWebSocket().send(MessageBuilder.status().code(422).message("Cannot replace node without parentId").build(), true);
            return;
        }
        // check if parent node with given ID exists
        final DOMNode parentNode = getDOMNode(parentId);
        if (parentNode == null) {
            getWebSocket().send(MessageBuilder.status().code(404).message("Parent node not found").build(), true);
            return;
        }
        // check for old ID before creating any nodes
        if (oldId == null) {
            getWebSocket().send(MessageBuilder.status().code(422).message("Cannot replace node without oldId").build(), true);
            return;
        }
        // check if old node with given ID exists
        final DOMNode oldNode = getDOMNode(oldId);
        if (oldNode == null) {
            getWebSocket().send(MessageBuilder.status().code(404).message("Old node not found").build(), true);
            return;
        }
        // check for new ID before creating any nodes
        if (newId == null) {
            getWebSocket().send(MessageBuilder.status().code(422).message("Cannot replace node without newId").build(), true);
            return;
        }
        // check if new node with given ID exists
        final DOMNode newNode = getDOMNode(newId);
        if (newNode == null) {
            getWebSocket().send(MessageBuilder.status().code(404).message("New node not found").build(), true);
            return;
        }
        try {
            parentNode.replaceChild(newNode, oldNode);
        } catch (DOMException dex) {
            // send DOM exception
            getWebSocket().send(MessageBuilder.status().code(422).message(dex.getMessage()).build(), true);
        }
    } else {
        getWebSocket().send(MessageBuilder.status().code(422).message("Cannot replace node without pageId").build(), true);
    }
}
Also used : DOMException(org.w3c.dom.DOMException) DOMNode(org.structr.web.entity.dom.DOMNode)

Example 9 with DOMNode

use of org.structr.web.entity.dom.DOMNode in project structr by structr.

the class Importer method getSiblingHashes.

private static List<String> getSiblingHashes(final DOMNode node) {
    final List<String> siblingHashes = new LinkedList<>();
    DOMNode nextSibling = node.getNextSibling();
    while (nextSibling != null) {
        siblingHashes.add(nextSibling.getIdHashOrProperty());
        nextSibling = nextSibling.getNextSibling();
    }
    return siblingHashes;
}
Also used : DOMNode(org.structr.web.entity.dom.DOMNode) LinkedList(java.util.LinkedList)

Example 10 with DOMNode

use of org.structr.web.entity.dom.DOMNode in project structr by structr.

the class Importer method findSharedComponentByName.

public static DOMNode findSharedComponentByName(final String name) throws FrameworkException {
    if (StringUtils.isEmpty(name)) {
        return null;
    }
    final PropertyKey<Page> ownerDocumentKey = StructrApp.key(DOMNode.class, "ownerDocument");
    final PropertyKey<DOMNode> parentKey = StructrApp.key(DOMNode.class, "parent");
    for (final DOMNode n : StructrApp.getInstance().nodeQuery(DOMNode.class).andName(name).and(ownerDocumentKey, CreateComponentCommand.getOrCreateHiddenDocument()).getAsList()) {
        // only return toplevel nodes in shared components
        if (n.getProperty(parentKey) == null) {
            return n;
        }
    }
    return null;
}
Also used : Page(org.structr.web.entity.dom.Page) DOMNode(org.structr.web.entity.dom.DOMNode)

Aggregations

DOMNode (org.structr.web.entity.dom.DOMNode)61 FrameworkException (org.structr.common.error.FrameworkException)26 Tx (org.structr.core.graph.Tx)19 PropertyMap (org.structr.core.property.PropertyMap)19 Page (org.structr.web.entity.dom.Page)19 DOMException (org.w3c.dom.DOMException)16 App (org.structr.core.app.App)14 StructrApp (org.structr.core.app.StructrApp)14 SecurityContext (org.structr.common.SecurityContext)12 GraphObject (org.structr.core.GraphObject)9 NodeInterface (org.structr.core.graph.NodeInterface)9 LinkedList (java.util.LinkedList)8 Test (org.junit.Test)8 StructrUiTest (org.structr.web.StructrUiTest)8 ShadowDocument (org.structr.web.entity.dom.ShadowDocument)8 AbstractNode (org.structr.core.entity.AbstractNode)7 Template (org.structr.web.entity.dom.Template)7 Document (org.w3c.dom.Document)6 IOException (java.io.IOException)5 PropertyKey (org.structr.core.property.PropertyKey)5