package org.eclipse.uml2.diagram.common.editpolicies;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.Node;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.uml2.diagram.common.genapi.IVisualIDRegistry;
public class ViewHelper {
private final IVisualIDRegistry myVisualIDRegistry;
public ViewHelper(IVisualIDRegistry visualIDRegistry) {
myVisualIDRegistry = visualIDRegistry;
}
public View findChildByType(View view, int visualId) {
return findByTypeAndElement(view.getChildren(), visualId, null);
}
public View findChildByType(View view, int visualId, EObject semantic) {
return findByTypeAndElement(view.getChildren(), visualId, semantic);
}
public Edge findOutgoingEdge(Node source, int visualId, EObject semantic) {
return (Edge) findByTypeAndElement(source.getSourceEdges(), visualId, semantic);
}
public Edge findIncomingEdge(Node source, int visualId, EObject semantic) {
return (Edge) findByTypeAndElement(source.getTargetEdges(), visualId, semantic);
}
protected View findByTypeAndElement(List<?> views, int visualId, EObject semantic) {
for (Object next : views) {
if (next instanceof View) {
View nextView = (View) next;
if (myVisualIDRegistry.getVisualID(nextView) != visualId) {
continue;
}
if (semantic == null || semantic.equals(nextView.getElement())) {
return nextView;
}
}
}
return null;
}
}