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));
}
}