001package org.andromda.metafacades.uml14;
002
003import java.util.Collection;
004import java.util.Iterator;
005import org.omg.uml.behavioralelements.statemachines.State;
006import org.omg.uml.behavioralelements.statemachines.Transition;
007import org.omg.uml.behavioralelements.statemachines.Event;
008
009/**
010 * MetafacadeLogic implementation.
011 *
012 * @see org.andromda.metafacades.uml.EventFacade
013 * @author Bob Fields
014 */
015public class EventFacadeLogicImpl
016    extends EventFacadeLogic
017{
018    private static final long serialVersionUID = -6251731927740002930L;
019
020    /**
021     * @param metaObject
022     * @param context
023     */
024    public EventFacadeLogicImpl(
025        Event metaObject,
026        String context)
027    {
028        super(metaObject, context);
029    }
030
031    /**
032     * @see org.andromda.metafacades.uml.EventFacade#getParameters()
033     */
034    @Override
035    protected Collection handleGetParameters()
036    {
037        return metaObject.getParameter();
038    }
039
040    /**
041     * @see org.andromda.metafacades.uml.EventFacade#getTransition()
042     */
043    @Override
044    protected Transition handleGetTransition()
045    {
046        Transition eventTransition = null;
047
048        final Collection<Transition> allTransitions =
049            UML14MetafacadeUtils.getModel().getStateMachines().getTransition().refAllOfType();
050        for (final Iterator<Transition> iterator = allTransitions.iterator(); iterator.hasNext() && eventTransition == null;)
051        {
052            final Transition transition = iterator.next();
053            if (metaObject.equals(transition.getTrigger()))
054            {
055                eventTransition = transition;
056            }
057        }
058
059        return eventTransition;
060    }
061
062    /**
063     * @see org.andromda.metafacades.uml.EventFacade#getState()
064     */
065    @Override
066    protected State handleGetState()
067    {
068        State eventState = null;
069
070        final Collection<State> allStates = UML14MetafacadeUtils.getModel().getStateMachines().getState().refAllOfType();
071        for (final Iterator<State> stateIterator = allStates.iterator(); stateIterator.hasNext() && eventState == null;)
072        {
073            final State state = stateIterator.next();
074            if (state.getDeferrableEvent().contains(metaObject))
075            {
076                eventState = state;
077            }
078        }
079
080        return eventState;
081    }
082
083    /**
084     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
085     */
086    public Object getValidationOwner()
087    {
088        Object validationOwner = this.getTransition();
089        if (validationOwner == null)
090        {
091            validationOwner = this.getState();
092        }
093        return validationOwner;
094    }
095}