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