package org.eclipse.gmf.examples.eclipsecon.library.diagram.edit.policies; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CompoundCommand; import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.EditPart; import org.eclipse.emf.ecore.EAnnotation; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.gef.commands.UnexecutableCommand; import org.eclipse.gmf.examples.eclipsecon.library.Employee; import org.eclipse.gmf.examples.eclipsecon.library.LibraryPackage; import org.eclipse.gmf.examples.eclipsecon.library.Shelf; import org.eclipse.gmf.examples.eclipsecon.library.diagram.edit.parts.ShelfEditPart; import org.eclipse.gmf.examples.eclipsecon.library.diagram.providers.Library07ElementTypes; import org.eclipse.gmf.runtime.diagram.ui.requests.EditCommandRequestWrapper; import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand; import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; import org.eclipse.gmf.runtime.notation.Edge; /** * @generated */ public class ShelfItemSemanticEditPolicy extends Library07BaseItemSemanticEditPolicy { /** * @generated */ protected Command getDestroyElementCommand(DestroyElementRequest req) { CompoundCommand cc = new CompoundCommand(); Collection allEdges = new ArrayList(); View view = (View) getHost().getModel(); allEdges.addAll(view.getSourceEdges()); allEdges.addAll(view.getTargetEdges()); for (Iterator it = allEdges.iterator(); it.hasNext();) { Edge nextEdge = (Edge) it.next(); EditPart nextEditPart = (EditPart) getHost().getViewer() .getEditPartRegistry().get(nextEdge); EditCommandRequestWrapper editCommandRequest = new EditCommandRequestWrapper( new DestroyElementRequest(((ShelfEditPart) getHost()) .getEditingDomain(), req.isConfirmationRequired()), Collections.EMPTY_MAP); cc.add(nextEditPart.getCommand(editCommandRequest)); } cc.add(getMSLWrapper(new DestroyElementCommand(req) { protected EObject getElementToDestroy() { View view = (View) getHost().getModel(); EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ if (annotation != null) { return view; } return super.getElementToDestroy(); } })); return cc; } /** * @generated */ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) { if (Library07ElementTypes.EmployeeShelves_3001 == req.getElementType()) { return req.getTarget() == null ? null : getCreateCompleteIncomingEmployeeShelves_3001Command(req); } return super.getCreateRelationshipCommand(req); } /** * @generated */ protected Command getCreateCompleteIncomingEmployeeShelves_3001Command( CreateRelationshipRequest req) { EObject sourceEObject = req.getSource(); EObject targetEObject = req.getTarget(); if (false == sourceEObject instanceof Employee || false == targetEObject instanceof Shelf) { return UnexecutableCommand.INSTANCE; } Employee source = (Employee) sourceEObject; Shelf target = (Shelf) targetEObject; if (!Library07BaseItemSemanticEditPolicy.LinkConstraints .canCreateEmployeeShelves_3001(source, target)) { return UnexecutableCommand.INSTANCE; } SetRequest setReq = new SetRequest(sourceEObject, LibraryPackage.eINSTANCE.getEmployee_Shelves(), target); return getMSLWrapper(new SetValueCommand(setReq)); } }