package org.jbpm.gd.common.editor;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.ui.PlatformUI;
import org.jbpm.gd.common.notation.AbstractNotationElement;
import org.jbpm.gd.common.notation.NotationElement;
import org.jbpm.gd.common.part.NotationElementGraphicalEditPart;
import org.jbpm.gd.common.part.OutlineEditPart;
public class SelectionSynchronizer extends org.eclipse.gef.ui.parts.SelectionSynchronizer {
protected EditPart convert(EditPartViewer viewer, EditPart part) {
if (viewer instanceof GraphicalViewer && part instanceof OutlineEditPart) {
part = getSelectablePartInGraphicalViewer(part);
NotationElement notationElement = ((GraphicalViewer)viewer).getEditor().getNotationElementFactory().getRegisteredNotationElementFor(part.getModel());
if (notationElement != null) {
return (EditPart)viewer.getEditPartRegistry().get(notationElement);
}
}
if (viewer instanceof TreeViewer && part instanceof NotationElementGraphicalEditPart) {
Object semanticElement = ((AbstractNotationElement)part.getModel()).getSemanticElement();
if (semanticElement != null) {
EditPart result = (EditPart)viewer.getEditPartRegistry().get(semanticElement);
while (result != null && result.getParent() != null && result.getParent().getModel() == semanticElement) {
result = result.getParent();
}
return result;
}
}
return null;
}
private EditPart getSelectablePartInGraphicalViewer(EditPart part) {
while (!isSelectablePartInGraphicalViewer(part)) {
if (part.getParent() == null) break;
part = part.getParent();
}
return part;
}
protected boolean isSelectablePartInGraphicalViewer(EditPart part) {
return true;
}
}