package org.eclipse.uml2.diagram.sequence.edit.policies;
import java.util.Iterator;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
public class AnchorUtil {
public static IFigure findPrevFigure(GraphicalEditPart anchor) {
IFigure anchorFigure = anchor.getFigure();
if (toSearchAnchorInsideEditPart((GraphicalEditPart)anchor.getParent(), anchorFigure.getParent())) {
GraphicalEditPart prevPart = findPrevPart(anchor);
return prevPart == null ? null : prevPart.getFigure();
}
else {
return findPrevFigure(anchorFigure);
}
}
public static boolean toSearchAnchorInsideEditPart(GraphicalEditPart container, IFigure containerFigure) {
return true;
}
public static IFigure findNextFigure(GraphicalEditPart anchor) {
IFigure anchorFigure = anchor.getFigure();
if (toSearchAnchorInsideEditPart((GraphicalEditPart)anchor.getParent(), anchorFigure.getParent())) {
GraphicalEditPart nextPart = findNextPart(anchor);
return nextPart == null ? null : nextPart.getFigure();
}
else {
return findNextFigure(anchorFigure);
}
}
private static IFigure findPrevFigure(IFigure figure) {
IFigure prevChild = null;
for (Iterator it = figure.getParent().getChildren().iterator(); it.hasNext();) {
IFigure child = (IFigure) it.next();
if (child == figure) {
return prevChild;
}
prevChild = child;
}
return null;
}
private static IFigure findNextFigure(IFigure figure) {
for (Iterator it = figure.getParent().getChildren().iterator(); it.hasNext();) {
IFigure child = (IFigure) it.next();
if (child == figure) {
if (it.hasNext()) {
return (IFigure) it.next();
}
return null;
}
}
return null;
}
public static GraphicalEditPart findPrevPart(GraphicalEditPart part) {
EditPart prevChild = null;
for (Iterator it = part.getParent().getChildren().iterator(); it.hasNext();) {
EditPart child = (EditPart) it.next();
if (child == part) {
return (GraphicalEditPart) prevChild;
}
prevChild = child;
}
return null;
}
public static GraphicalEditPart findNextPart(GraphicalEditPart part) {
for (Iterator it = part.getParent().getChildren().iterator(); it.hasNext();) {
EditPart child = (EditPart) it.next();
if (child == part) {
if (it.hasNext()) {
return (GraphicalEditPart) it.next();
}
}
}
return null;
}
}