/******************************************************************************* * Copyright (c) 2010-2015 Henshin developers. 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: * TU Berlin, University of Luxembourg, SES S.A. *******************************************************************************/ /** * CreateParameterMappingCommand.java * * Created 26.12.2011 - 12:17:23 */ package de.tub.tfs.henshin.editor.commands.flow_diagram; import java.util.Collection; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.CompoundCommand; import de.tub.tfs.henshin.editor.commands.SimpleAddEObjectCommand; import de.tub.tfs.henshin.model.flowcontrol.Activity; import de.tub.tfs.henshin.model.flowcontrol.FlowControlFactory; import de.tub.tfs.henshin.model.flowcontrol.FlowControlPackage; import de.tub.tfs.henshin.model.flowcontrol.FlowDiagram; import de.tub.tfs.henshin.model.flowcontrol.Parameter; import de.tub.tfs.henshin.model.flowcontrol.ParameterMapping; import de.tub.tfs.henshin.model.flowcontrol.ParameterProvider; /** * A {@link Command command} to create {@link ParameterMapping mappings} between * two parameters in a {@link FlowDiagram flow diagram}. * * @author nam * */ public class CreateParameterMappingCommand extends CompoundCommand { private Parameter src; private Parameter target; private ParameterProvider srcProvider; private ParameterProvider targetProvider; private EObject container; private ParameterMapping newMapping; private void init() { if (src != null && target != null && newMapping != null && container != null) { srcProvider = src.getProvider(); targetProvider = target.getProvider(); newMapping.setSrc(src); newMapping.setTarget(target); if (container instanceof FlowDiagram) { add(new SimpleAddEObjectCommand<FlowDiagram, ParameterMapping>( newMapping, FlowControlPackage.Literals.FLOW_DIAGRAM__PARAMETER_MAPPINGS, (FlowDiagram) container)); } else if (container instanceof Activity) { add(new SimpleAddEObjectCommand<Activity, ParameterMapping>( newMapping, FlowControlPackage.ACTIVITY__PARAMETER_MAPPINGS, (Activity) container)); } } } /** * @param newMapping * @param src * @param diagram */ public CreateParameterMappingCommand(ParameterMapping newMapping, Parameter src, FlowDiagram diagram) { this(newMapping, src, null, diagram); } public CreateParameterMappingCommand(final Parameter src, final Parameter target, EObject container) { this(FlowControlFactory.eINSTANCE.createParameterMapping(), src, target, container); } /** * @param newMapping * @param src * @param target * @param container */ public CreateParameterMappingCommand(ParameterMapping newMapping, Parameter src, Parameter target, EObject container) { super("Create Parameter Mapping"); this.newMapping = newMapping; this.src = src; this.target = target; this.container = container; init(); } /* * (non-Javadoc) * * @see org.eclipse.gef.commands.CompoundCommand#canExecute() */ @Override public boolean canExecute() { boolean sameProvider = false; boolean mappingExisted = false; if (srcProvider != null && targetProvider != null) { sameProvider = srcProvider == targetProvider; } Collection<ParameterMapping> currMappings; if (container instanceof FlowDiagram) { currMappings = ((FlowDiagram) container).getParameterMappings(); } else { currMappings = ((Activity) container).getParameterMappings(); } for (ParameterMapping m : currMappings) { if (m.getSrc() == src && m.getTarget() == target) { mappingExisted = true; break; } } return super.canExecute() && src != target && !sameProvider && !mappingExisted; } /** * @param target * the target to set */ public void setTarget(Parameter target) { this.target = target; init(); } /** * @return the src */ public Parameter getSrc() { return src; } }