Search in sources :

Example 1 with Node

use of org.eclipse.n4js.smith.ui.graph.Node in project n4js by eclipse.

the class ASTGraphProvider method getConnectedEdgesForEObjectSingleCase.

private void getConnectedEdgesForEObjectSingleCase(Node node, final List<Node> allNodes, final List<Edge> result, EReference currRef, final Object target) {
    final Node targetNode = GraphUtils.getNodeForElement(target, allNodes);
    final String targetNodeExternal;
    if (targetNode == null && ((EObject) target).eIsProxy())
        targetNodeExternal = EcoreUtil.getURI((EObject) target).toString();
    else
        targetNodeExternal = null;
    if (targetNode != null || targetNodeExternal != null) {
        Edge edge = new Edge(currRef.getName(), !currRef.isContainment(), node, asCollection(targetNode), asCollection(targetNodeExternal));
        result.add(edge);
    }
}
Also used : ILeafNode(org.eclipse.xtext.nodemodel.ILeafNode) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Node(org.eclipse.n4js.smith.ui.graph.Node) EObject(org.eclipse.emf.ecore.EObject) Edge(org.eclipse.n4js.smith.ui.graph.Edge)

Example 2 with Node

use of org.eclipse.n4js.smith.ui.graph.Node in project n4js by eclipse.

the class ASTGraphProvider method getConnectedEdgesForResource.

private void getConnectedEdgesForResource(Node node, final List<Node> allNodes, final List<Edge> result, final Resource res) {
    final List<EObject> targets = getContentsNoResolve(res);
    final List<Node> targetNodes = GraphUtils.getNodesForElements(targets, allNodes);
    if (!targetNodes.isEmpty()) {
        Edge edge = new Edge("contents", false, node, targetNodes, Collections.emptyList());
        result.add(edge);
    }
}
Also used : EObject(org.eclipse.emf.ecore.EObject) ILeafNode(org.eclipse.xtext.nodemodel.ILeafNode) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Node(org.eclipse.n4js.smith.ui.graph.Node) Edge(org.eclipse.n4js.smith.ui.graph.Edge)

Example 3 with Node

use of org.eclipse.n4js.smith.ui.graph.Node in project n4js by eclipse.

the class ASTGraphProvider method getConnectedEdgesForEObjectManyCase.

private void getConnectedEdgesForEObjectManyCase(Node node, final List<Node> allNodes, final List<Edge> result, EReference currRef, final Object targets) {
    final List<Node> targetNodes = new ArrayList<>();
    final List<String> targetNodesExternal = new ArrayList<>();
    for (Object currTarget : (Collection<?>) targets) {
        final Node currTargetNode = GraphUtils.getNodeForElement(currTarget, allNodes);
        if (currTargetNode != null)
            targetNodes.add(currTargetNode);
        else if (currTarget instanceof EObject && ((EObject) currTarget).eIsProxy())
            targetNodesExternal.add(EcoreUtil.getURI((EObject) currTarget).toString());
    }
    if (!targetNodes.isEmpty() || !targetNodesExternal.isEmpty()) {
        Edge edge = new Edge(currRef.getName(), !currRef.isContainment(), node, targetNodes, targetNodesExternal);
        result.add(edge);
    }
}
Also used : ILeafNode(org.eclipse.xtext.nodemodel.ILeafNode) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Node(org.eclipse.n4js.smith.ui.graph.Node) EObject(org.eclipse.emf.ecore.EObject) ArrayList(java.util.ArrayList) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) Edge(org.eclipse.n4js.smith.ui.graph.Edge)

Example 4 with Node

use of org.eclipse.n4js.smith.ui.graph.Node in project n4js by eclipse.

the class ASTGraphProvider method getConnectedEdgesForEObject.

/**
 * Add outgoing references
 */
private void getConnectedEdgesForEObject(Node node, final List<Node> allNodes, final List<Edge> result, final EObject eobj) {
    for (EReference currRef : eobj.eClass().getEAllReferences()) {
        if (!currRef.isDerived() && !currRef.isContainer()) {
            if (currRef.isMany()) {
                final Object targets = eobj.eGet(currRef, false);
                if (targets instanceof Collection<?>) {
                    getConnectedEdgesForEObjectManyCase(node, allNodes, result, currRef, targets);
                }
            } else {
                final Object target = eobj.eGet(currRef, false);
                if (target instanceof EObject) {
                    getConnectedEdgesForEObjectSingleCase(node, allNodes, result, currRef, target);
                }
            }
        }
    }
    // add reference to containing Resource if immediate container is not in graph
    // (required when showing lower-level objects while hiding their ancestors)
    Node nodeForElement = GraphUtils.getNodeForElement(eobj.eContainer(), allNodes);
    if (eobj.eResource() != null && eobj.eContainer() != null && nodeForElement == null) {
        final Node nodeForResource = GraphUtils.getNodeForElement(eobj.eResource(), allNodes);
        if (nodeForResource != null) {
            Edge edge = new Edge("<... containment omitted ...>", // not a cross-link
            false, nodeForResource, Collections.singletonList(node), Collections.emptyList());
            result.add(edge);
        }
    }
}
Also used : EObject(org.eclipse.emf.ecore.EObject) ILeafNode(org.eclipse.xtext.nodemodel.ILeafNode) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Node(org.eclipse.n4js.smith.ui.graph.Node) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) Edge(org.eclipse.n4js.smith.ui.graph.Edge) EReference(org.eclipse.emf.ecore.EReference)

Example 5 with Node

use of org.eclipse.n4js.smith.ui.graph.Node in project n4js by eclipse.

the class ASTGraphProvider method getNode.

@Override
public Node getNode(Object element) {
    final String type;
    final String name;
    final String desc;
    if (element instanceof Resource) {
        // case: Resource
        final URI uri = ((Resource) element).getURI();
        type = "Resource";
        name = uri != null ? uri.lastSegment() : null;
        desc = null;
    } else if (element instanceof EObject) {
        final EObject eobj = (EObject) element;
        if (eobj.eIsProxy()) {
            // case: proxy
            type = "PROXY(" + eobj.eClass().getName() + ")";
            name = null;
            desc = "proxy URI:\n" + EcoreUtil.getURI(eobj);
        } else {
            // case: non-proxy EObject
            type = eobj.eClass().getName();
            name = getName(eobj);
            desc = getDescription(eobj);
        }
    } else {
        // case: any POJO
        type = element.getClass().getSimpleName();
        name = null;
        desc = null;
    }
    final String title = type + (name != null ? " " + name : "");
    return new Node(element, title, desc);
}
Also used : EObject(org.eclipse.emf.ecore.EObject) ILeafNode(org.eclipse.xtext.nodemodel.ILeafNode) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Node(org.eclipse.n4js.smith.ui.graph.Node) Resource(org.eclipse.emf.ecore.resource.Resource) URI(org.eclipse.emf.common.util.URI)

Aggregations

EObject (org.eclipse.emf.ecore.EObject)5 Node (org.eclipse.n4js.smith.ui.graph.Node)5 ICompositeNode (org.eclipse.xtext.nodemodel.ICompositeNode)5 ILeafNode (org.eclipse.xtext.nodemodel.ILeafNode)5 Edge (org.eclipse.n4js.smith.ui.graph.Edge)4 Collection (java.util.Collection)2 ArrayList (java.util.ArrayList)1 URI (org.eclipse.emf.common.util.URI)1 EReference (org.eclipse.emf.ecore.EReference)1 Resource (org.eclipse.emf.ecore.resource.Resource)1