/*****************************************************************************
* Copyright (c) 2010 Atos Origin.
*
*
* 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:
* Atos Origin - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.activity.edit.dialogs;
import java.util.Set;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.papyrus.uml.diagram.activity.part.Messages;
import org.eclipse.papyrus.uml.diagram.activity.preferences.IActivityPreferenceConstants;
import org.eclipse.papyrus.uml.diagram.activity.providers.UMLElementTypes;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.uml2.uml.Activity;
import org.eclipse.uml2.uml.Behavior;
import org.eclipse.uml2.uml.BehavioredClassifier;
import org.eclipse.uml2.uml.InvocationAction;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.Parameter;
import org.eclipse.uml2.uml.ParameterDirectionKind;
import org.eclipse.uml2.uml.UMLPackage;
import com.google.common.collect.Sets;
/**
* This class provides a dialog to initialize a CallBehaviorAction at its
* creation.
*/
public class CreateCallBehaviorActionDialog extends CreateCallActionDialog {
/**
* Create a new dialog to initialize a CallBehaviorAction.
*
* @param shell
* parent shell
* @param owner
* the activity that owns the action
*/
public CreateCallBehaviorActionDialog(Shell shell, Activity owner,InvocationAction newAction) {
super(shell, owner,newAction);
}
/**
* Get the id of the preference storing whether selection is the default
* choice.
*
* @return preference id
*/
protected String getSelectionIsDefaultPreference() {
return IActivityPreferenceConstants.PREF_NEW_CALL_BEHAVIOR_ACTION_SELECT_AS_DEFAULT;
}
/**
* Get the id of the preference storing the last selected owner.
*
* @return preference id
*/
protected String getCreationDefaultOwnerPreference() {
return IActivityPreferenceConstants.PREF_NEW_CALL_BEHAVIOR_ACTION_CREATION_OWNER;
}
/**
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateInvocationActionDialog#getInvocationCreationSectionTitle()
*/
@Override
protected String getInvocationCreationSectionTitle() {
return Messages.CreateCallActionDialog_BehaviorInvocationCreationTitle;
}
/**
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateInvocationActionDialog#getInvocationCreationSectionHelp()
*/
@Override
protected String getInvocationCreationSectionHelp() {
return Messages.CreateCallActionDialog_BehaviorInvocationCreationHelp;
}
/**
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateInvocationActionDialog#getInvocationSelectionSectionTitle()
*/
@Override
protected String getInvocationSelectionSectionTitle() {
return Messages.CreateCallActionDialog_BehaviorInvocationSelectionTitle;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getTitle()
*/
@Override
protected String getTitle() {
return Messages.CreateCallActionDialog_BehaviorTitle;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getInvocationFeature()
*/
@Override
protected EReference getInvocationFeature() {
return UMLPackage.eINSTANCE.getCallBehaviorAction_Behavior();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#hasOutParameters(org.eclipse.emf.ecore.EObject)
*/
@Override
protected boolean hasOutParameters(EObject invokedObject) {
if(invokedObject instanceof Behavior) {
for(Parameter param : ((Behavior)invokedObject).getOwnedParameters()) {
if(ParameterDirectionKind.INOUT_LITERAL.equals(param.getDirection()) || ParameterDirectionKind.OUT_LITERAL.equals(param.getDirection())) {
return true;
}
}
}
return false;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getPossibleInvokedParents()
*/
@Override
protected Set<? extends EClassifier> getPossibleInvokedParents(EObject actionParent) {
return Sets.newHashSet(UMLPackage.Literals.PACKAGE, UMLPackage.Literals.BEHAVIORED_CLASSIFIER);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateInvocationActionDialog#isPossibleInvokedParent(org.eclipse.emf.ecore.EObject)
*/
@Override
protected boolean isPossibleInvokedParent(EObject parent) {
return parent instanceof Package || parent instanceof BehavioredClassifier;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getPossibleInvokedTypes()
*/
@Override
protected EClass[] getPossibleInvokedTypes() {
return new EClass[]{ UMLPackage.eINSTANCE.getActivity(), UMLPackage.eINSTANCE.getInteraction(), UMLPackage.eINSTANCE.getOpaqueBehavior(), UMLPackage.eINSTANCE.getFunctionBehavior(), UMLPackage.eINSTANCE.getStateMachine(), UMLPackage.eINSTANCE.getProtocolStateMachine() };
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getCreationLabel()
*/
@Override
protected String getCreationLabel() {
return Messages.CreateCallActionDialog_CreateBehavior;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getSelectionLabel()
*/
@Override
protected String getSelectionLabel() {
return Messages.CreateCallActionDialog_SelectBehavior;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.CreateCallActionDialog#getParentImage()
*/
@Override
protected Image getParentImage() {
return UMLElementTypes.getImage(UMLPackage.eINSTANCE.getPackage());
}
}