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);
}
}
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);
}
}
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);
}
}
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);
}
}
}
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);
}
Aggregations