/** * Copyright (c) 2013-2015 committers of YAKINDU and others. * 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: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.sct.ui.editor.editor.proposals; import org.eclipse.emf.ecore.EObject; import org.eclipse.gmf.runtime.notation.View; import org.yakindu.sct.model.sgraph.SGraphFactory; import org.yakindu.sct.model.sgraph.State; import org.yakindu.sct.model.sgraph.Transition; import org.yakindu.sct.ui.editor.modifications.AbstractSemanticModification; /** * This modification add a new outgoing transition to a new target state to a source state. * This modification will set the {@link #transitionSpecification} and {@link #stateName} if it is specified. * * @author andreas muelder - Initial contribution and API * @author terfloth - adapted to new hooks. * */ public class AddOutgoingStateModification extends AbstractSemanticModification { protected String transitionSpecification; protected String stateName; public AddOutgoingStateModification(View view) { this(view, null, null); } public AddOutgoingStateModification(View view, String transitionSpecification, String stateName) { super(); setTargetView(view); this.transitionSpecification = transitionSpecification; this.stateName = stateName; } public String getTransitionSpecification() { return transitionSpecification; } public void setTransitionSpecification(String transitionSpecification) { this.transitionSpecification = transitionSpecification; } public String getStateName() { return stateName; } public void setStateName(String stateName) { this.stateName = stateName; } @Override protected boolean check(EObject semanticObject, View view) { return semanticObject instanceof State; } @Override protected void execute(EObject semanticElement, View view) { State state = (State) semanticElement; State newState = SGraphFactory.eINSTANCE.createState(); Transition transition = SGraphFactory.eINSTANCE.createTransition(); state.getParentRegion().getVertices().add(newState); transition.setSource(state); transition.setTarget(newState); if (transitionSpecification != null) transition.setSpecification(transitionSpecification); if (stateName != null) newState.setName(stateName); } }