package org.eclipse.uml2.diagram.common.actions;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.ui.action.ValidateAction;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
public class GMFValidateAction extends ValidateAction {
public GMFValidateAction(IWorkbenchPage workbenchPage) {
setActiveWorkbenchPart(workbenchPage.getActivePart());
IEditorPart activeEditor = workbenchPage.getActiveEditor();
ISelectionProvider selectionProvider = activeEditor instanceof ISelectionProvider ? (ISelectionProvider) activeEditor : activeEditor.getEditorSite().getSelectionProvider();
selectionProvider.addSelectionChangedListener(this);
}
@Override
public void setActiveWorkbenchPart(IWorkbenchPart workbenchPart) {
super.setActiveWorkbenchPart(workbenchPart);
if (workbenchPart instanceof DiagramDocumentEditor) {
domain = ((DiagramDocumentEditor) workbenchPart).getEditingDomain();
}
}
@Override
public boolean updateSelection(IStructuredSelection selection) {
return super.updateSelection(transformSelection(selection));
}
private IStructuredSelection transformSelection(IStructuredSelection selection) {
List<EObject> elements = new ArrayList<EObject>();
for (Object next : selection.toList()) {
EObject transformed = transformSelectedElement(next);
if (transformed != null) {
elements.add(transformed);
}
}
return new StructuredSelection(elements);
}
private EObject transformSelectedElement(Object next) {
if (next instanceof IGraphicalEditPart) {
return ((IGraphicalEditPart) next).getNotationView().getElement();
} else if (next instanceof EObject) {
return (EObject) next;
}
return null;
}
}