package org.eclipse.emf.eef.modelingBot.helper; import java.util.Collection; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.eef.modelingBot.Action; import org.eclipse.emf.eef.modelingBot.Processing; import org.eclipse.emf.eef.modelingBot.Sequence; import org.eclipse.emf.eef.modelingBot.Wizard; import org.eclipse.emf.eef.modelingBot.EEFActions.Cancel; import org.eclipse.emf.eef.modelingBot.EEFActions.EditAction; public class EEFModelingBotHelper { public static boolean isFollowingByCancel(Action action) { Collection<EObject> followingSiblings = EMFHelper.followingSiblings(action); if (followingSiblings != null && !followingSiblings.isEmpty()) { EObject next = followingSiblings.iterator().next(); if (next instanceof Cancel) { return true; } } return false; } public static Cancel getFollowingCancelAction(Action action) { Collection<EObject> followingSiblings = EMFHelper.followingSiblings(action); if (followingSiblings != null && !followingSiblings.isEmpty()) { EObject next = followingSiblings.iterator().next(); if (next instanceof Cancel) { return (Cancel) next; } } return null; } public static EditAction getCancelPrecedingAction(Cancel action) { Collection<EObject> precedingSiblings = EMFHelper.precedingSiblings(action); if (precedingSiblings != null && !precedingSiblings.isEmpty()) { EObject prev = precedingSiblings.iterator().next(); if (prev instanceof EditAction) { return (EditAction) prev; } } return null; } public static Processing getPrecedingEditActionOrSequence(Action action) { Collection<EObject> precedingSiblings = EMFHelper.precedingSiblings(action); if (precedingSiblings != null && !precedingSiblings.isEmpty()) { for (EObject prev : precedingSiblings) { if (prev instanceof EditAction || prev instanceof Sequence) { return (Processing) prev; } } } return null; } public static boolean isWizard(Processing processing) { return processing != null && processing instanceof Wizard; } public static int getNumberOfActionToUndo(Processing processing) { EList<EObject> eContents = processing.eContents(); int actionstoUndo = 0; for (EObject eObject : eContents) { if (eObject instanceof EditAction && !(eObject instanceof Cancel)) { actionstoUndo++; } else if (eObject instanceof Wizard) { actionstoUndo += getNumberOfActionToUndo((Processing) eObject); } } return actionstoUndo; } public static int getNumberOfActionToCancel(Processing processing) { EList<EObject> eContents = processing.eContents(); int actionstoCancel = 0; for (EObject eObject : eContents) { if (eObject instanceof EditAction && !(eObject instanceof Cancel)) { actionstoCancel++; } } return actionstoCancel; } }