View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4   //
5   package org.andromda.cartridges.jsf.metafacades;
6   
7   import java.util.Collection;
8   import java.util.List;
9   import org.andromda.core.common.Introspector;
10  import org.andromda.core.metafacade.MetafacadeBase;
11  import org.andromda.core.metafacade.MetafacadeFactory;
12  import org.andromda.core.metafacade.ModelValidationMessage;
13  import org.andromda.metafacades.uml.ConstraintFacade;
14  import org.andromda.metafacades.uml.DependencyFacade;
15  import org.andromda.metafacades.uml.EventFacade;
16  import org.andromda.metafacades.uml.FrontEndFinalState;
17  import org.andromda.metafacades.uml.FrontEndParameter;
18  import org.andromda.metafacades.uml.FrontEndUseCase;
19  import org.andromda.metafacades.uml.ModelElementFacade;
20  import org.andromda.metafacades.uml.ModelFacade;
21  import org.andromda.metafacades.uml.PackageFacade;
22  import org.andromda.metafacades.uml.PartitionFacade;
23  import org.andromda.metafacades.uml.StateFacade;
24  import org.andromda.metafacades.uml.StateMachineFacade;
25  import org.andromda.metafacades.uml.StereotypeFacade;
26  import org.andromda.metafacades.uml.TaggedValueFacade;
27  import org.andromda.metafacades.uml.TemplateParameterFacade;
28  import org.andromda.metafacades.uml.TransitionFacade;
29  import org.andromda.metafacades.uml.TypeMappings;
30  import org.andromda.translation.ocl.validation.OCLCollections;
31  import org.andromda.translation.ocl.validation.OCLIntrospector;
32  import org.andromda.translation.ocl.validation.OCLResultEnsurer;
33  import org.apache.log4j.Logger;
34  
35  /**
36   * Represents a final state in a JSF use case.
37   * MetafacadeLogic for JSFFinalState
38   *
39   * @see JSFFinalState
40   */
41  public abstract class JSFFinalStateLogic
42      extends MetafacadeBase
43      implements JSFFinalState
44  {
45      /**
46       * The underlying UML object
47       * @see Object
48       */
49      protected Object metaObject;
50  
51      /** Create Metafacade implementation instance using the MetafacadeFactory from the context
52       * @param metaObjectIn
53       * @param context
54       */
55      protected JSFFinalStateLogic(Object metaObjectIn, String context)
56      {
57          super(metaObjectIn, getContext(context));
58          this.superFrontEndFinalState =
59             (FrontEndFinalState)
60              MetafacadeFactory.getInstance().createFacadeImpl(
61                      "org.andromda.metafacades.uml.FrontEndFinalState",
62                      metaObjectIn,
63                      getContext(context));
64          this.metaObject = metaObjectIn;
65      }
66  
67      /**
68       * The logger instance.
69       */
70      private static final Logger logger = Logger.getLogger(JSFFinalStateLogic.class);
71  
72      /**
73       * Gets the context for this metafacade logic instance.
74       * @param context String. Set to JSFFinalState if null
75       * @return context String
76       */
77      private static String getContext(String context)
78      {
79          if (context == null)
80          {
81              context = "org.andromda.cartridges.jsf.metafacades.JSFFinalState";
82          }
83          return context;
84      }
85  
86      private FrontEndFinalState superFrontEndFinalState;
87      private boolean superFrontEndFinalStateInitialized = false;
88  
89      /**
90       * Gets the FrontEndFinalState parent instance.
91       * @return this.superFrontEndFinalState FrontEndFinalState
92       */
93      private FrontEndFinalState getSuperFrontEndFinalState()
94      {
95          if (!this.superFrontEndFinalStateInitialized)
96          {
97              ((MetafacadeBase)this.superFrontEndFinalState).setMetafacadeContext(this.getMetafacadeContext());
98              this.superFrontEndFinalStateInitialized = true;
99          }
100         return this.superFrontEndFinalState;
101     }
102 
103     /** Reset context only for non-root metafacades
104      * @param context
105      * @see MetafacadeBase#resetMetafacadeContext(String context)
106      */
107     @Override
108     public void resetMetafacadeContext(String context)
109     {
110         if (!this.contextRoot) // reset context only for non-root metafacades
111         {
112             context = getContext(context);  // to have same value as in original constructor call
113             setMetafacadeContext (context);
114             if (this.superFrontEndFinalStateInitialized)
115             {
116                 ((MetafacadeBase)this.superFrontEndFinalState).resetMetafacadeContext(context);
117             }
118         }
119     }
120 
121     /**
122      * @return boolean true always
123      * @see JSFFinalState
124      */
125     public boolean isJSFFinalStateMetaType()
126     {
127         return true;
128     }
129 
130     // --------------- attributes ---------------------
131 
132    /**
133     * @see org.andromda.cartridges.jsf.metafacades.JSFFinalState#getPath()
134     * @return String
135     */
136     protected abstract String handleGetPath();
137 
138     private String __path1a;
139     private boolean __path1aSet = false;
140 
141     /**
142      * The path to which this final state points.
143      * @return (String)handleGetPath()
144      */
145     public final String getPath()
146     {
147         String path1a = this.__path1a;
148         if (!this.__path1aSet)
149         {
150             // path has no pre constraints
151             path1a = handleGetPath();
152             // path has no post constraints
153             this.__path1a = path1a;
154             if (isMetafacadePropertyCachingEnabled())
155             {
156                 this.__path1aSet = true;
157             }
158         }
159         return path1a;
160     }
161 
162     /**
163      * @return true
164      * @see FrontEndFinalState
165      */
166     public boolean isFrontEndFinalStateMetaType()
167     {
168         return true;
169     }
170 
171     /**
172      * @return true
173      * @see org.andromda.metafacades.uml.FinalStateFacade
174      */
175     public boolean isFinalStateFacadeMetaType()
176     {
177         return true;
178     }
179 
180     /**
181      * @return true
182      * @see StateFacade
183      */
184     public boolean isStateFacadeMetaType()
185     {
186         return true;
187     }
188 
189     /**
190      * @return true
191      * @see org.andromda.metafacades.uml.StateVertexFacade
192      */
193     public boolean isStateVertexFacadeMetaType()
194     {
195         return true;
196     }
197 
198     /**
199      * @return true
200      * @see ModelElementFacade
201      */
202     public boolean isModelElementFacadeMetaType()
203     {
204         return true;
205     }
206 
207     // ----------- delegates to FrontEndFinalState ------------
208     /**
209      * Parameters that are directly entering this final state, they will be able to survive a trip
210      * to the next use-case.
211      * @see FrontEndFinalState#getInterUseCaseParameters()
212      */
213     public List<FrontEndParameter> getInterUseCaseParameters()
214     {
215         return this.getSuperFrontEndFinalState().getInterUseCaseParameters();
216     }
217 
218     /**
219      * The use case the final state is "targetting".
220      * @see FrontEndFinalState#getTargetUseCase()
221      */
222     public FrontEndUseCase getTargetUseCase()
223     {
224         return this.getSuperFrontEndFinalState().getTargetUseCase();
225     }
226 
227     /**
228      * Indicates if this front end final state is contained within a FrontEndUseCase.
229      * @see FrontEndFinalState#isContainedInFrontEndUseCase()
230      */
231     public boolean isContainedInFrontEndUseCase()
232     {
233         return this.getSuperFrontEndFinalState().isContainedInFrontEndUseCase();
234     }
235 
236     /**
237      * Copies all tagged values from the given ModelElementFacade to this model element facade.
238      * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
239      */
240     public void copyTaggedValues(ModelElementFacade element)
241     {
242         this.getSuperFrontEndFinalState().copyTaggedValues(element);
243     }
244 
245     /**
246      * Finds the tagged value with the specified 'tagName'. In case there are more values the first
247      * one found will be returned.
248      * @see ModelElementFacade#findTaggedValue(String tagName)
249      */
250     public Object findTaggedValue(String tagName)
251     {
252         return this.getSuperFrontEndFinalState().findTaggedValue(tagName);
253     }
254 
255     /**
256      * Returns all the values for the tagged value with the specified name. The returned collection
257      * will contains only String instances, or will be empty. Never null.
258      * @see ModelElementFacade#findTaggedValues(String tagName)
259      */
260     public Collection<Object> findTaggedValues(String tagName)
261     {
262         return this.getSuperFrontEndFinalState().findTaggedValues(tagName);
263     }
264 
265     /**
266      * Returns the fully qualified name of the model element. The fully qualified name includes
267      * complete package qualified name of the underlying model element. The templates parameter will
268      * be replaced by the correct one given the binding relation of the parameter to this element.
269      * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
270      */
271     public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
272     {
273         return this.getSuperFrontEndFinalState().getBindedFullyQualifiedName(bindedElement);
274     }
275 
276     /**
277      * Gets all constraints belonging to the model element.
278      * @see ModelElementFacade#getConstraints()
279      */
280     public Collection<ConstraintFacade> getConstraints()
281     {
282         return this.getSuperFrontEndFinalState().getConstraints();
283     }
284 
285     /**
286      * Returns the constraints of the argument kind that have been placed onto this model. Typical
287      * kinds are "inv", "pre" and "post". Other kinds are possible.
288      * @see ModelElementFacade#getConstraints(String kind)
289      */
290     public Collection<ConstraintFacade> getConstraints(String kind)
291     {
292         return this.getSuperFrontEndFinalState().getConstraints(kind);
293     }
294 
295     /**
296      * Gets the documentation for the model element, The indent argument is prefixed to each line.
297      * By default this method wraps lines after 64 characters.
298      * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
299      * @see ModelElementFacade#getDocumentation(String indent)
300      */
301     public String getDocumentation(String indent)
302     {
303         return this.getSuperFrontEndFinalState().getDocumentation(indent);
304     }
305 
306     /**
307      * This method returns the documentation for this model element, with the lines wrapped after
308      * the specified number of characters, values of less than 1 will indicate no line wrapping is
309      * required. By default paragraphs are returned as HTML.
310      * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
311      * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
312      */
313     public String getDocumentation(String indent, int lineLength)
314     {
315         return this.getSuperFrontEndFinalState().getDocumentation(indent, lineLength);
316     }
317 
318     /**
319      * This method returns the documentation for this model element, with the lines wrapped after
320      * the specified number of characters, values of less than 1 will indicate no line wrapping is
321      * required. HTML style determines if HTML Escaping is applied.
322      * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
323      */
324     public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
325     {
326         return this.getSuperFrontEndFinalState().getDocumentation(indent, lineLength, htmlStyle);
327     }
328 
329     /**
330      * The fully qualified name of this model element.
331      * @see ModelElementFacade#getFullyQualifiedName()
332      */
333     public String getFullyQualifiedName()
334     {
335         return this.getSuperFrontEndFinalState().getFullyQualifiedName();
336     }
337 
338     /**
339      * Returns the fully qualified name of the model element. The fully qualified name includes
340      * complete package qualified name of the underlying model element.  If modelName is true, then
341      * the original name of the model element (the name contained within the model) will be the name
342      * returned, otherwise a name from a language mapping will be returned.
343      * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
344      */
345     public String getFullyQualifiedName(boolean modelName)
346     {
347         return this.getSuperFrontEndFinalState().getFullyQualifiedName(modelName);
348     }
349 
350     /**
351      * Returns the fully qualified name as a path, the returned value always starts with out a slash
352      * '/'.
353      * @see ModelElementFacade#getFullyQualifiedNamePath()
354      */
355     public String getFullyQualifiedNamePath()
356     {
357         return this.getSuperFrontEndFinalState().getFullyQualifiedNamePath();
358     }
359 
360     /**
361      * Gets the unique identifier of the underlying model element.
362      * @see ModelElementFacade#getId()
363      */
364     public String getId()
365     {
366         return this.getSuperFrontEndFinalState().getId();
367     }
368 
369     /**
370      * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
371      * are not represented by other properties, i.e. native, transient, volatile, synchronized,
372      * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
373      * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
374      * JDK5 compiler level.
375      * @see ModelElementFacade#getKeywords()
376      */
377     public Collection<String> getKeywords()
378     {
379         return this.getSuperFrontEndFinalState().getKeywords();
380     }
381 
382     /**
383      * UML2: Retrieves a localized label for this named element.
384      * @see ModelElementFacade#getLabel()
385      */
386     public String getLabel()
387     {
388         return this.getSuperFrontEndFinalState().getLabel();
389     }
390 
391     /**
392      * The language mappings that have been set for this model element.
393      * @see ModelElementFacade#getLanguageMappings()
394      */
395     public TypeMappings getLanguageMappings()
396     {
397         return this.getSuperFrontEndFinalState().getLanguageMappings();
398     }
399 
400     /**
401      * Return the model containing this model element (multiple models may be loaded and processed
402      * at the same time).
403      * @see ModelElementFacade#getModel()
404      */
405     public ModelFacade getModel()
406     {
407         return this.getSuperFrontEndFinalState().getModel();
408     }
409 
410     /**
411      * The name of the model element.
412      * @see ModelElementFacade#getName()
413      */
414     public String getName()
415     {
416         return this.getSuperFrontEndFinalState().getName();
417     }
418 
419     /**
420      * Gets the package to which this model element belongs.
421      * @see ModelElementFacade#getPackage()
422      */
423     public ModelElementFacade getPackage()
424     {
425         return this.getSuperFrontEndFinalState().getPackage();
426     }
427 
428     /**
429      * The name of this model element's package.
430      * @see ModelElementFacade#getPackageName()
431      */
432     public String getPackageName()
433     {
434         return this.getSuperFrontEndFinalState().getPackageName();
435     }
436 
437     /**
438      * Gets the package name (optionally providing the ability to retrieve the model name and not
439      * the mapped name).
440      * @see ModelElementFacade#getPackageName(boolean modelName)
441      */
442     public String getPackageName(boolean modelName)
443     {
444         return this.getSuperFrontEndFinalState().getPackageName(modelName);
445     }
446 
447     /**
448      * Returns the package as a path, the returned value always starts with out a slash '/'.
449      * @see ModelElementFacade#getPackagePath()
450      */
451     public String getPackagePath()
452     {
453         return this.getSuperFrontEndFinalState().getPackagePath();
454     }
455 
456     /**
457      * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
458      * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
459      * the names of the containing namespaces starting at the root of the hierarchy and ending with
460      * the name of the NamedElement itself.
461      * @see ModelElementFacade#getQualifiedName()
462      */
463     public String getQualifiedName()
464     {
465         return this.getSuperFrontEndFinalState().getQualifiedName();
466     }
467 
468     /**
469      * Gets the root package for the model element.
470      * @see ModelElementFacade#getRootPackage()
471      */
472     public PackageFacade getRootPackage()
473     {
474         return this.getSuperFrontEndFinalState().getRootPackage();
475     }
476 
477     /**
478      * Gets the dependencies for which this model element is the source.
479      * @see ModelElementFacade#getSourceDependencies()
480      */
481     public Collection<DependencyFacade> getSourceDependencies()
482     {
483         return this.getSuperFrontEndFinalState().getSourceDependencies();
484     }
485 
486     /**
487      * If this model element is the context of an activity graph, this represents that activity
488      * graph.
489      * @see ModelElementFacade#getStateMachineContext()
490      */
491     public StateMachineFacade getStateMachineContext()
492     {
493         return this.getSuperFrontEndFinalState().getStateMachineContext();
494     }
495 
496     /**
497      * The collection of ALL stereotype names for this model element.
498      * @see ModelElementFacade#getStereotypeNames()
499      */
500     public Collection<String> getStereotypeNames()
501     {
502         return this.getSuperFrontEndFinalState().getStereotypeNames();
503     }
504 
505     /**
506      * Gets all stereotypes for this model element.
507      * @see ModelElementFacade#getStereotypes()
508      */
509     public Collection<StereotypeFacade> getStereotypes()
510     {
511         return this.getSuperFrontEndFinalState().getStereotypes();
512     }
513 
514     /**
515      * Return the TaggedValues associated with this model element, under all stereotypes.
516      * @see ModelElementFacade#getTaggedValues()
517      */
518     public Collection<TaggedValueFacade> getTaggedValues()
519     {
520         return this.getSuperFrontEndFinalState().getTaggedValues();
521     }
522 
523     /**
524      * Gets the dependencies for which this model element is the target.
525      * @see ModelElementFacade#getTargetDependencies()
526      */
527     public Collection<DependencyFacade> getTargetDependencies()
528     {
529         return this.getSuperFrontEndFinalState().getTargetDependencies();
530     }
531 
532     /**
533      * Get the template parameter for this model element having the parameterName
534      * @see ModelElementFacade#getTemplateParameter(String parameterName)
535      */
536     public Object getTemplateParameter(String parameterName)
537     {
538         return this.getSuperFrontEndFinalState().getTemplateParameter(parameterName);
539     }
540 
541     /**
542      * Get the template parameters for this model element
543      * @see ModelElementFacade#getTemplateParameters()
544      */
545     public Collection<TemplateParameterFacade> getTemplateParameters()
546     {
547         return this.getSuperFrontEndFinalState().getTemplateParameters();
548     }
549 
550     /**
551      * The visibility (i.e. public, private, protected or package) of the model element, will
552      * attempt a lookup for these values in the language mappings (if any).
553      * @see ModelElementFacade#getVisibility()
554      */
555     public String getVisibility()
556     {
557         return this.getSuperFrontEndFinalState().getVisibility();
558     }
559 
560     /**
561      * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
562      * is taken into account when searching for the stereotype), false otherwise.
563      * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
564      */
565     public boolean hasExactStereotype(String stereotypeName)
566     {
567         return this.getSuperFrontEndFinalState().hasExactStereotype(stereotypeName);
568     }
569 
570     /**
571      * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
572      * pipe, semicolon, or << >>
573      * @see ModelElementFacade#hasKeyword(String keywordName)
574      */
575     public boolean hasKeyword(String keywordName)
576     {
577         return this.getSuperFrontEndFinalState().hasKeyword(keywordName);
578     }
579 
580     /**
581      * Returns true if the model element has the specified stereotype.  If the stereotype itself
582      * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
583      * one of the stereotype's ancestors has a matching name this method will return true, false
584      * otherwise.
585      * For example, if we have a certain stereotype called <<exception>> and a model element has a
586      * stereotype called <<applicationException>> which extends <<exception>>, when calling this
587      * method with 'stereotypeName' defined as 'exception' the method would return true since
588      * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
589      * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
590      * @see ModelElementFacade#hasStereotype(String stereotypeName)
591      */
592     public boolean hasStereotype(String stereotypeName)
593     {
594         return this.getSuperFrontEndFinalState().hasStereotype(stereotypeName);
595     }
596 
597     /**
598      * True if there are target dependencies from this element that are instances of BindingFacade.
599      * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
600      * @see ModelElementFacade#isBindingDependenciesPresent()
601      */
602     public boolean isBindingDependenciesPresent()
603     {
604         return this.getSuperFrontEndFinalState().isBindingDependenciesPresent();
605     }
606 
607     /**
608      * Indicates if any constraints are present on this model element.
609      * @see ModelElementFacade#isConstraintsPresent()
610      */
611     public boolean isConstraintsPresent()
612     {
613         return this.getSuperFrontEndFinalState().isConstraintsPresent();
614     }
615 
616     /**
617      * Indicates if any documentation is present on this model element.
618      * @see ModelElementFacade#isDocumentationPresent()
619      */
620     public boolean isDocumentationPresent()
621     {
622         return this.getSuperFrontEndFinalState().isDocumentationPresent();
623     }
624 
625     /**
626      * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
627      * @see ModelElementFacade#isReservedWord()
628      */
629     public boolean isReservedWord()
630     {
631         return this.getSuperFrontEndFinalState().isReservedWord();
632     }
633 
634     /**
635      * True is there are template parameters on this model element. For UML2, applies to Class,
636      * Operation, Property, and Parameter.
637      * @see ModelElementFacade#isTemplateParametersPresent()
638      */
639     public boolean isTemplateParametersPresent()
640     {
641         return this.getSuperFrontEndFinalState().isTemplateParametersPresent();
642     }
643 
644     /**
645      * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
646      * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
647      * Enumerations and Interfaces, optionally applies on other model elements.
648      * @see ModelElementFacade#isValidIdentifierName()
649      */
650     public boolean isValidIdentifierName()
651     {
652         return this.getSuperFrontEndFinalState().isValidIdentifierName();
653     }
654 
655     /**
656      * Searches for the constraint with the specified 'name' on this model element, and if found
657      * translates it using the specified 'translation' from a translation library discovered by the
658      * framework.
659      * @see ModelElementFacade#translateConstraint(String name, String translation)
660      */
661     public String translateConstraint(String name, String translation)
662     {
663         return this.getSuperFrontEndFinalState().translateConstraint(name, translation);
664     }
665 
666     /**
667      * Translates all constraints belonging to this model element with the given 'translation'.
668      * @see ModelElementFacade#translateConstraints(String translation)
669      */
670     public String[] translateConstraints(String translation)
671     {
672         return this.getSuperFrontEndFinalState().translateConstraints(translation);
673     }
674 
675     /**
676      * Translates the constraints of the specified 'kind' belonging to this model element.
677      * @see ModelElementFacade#translateConstraints(String kind, String translation)
678      */
679     public String[] translateConstraints(String kind, String translation)
680     {
681         return this.getSuperFrontEndFinalState().translateConstraints(kind, translation);
682     }
683 
684     /**
685      * Events to which is being deferred in this action state.
686      * @see StateFacade#getDeferrableEvents()
687      */
688     public Collection<EventFacade> getDeferrableEvents()
689     {
690         return this.getSuperFrontEndFinalState().getDeferrableEvents();
691     }
692 
693     /**
694      * Models a situation during which some (usually implicit) invariant condition holds. The states
695      * of
696      * protocol state machines are exposed to the users of their context classifiers. A protocol
697      * state
698      * represents an exposed stable situation of its context classifier: when an instance of the
699      * classifier
700      * is not processing any operation, users of this instance can always know its state
701      * configuration.
702      * @see org.andromda.metafacades.uml.StateVertexFacade#getContainer()
703      */
704     public StateFacade getContainer()
705     {
706         return this.getSuperFrontEndFinalState().getContainer();
707     }
708 
709     /**
710      * A directed relationship between a source vertex and a target vertex. It may be part of a
711      * compound
712      * transition, which takes the state machine from one state configuration to another,
713      * representing the
714      * complete response of the state machine to an occurrence of an event of a particular type.
715      * @see org.andromda.metafacades.uml.StateVertexFacade#getIncomings()
716      */
717     public Collection<TransitionFacade> getIncomings()
718     {
719         return this.getSuperFrontEndFinalState().getIncomings();
720     }
721 
722     /**
723      * A directed relationship between a source vertex and a target vertex. It may be part of a
724      * compound
725      * transition, which takes the state machine from one state configuration to another,
726      * representing the
727      * complete response of the state machine to an occurrence of an event of a particular type.
728      * @see org.andromda.metafacades.uml.StateVertexFacade#getOutgoings()
729      */
730     public Collection<TransitionFacade> getOutgoings()
731     {
732         return this.getSuperFrontEndFinalState().getOutgoings();
733     }
734 
735     /**
736      * The partition (if any) to which this vertex belongs.
737      * @see org.andromda.metafacades.uml.StateVertexFacade#getPartition()
738      */
739     public PartitionFacade getPartition()
740     {
741         return this.getSuperFrontEndFinalState().getPartition();
742     }
743 
744     /**
745      * State machines can be used to express the behavior of part of a system. Behavior is modeled
746      * as a
747      * traversal of a graph of state nodes interconnected by one or more joined transition arcs that
748      * are
749      * triggered by the dispatching of series of (event) occurrences. During this traversal, the
750      * state
751      * machine executes a series of activities associated with various elements of the state
752      * machine.
753      * @see org.andromda.metafacades.uml.StateVertexFacade#getStateMachine()
754      */
755     public StateMachineFacade getStateMachine()
756     {
757         return this.getSuperFrontEndFinalState().getStateMachine();
758     }
759 
760     /**
761      * @see MetafacadeBase#initialize()
762      */
763     @Override
764     public void initialize()
765     {
766         this.getSuperFrontEndFinalState().initialize();
767     }
768 
769     /**
770      * @return Object getSuperFrontEndFinalState().getValidationOwner()
771      * @see MetafacadeBase#getValidationOwner()
772      */
773     @Override
774     public Object getValidationOwner()
775     {
776         Object owner = this.getSuperFrontEndFinalState().getValidationOwner();
777         return owner;
778     }
779 
780     /**
781      * @return String getSuperFrontEndFinalState().getValidationName()
782      * @see MetafacadeBase#getValidationName()
783      */
784     @Override
785     public String getValidationName()
786     {
787         String name = this.getSuperFrontEndFinalState().getValidationName();
788         return name;
789     }
790 
791     /**
792      * <p><b>Constraint:</b> org::andromda::cartridges::jsf::metafacades::JSFFinalState::name must uniquely match usecase</p>
793      * <p><b>Error:</b> The name of this final state must not be null and exactly match the name of a use-case. Alternatively it is possible to reference a use-case using an hyperlink (some UML tools support this). In both cases that use-case MUST carry the FrontEndUseCase stereotype. Finally you may also specify an actual hyperlink to an external resource, either in the final state's name, or as a webpage link as supported by some UML tools.</p>
794      * <p><b>OCL:</b> context JSFFinalState inv: path->notEmpty()</p>
795      * @param validationMessages Collection<ModelValidationMessage>
796      * @see MetafacadeBase#validateInvariants(Collection validationMessages)
797      */
798     @Override
799     public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
800     {
801         this.getSuperFrontEndFinalState().validateInvariants(validationMessages);
802         try
803         {
804             final Object contextElement = this.THIS();
805             boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"path")));
806             if (!constraintValid)
807             {
808                 validationMessages.add(
809                     new ModelValidationMessage(
810                         (MetafacadeBase)contextElement ,
811                         "org::andromda::cartridges::jsf::metafacades::JSFFinalState::name must uniquely match usecase",
812                         "The name of this final state must not be null and exactly match the name of a use-case. Alternatively it is possible to reference a use-case using an hyperlink (some UML tools support this). In both cases that use-case MUST carry the FrontEndUseCase stereotype. Finally you may also specify an actual hyperlink to an external resource, either in the final state's name, or as a webpage link as supported by some UML tools."));
813             }
814         }
815         catch (Throwable th)
816         {
817             Throwable cause = th.getCause();
818             int depth = 0; // Some throwables have infinite recursion
819             while (cause != null && depth < 7)
820             {
821                 th = cause;
822                 depth++;
823             }
824             logger.error("Error validating constraint 'org::andromda::cartridges::jsf::metafacades::JSFFinalState::name must uniquely match usecase' ON "
825                 + this.THIS().toString() + ": " + th.getMessage(), th);
826         }
827     }
828 
829     /**
830      * The property that stores the name of the metafacade.
831      */
832     private static final String NAME_PROPERTY = "name";
833     private static final String FQNAME_PROPERTY = "fullyQualifiedName";
834 
835     /**
836      * @see Object#toString()
837      */
838     @Override
839     public String toString()
840     {
841         final StringBuilder toString = new StringBuilder(this.getClass().getName());
842         toString.append("[");
843         try
844         {
845             toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
846         }
847         catch (final Throwable tryAgain)
848         {
849             try
850             {
851                 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
852             }
853             catch (final Throwable ignore)
854             {
855                 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
856             }
857         }
858         toString.append("]");
859         return toString.toString();
860     }
861 }