blob: 99c8b90915a52741d5a178410158aaec39c68099 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 The University of York.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Dimitrios Kolovos - initial API and implementation
******************************************************************************/
package org.eclipse.epsilon.ewl.gmf;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.epsilon.ewl.emf.AbstractContributeWizardsAction;
import org.eclipse.epsilon.ewl.emf.WorkbenchPartRefresher;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
public class ContributeGmfWizardsAction extends AbstractContributeWizardsAction {
protected EObject getEObject(Object selected) {
if (selected instanceof IGraphicalEditPart) {
IGraphicalEditPart gep = (IGraphicalEditPart) selected;
EObject semanticElement = gep.resolveSemanticElement();
if (semanticElement != null) {
return semanticElement;
}
}
return null;
}
protected EditingDomain getEditingDomain() {
if (targetPart instanceof DiagramEditor) {
return ((DiagramEditor) targetPart).getDiagramEditPart().getEditingDomain();
} else {
return null;
}
}
@Override
protected WorkbenchPartRefresher getWorkbenchPartRefresher() {
return new WorkbenchPartRefresher() {
@Override
public void refresh() {
DiagramEditor editor = (DiagramEditor) part;
EObject root = editor.getDiagram().getElement();
refresh(root);
}
protected void refresh(EObject eObject) {
List<CanonicalEditPolicy> editPolicies = CanonicalEditPolicy.getRegisteredEditPolicies(eObject);
for (Iterator<CanonicalEditPolicy> it = editPolicies.iterator(); it.hasNext();) {
CanonicalEditPolicy nextEditPolicy = it.next();
nextEditPolicy.refresh();
}
for (EObject content : eObject.eContents()) {
refresh(content);
}
}
};
}
}