/*****************************************************************************
* Copyright (c) 2008 CEA LIST.
*
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Adapted code from the class diagram
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.profile.custom.policies;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.GraphicalNodeEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewAndElementRequest;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateUnspecifiedTypeConnectionRequest;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
import org.eclipse.papyrus.uml.diagram.profile.custom.helper.MultiAssociationHelper;
import org.eclipse.papyrus.uml.diagram.profile.custom.helper.MultiDependencyHelper;
import org.eclipse.papyrus.uml.diagram.profile.providers.UMLElementTypes;
/**
* This class is used to launch command to create associationClass
*
* @author Patrick Tessier
*/
public class CustomGraphicalNodeEditPolicy extends GraphicalNodeEditPolicy {
/**
* The ID for the additional parameter SOURCE_PARENT used in creation request
*/
public static final String CONNECTOR_CREATE_REQUEST_SOURCE_PARENT = "SOURCE_PARENT"; //$NON-NLS-1$
/**
* The ID for the additional parameter TARGET_PARENT used in creation request
*/
public static final String CONNECTOR_CREATE_REQUEST_TARGET_PARENT = "TARGET_PARENT"; //$NON-NLS-1$
/**
*
* {@inheritDoc}
*/
@Override
public Command getCommand(Request request) {
// we have to distinguish the case where this is an association class
if(REQ_CONNECTION_END.equals(request.getType())) {
if(request instanceof CreateConnectionViewAndElementRequest) {
// default behavior
Command c = getConnectionAndRelationshipCompleteCommand((CreateConnectionViewAndElementRequest)request);
// case of associationClass
CreateElementRequestAdapter requestAdapter = ((CreateConnectionViewAndElementRequest)request).getConnectionViewAndElementDescriptor().getCreateElementRequestAdapter();
CreateRelationshipRequest createElementRequest = (CreateRelationshipRequest)requestAdapter.getAdapter(CreateRelationshipRequest.class);
/*
* if(UMLElementTypes.AssociationClass_4017.equals(createElementRequest.getElementType())) {
* AssociationClassHelper associationClassHelper = new AssociationClassHelper(getEditingDomain());
* return associationClassHelper.getAssociationClassElementCommand(((CreateConnectionViewAndElementRequest)request), c);
*
* } else
*/if(UMLElementTypes.Dependency_4018.equals(createElementRequest.getElementType())) {
MultiDependencyHelper multiDependencyHelper = new MultiDependencyHelper(getEditingDomain());
return multiDependencyHelper.getCommand(((CreateConnectionViewAndElementRequest)request), c);
} else if(UMLElementTypes.Association_4019.equals(createElementRequest.getElementType())) {
MultiAssociationHelper multiAssociationHelper = new MultiAssociationHelper(getEditingDomain());
return multiAssociationHelper.getCommand(((CreateConnectionViewAndElementRequest)request), c);
} else {
return c;
}
}
if(request instanceof CreateConnectionViewRequest) {
Command c = getConnectionCompleteCommand((CreateConnectionViewRequest)request);
// if((((CreateConnectionViewRequest)request).getConnectionViewDescriptor().getSemanticHint().equals(((IHintedType)UMLElementTypes.Link_4023).getSemanticHint()))) {
//
// ContainmentHelper containmentHelper = new ContainmentHelper(getEditingDomain());
//
// return containmentHelper.getContainmentElementCommand((CreateConnectionViewRequest)request, c);
//
// }
} else if(request instanceof CreateUnspecifiedTypeConnectionRequest) {
return getUnspecifiedConnectionCompleteCommand((CreateUnspecifiedTypeConnectionRequest)request);
}
}
return super.getCommand(request);
}
/**
* used to obtain the transactional edit domain
*
* @return the current transactional edit domain
*/
private TransactionalEditingDomain getEditingDomain() {
return ((IGraphicalEditPart)getHost()).getEditingDomain();
}
@Override
protected Command getReconnectSourceCommand(ReconnectRequest request) {
// if(request.getConnectionEditPart() instanceof GeneralizationSetEditPart) {
// GeneralizationSetHelper generalizationSetHelper = new GeneralizationSetHelper(getEditingDomain());
// return generalizationSetHelper.getReconnectSourceCommand(request, super.getConnectableEditPart());
// }
return super.getReconnectSourceCommand(request);
}
@Override
protected Command getReconnectTargetCommand(ReconnectRequest request) {
Command command = super.getReconnectTargetCommand(request);
// if(request.getConnectionEditPart() instanceof GeneralizationSetEditPart) {
// GeneralizationSetHelper generalizationSetHelper = new GeneralizationSetHelper(getEditingDomain());
// return generalizationSetHelper.getMoveTarget(request, command, super.getConnectableEditPart(), super.getConnectionTargetAnchor(request));
// }
return command;
}
}