1 package org.andromda.cartridges.bpm4struts.metafacades;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Iterator;
6 import java.util.LinkedHashSet;
7 import java.util.List;
8
9 import org.andromda.metafacades.uml.ActivityGraphFacade;
10 import org.andromda.metafacades.uml.StateMachineFacade;
11 import org.andromda.metafacades.uml.TransitionFacade;
12 import org.andromda.metafacades.uml.UseCaseFacade;
13 import org.andromda.utils.StringUtilsHelper;
14
15
16 /**
17 * MetafacadeLogic implementation.
18 *
19 * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsPseudostate
20 */
21 public class StrutsPseudostateLogicImpl
22 extends StrutsPseudostateLogic
23 {
24 public StrutsPseudostateLogicImpl(
25 java.lang.Object metaObject,
26 java.lang.String context)
27 {
28 super(metaObject, context);
29 }
30
31 protected boolean handleIsContainedInFrontEndUseCase()
32 {
33 return this.getStateMachine() instanceof StrutsActivityGraph;
34 }
35
36 /**
37 * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsPseudostate#getActionMethodName()()
38 */
39 protected java.lang.String handleGetActionMethodName()
40 {
41 final String methodName = getName();
42 return (methodName == null) ?
43 "a" + System.currentTimeMillis() : StringUtilsHelper.lowerCamelCaseName(methodName);
44 }
45
46 /**
47 * Overrideen since StrutsAction does not extend FrontEndAction
48 *
49 * @see org.andromda.metafacades.uml.FrontEndPseudostate#getContainerActions()
50 */
51 public List getContainerActions()
52 {
53 final Collection actionSet = new LinkedHashSet();
54 final StateMachineFacade graphContext = getStateMachine();
55
56 if (graphContext instanceof ActivityGraphFacade)
57 {
58 final UseCaseFacade useCase = ((ActivityGraphFacade)graphContext).getUseCase();
59
60 if (useCase instanceof StrutsUseCase)
61 {
62 Collection actions = ((StrutsUseCase)useCase).getActions();
63 for (final Iterator actionIterator = actions.iterator(); actionIterator.hasNext();)
64 {
65 StrutsAction action = (StrutsAction)actionIterator.next();
66 Collection transitions = action.getTransitions();
67 for (final Iterator transitionIterator = transitions.iterator(); transitionIterator.hasNext();)
68 {
69 TransitionFacade transition = (TransitionFacade)transitionIterator.next();
70 if (this.equals(transition.getTarget()))
71 {
72 actionSet.add(action);
73 }
74 }
75 }
76 }
77 }
78 return new ArrayList(actionSet);
79 }
80 }