TransitionFacadeLogicImpl.java
package org.andromda.metafacades.emf.uml22;
import java.util.Collection;
import java.util.Iterator;
import org.andromda.metafacades.uml.ActionStateFacade;
import org.andromda.metafacades.uml.FinalStateFacade;
import org.andromda.metafacades.uml.PseudostateFacade;
import org.andromda.metafacades.uml.StateVertexFacade;
import org.eclipse.uml2.uml.Action;
import org.eclipse.uml2.uml.Behavior;
import org.eclipse.uml2.uml.ConnectableElement;
import org.eclipse.uml2.uml.Constraint;
import org.eclipse.uml2.uml.Transition;
import org.eclipse.uml2.uml.Vertex;
/**
* MetafacadeLogic implementation for
* org.andromda.metafacades.uml.TransitionFacade.
*
* @see org.andromda.metafacades.uml.TransitionFacade
*/
public class TransitionFacadeLogicImpl
extends TransitionFacadeLogic
{
private static final long serialVersionUID = 34L;
/**
* @param metaObject
* @param context
*/
public TransitionFacadeLogicImpl(
final Transition metaObject,
final String context)
{
super(metaObject, context);
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleGetEffect()
*/
@Override
protected Action handleGetEffect()
{
// Effect is mapped to action, not activity
// We return the first action encountered in the activity
Action effectAction = null;
final Behavior effect = this.metaObject.getEffect();
if (effect != null)
{
final Collection<ConnectableElement> nodes = effect.getRoles();
for (final Iterator<ConnectableElement> nodesIt = nodes.iterator(); nodesIt.hasNext() && effectAction == null;)
{
final Object nextNode = nodesIt.next();
if (nextNode instanceof Action)
{
effectAction = (Action)nextNode;
}
}
}
return effectAction;
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleGetSource()
*/
@Override
protected Vertex handleGetSource()
{
return this.metaObject.getSource();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleGetTarget()
*/
@Override
protected Vertex handleGetTarget()
{
return this.metaObject.getTarget();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleGetTrigger()
*/
@Override
protected Behavior handleGetTrigger()
{
// We use the effect instead of trigger. It's the same "trick" as
// using entry instead of deferrable events
return this.metaObject.getEffect();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleGetGuard()
*/
@Override
protected Constraint handleGetGuard()
{
return this.metaObject.getGuard();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsTriggerPresent()
*/
@Override
protected boolean handleIsTriggerPresent()
{
return this.metaObject.getEffect() != null;
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsExitingDecisionPoint()
*/
@Override
protected boolean handleIsExitingDecisionPoint()
{
final StateVertexFacade sourceVertex = this.getSource();
return sourceVertex instanceof PseudostateFacade && ((PseudostateFacade)sourceVertex).isDecisionPoint();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsEnteringDecisionPoint()
*/
@Override
protected boolean handleIsEnteringDecisionPoint()
{
final StateVertexFacade target = this.getTarget();
return target instanceof PseudostateFacade && ((PseudostateFacade)target).isDecisionPoint();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsExitingActionState()
*/
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsExitingActionState()
*/
@Override
protected boolean handleIsExitingActionState()
{
return this.getSource() instanceof ActionStateFacade;
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsEnteringActionState()
*/
@Override
protected boolean handleIsEnteringActionState()
{
return this.getTarget() instanceof ActionStateFacade;
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsExitingInitialState()
*/
@Override
protected boolean handleIsExitingInitialState()
{
final StateVertexFacade sourceVertex = this.getSource();
return sourceVertex instanceof PseudostateFacade && ((PseudostateFacade)sourceVertex).isInitialState();
}
/**
* @see org.andromda.metafacades.emf.uml22.TransitionFacadeLogic#handleIsEnteringFinalState()
*/
@Override
protected boolean handleIsEnteringFinalState()
{
return this.getTarget() instanceof FinalStateFacade;
}
/**
* @return this.getTarget().getStateMachine()
* @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
*/
public Object handleGetValidationOwner()
{
return this.getTarget().getStateMachine();
}
}