package org.eclipse.uml2.diagram.common.editpolicies; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.gef.requests.CreateRequest; import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter; import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint; import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest; import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand; import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; import org.eclipse.gmf.runtime.notation.Edge; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.uml2.diagram.common.genapi.IVisualIDRegistry; public abstract class AbstractPostCreateCommand extends AbstractTransactionalCommand { private final CreateRequest myCreateRequest; private final ViewAndElementAccess myViewAndElementAccess; private final ViewHelper myViewHelper; private final IGraphicalEditPart myHostEditPart; public AbstractPostCreateCommand(TransactionalEditingDomain domain, CreateViewAndElementRequest cvaeReq, IGraphicalEditPart hostEditPart, IVisualIDRegistry visualIDRegistry) { super(domain, null, getWorkspaceFiles(hostEditPart.getNotationView())); myCreateRequest = cvaeReq; myViewAndElementAccess = new CVAEAccess(cvaeReq); myHostEditPart = hostEditPart; myViewHelper = new ViewHelper(visualIDRegistry); } protected PreferencesHint getPreferencesHint() { return getHostEditPart().getDiagramPreferencesHint(); } protected IGraphicalEditPart getHostEditPart() { return myHostEditPart; } protected Point getRequestLocation() { return myCreateRequest.getLocation(); } protected CreateRequest getCreateRequest() { return myCreateRequest; } protected Dimension getRequestSize() { return myCreateRequest.getSize(); } protected View getCreatedView() { return myViewAndElementAccess.getCreatedView(); } protected EObject getCreatedEntity() { return myViewAndElementAccess.getCreatedEntity(); } protected ViewAndElementAccess getViewAndElementAccess() { return myViewAndElementAccess; } protected View findChildByType(View view, int visualId) { return myViewHelper.findChildByType(view, visualId); } protected Edge findOutgoingEdge(Node source, int visualId, EObject semantic) { return myViewHelper.findOutgoingEdge(source, visualId, semantic); } protected Edge findIncomingEdge(Node source, int visualId, EObject semantic) { return myViewHelper.findIncomingEdge(source, visualId, semantic); } protected static void setLocation(View view, Point location) { if (view == null || location == null) { return; } ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_X(), new Integer(location.x)); ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_Y(), new Integer(location.y)); } protected static void setSize(View view, Dimension size) { if (view == null || size == null) { return; } ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Width(), new Integer(size.width)); ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Height(), new Integer(size.height)); } public static interface ViewAndElementAccess { public View getCreatedView(); public EObject getCreatedEntity(); } private static class CVAEAccess implements ViewAndElementAccess { private final CreateViewAndElementRequest myCvaeReq; public CVAEAccess(CreateViewAndElementRequest request) { myCvaeReq = request; } private CreateElementRequestAdapter getSemanticRequestAdapter() { return myCvaeReq.getViewAndElementDescriptor().getCreateElementRequestAdapter(); } public CreateElementRequest getSemanticRequest() { return (CreateElementRequest) getSemanticRequestAdapter().getAdapter(CreateElementRequest.class); } public View getCreatedView() { return (View) myCvaeReq.getViewAndElementDescriptor().getAdapter(View.class); } public EObject getCreatedEntity() { return (EObject) getSemanticRequestAdapter().getAdapter(EObject.class); } } }