All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mir.reactions.personsToFamilies.InsertedPersonReaction Maven / Gradle / Ivy

package mir.reactions.personsToFamilies;

import edu.kit.ipd.sdq.metamodels.persons.Person;
import edu.kit.ipd.sdq.metamodels.persons.PersonRegister;
import java.util.function.Function;
import mir.routines.personsToFamilies.PersonsToFamiliesRoutinesFacade;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.xbase.lib.Extension;
import tools.vitruv.change.atomic.EChange;
import tools.vitruv.change.atomic.feature.reference.InsertEReference;
import tools.vitruv.dsls.reactions.runtime.reactions.AbstractReaction;
import tools.vitruv.dsls.reactions.runtime.routines.AbstractRoutine;
import tools.vitruv.dsls.reactions.runtime.routines.RoutinesFacade;
import tools.vitruv.dsls.reactions.runtime.state.ReactionExecutionState;

@SuppressWarnings("all")
public class InsertedPersonReaction extends AbstractReaction {
  private InsertEReference insertChange;

  public InsertedPersonReaction(final Function routinesFacadeGenerator) {
    super(routinesFacadeGenerator);
  }

  private static class Call extends AbstractRoutine.Update {
    public Call(final ReactionExecutionState reactionExecutionState) {
      super(reactionExecutionState);
    }

    public void updateModels(final InsertEReference insertChange, final PersonRegister affectedEObject, final EReference affectedFeature, final Person newValue, final int index, @Extension final PersonsToFamiliesRoutinesFacade _routinesFacade) {
      _routinesFacade.insertAsParentOrChild(newValue);
    }
  }

  public boolean isCurrentChangeMatchingTrigger(final EChange change) {
    if (!(change instanceof InsertEReference)) {
    	return false;
    }
    
    InsertEReference _localTypedChange = (InsertEReference) change;
    if (!(_localTypedChange.getAffectedElement() instanceof edu.kit.ipd.sdq.metamodels.persons.PersonRegister)) {
    	return false;
    }
    if (!_localTypedChange.getAffectedFeature().getName().equals("persons")) {
    	return false;
    }
    if (!(_localTypedChange.getNewValue() instanceof edu.kit.ipd.sdq.metamodels.persons.Person)) {
    	return false;
    }
    this.insertChange = (InsertEReference) change;
    return true;
  }

  public void executeReaction(final EChange change, final ReactionExecutionState executionState, final RoutinesFacade routinesFacadeUntyped) {
    mir.routines.personsToFamilies.PersonsToFamiliesRoutinesFacade routinesFacade = (mir.routines.personsToFamilies.PersonsToFamiliesRoutinesFacade)routinesFacadeUntyped;
    if (!isCurrentChangeMatchingTrigger(change)) {
    	return;
    }
    edu.kit.ipd.sdq.metamodels.persons.PersonRegister affectedEObject = (edu.kit.ipd.sdq.metamodels.persons.PersonRegister)insertChange.getAffectedElement();
    EReference affectedFeature = insertChange.getAffectedFeature();
    edu.kit.ipd.sdq.metamodels.persons.Person newValue = (edu.kit.ipd.sdq.metamodels.persons.Person)insertChange.getNewValue();
    int index = insertChange.getIndex();
    if (getLogger().isTraceEnabled()) {
    	getLogger().trace("Passed complete precondition check of Reaction " + this.getClass().getName());
    }
    
    new mir.reactions.personsToFamilies.InsertedPersonReaction.Call(executionState).updateModels(insertChange, affectedEObject, affectedFeature, newValue, index, routinesFacade);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy