001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.ejb3.metafacades;
006
007import java.util.Collection;
008import org.andromda.core.common.Introspector;
009import org.andromda.core.metafacade.MetafacadeBase;
010import org.andromda.core.metafacade.MetafacadeFactory;
011import org.andromda.core.metafacade.ModelValidationMessage;
012import org.andromda.metafacades.uml.ClassifierFacade;
013import org.andromda.metafacades.uml.ConstraintFacade;
014import org.andromda.metafacades.uml.DependencyFacade;
015import org.andromda.metafacades.uml.ModelElementFacade;
016import org.andromda.metafacades.uml.ModelFacade;
017import org.andromda.metafacades.uml.OperationFacade;
018import org.andromda.metafacades.uml.PackageFacade;
019import org.andromda.metafacades.uml.ParameterFacade;
020import org.andromda.metafacades.uml.StateMachineFacade;
021import org.andromda.metafacades.uml.StereotypeFacade;
022import org.andromda.metafacades.uml.TaggedValueFacade;
023import org.andromda.metafacades.uml.TemplateParameterFacade;
024import org.andromda.metafacades.uml.TypeMappings;
025
026/**
027 * Represents an operation in an entity EJB bean POJO.
028 * MetafacadeLogic for EJB3OperationFacade
029 *
030 * @see EJB3OperationFacade
031 */
032public abstract class EJB3OperationFacadeLogic
033    extends MetafacadeBase
034    implements EJB3OperationFacade
035{
036    /**
037     * The underlying UML object
038     * @see Object
039     */
040    protected Object metaObject;
041
042    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
043     * @param metaObjectIn
044     * @param context
045     */
046    protected EJB3OperationFacadeLogic(Object metaObjectIn, String context)
047    {
048        super(metaObjectIn, getContext(context));
049        this.superOperationFacade =
050           (OperationFacade)
051            MetafacadeFactory.getInstance().createFacadeImpl(
052                    "org.andromda.metafacades.uml.OperationFacade",
053                    metaObjectIn,
054                    getContext(context));
055        this.metaObject = metaObjectIn;
056    }
057
058    /**
059     * Gets the context for this metafacade logic instance.
060     * @param context String. Set to EJB3OperationFacade if null
061     * @return context String
062     */
063    private static String getContext(String context)
064    {
065        if (context == null)
066        {
067            context = "org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade";
068        }
069        return context;
070    }
071
072    private OperationFacade superOperationFacade;
073    private boolean superOperationFacadeInitialized = false;
074
075    /**
076     * Gets the OperationFacade parent instance.
077     * @return this.superOperationFacade OperationFacade
078     */
079    private OperationFacade getSuperOperationFacade()
080    {
081        if (!this.superOperationFacadeInitialized)
082        {
083            ((MetafacadeBase)this.superOperationFacade).setMetafacadeContext(this.getMetafacadeContext());
084            this.superOperationFacadeInitialized = true;
085        }
086        return this.superOperationFacade;
087    }
088
089    /** Reset context only for non-root metafacades
090     * @param context
091     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
092     */
093    @Override
094    public void resetMetafacadeContext(String context)
095    {
096        if (!this.contextRoot) // reset context only for non-root metafacades
097        {
098            context = getContext(context);  // to have same value as in original constructor call
099            setMetafacadeContext (context);
100            if (this.superOperationFacadeInitialized)
101            {
102                ((MetafacadeBase)this.superOperationFacade).resetMetafacadeContext(context);
103            }
104        }
105    }
106
107    /**
108     * @return boolean true always
109     * @see EJB3OperationFacade
110     */
111    public boolean isEJB3OperationFacadeMetaType()
112    {
113        return true;
114    }
115
116    // --------------- attributes ---------------------
117
118   /**
119    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isBusinessOperation()
120    * @return boolean
121    */
122    protected abstract boolean handleIsBusinessOperation();
123
124    private boolean __businessOperation1a;
125    private boolean __businessOperation1aSet = false;
126
127    /**
128     * True/false on whether or not this operation is an EJB business operation.  This returns true
129     * if the operation is not one of the following:
130     * Create Method
131     * Finder or Query Method
132     * Select Method
133     * @return (boolean)handleIsBusinessOperation()
134     */
135    public final boolean isBusinessOperation()
136    {
137        boolean businessOperation1a = this.__businessOperation1a;
138        if (!this.__businessOperation1aSet)
139        {
140            // businessOperation has no pre constraints
141            businessOperation1a = handleIsBusinessOperation();
142            // businessOperation has no post constraints
143            this.__businessOperation1a = businessOperation1a;
144            if (isMetafacadePropertyCachingEnabled())
145            {
146                this.__businessOperation1aSet = true;
147            }
148        }
149        return businessOperation1a;
150    }
151
152   /**
153    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isSelectMethod()
154    * @return boolean
155    */
156    protected abstract boolean handleIsSelectMethod();
157
158    private boolean __selectMethod2a;
159    private boolean __selectMethod2aSet = false;
160
161    /**
162     * True/false on whether or not this operation represents a select method.
163     * @return (boolean)handleIsSelectMethod()
164     */
165    public final boolean isSelectMethod()
166    {
167        boolean selectMethod2a = this.__selectMethod2a;
168        if (!this.__selectMethod2aSet)
169        {
170            // selectMethod has no pre constraints
171            selectMethod2a = handleIsSelectMethod();
172            // selectMethod has no post constraints
173            this.__selectMethod2a = selectMethod2a;
174            if (isMetafacadePropertyCachingEnabled())
175            {
176                this.__selectMethod2aSet = true;
177            }
178        }
179        return selectMethod2a;
180    }
181
182   /**
183    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPrePersist()
184    * @return boolean
185    */
186    protected abstract boolean handleIsPrePersist();
187
188    private boolean __prePersist3a;
189    private boolean __prePersist3aSet = false;
190
191    /**
192     * Returns true if the associated operation has the <<PrePersist>> stereotype.
193     * NOTE: The method signature must return void and have no args.
194     * @return (boolean)handleIsPrePersist()
195     */
196    public final boolean isPrePersist()
197    {
198        boolean prePersist3a = this.__prePersist3a;
199        if (!this.__prePersist3aSet)
200        {
201            // prePersist has no pre constraints
202            prePersist3a = handleIsPrePersist();
203            // prePersist has no post constraints
204            this.__prePersist3a = prePersist3a;
205            if (isMetafacadePropertyCachingEnabled())
206            {
207                this.__prePersist3aSet = true;
208            }
209        }
210        return prePersist3a;
211    }
212
213   /**
214    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostPersist()
215    * @return boolean
216    */
217    protected abstract boolean handleIsPostPersist();
218
219    private boolean __postPersist4a;
220    private boolean __postPersist4aSet = false;
221
222    /**
223     * Returns true if the associated operation has the <<PostPersist>> stereotype.
224     * NOTE: The method signature must return void and have no args.
225     * @return (boolean)handleIsPostPersist()
226     */
227    public final boolean isPostPersist()
228    {
229        boolean postPersist4a = this.__postPersist4a;
230        if (!this.__postPersist4aSet)
231        {
232            // postPersist has no pre constraints
233            postPersist4a = handleIsPostPersist();
234            // postPersist has no post constraints
235            this.__postPersist4a = postPersist4a;
236            if (isMetafacadePropertyCachingEnabled())
237            {
238                this.__postPersist4aSet = true;
239            }
240        }
241        return postPersist4a;
242    }
243
244   /**
245    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPreRemove()
246    * @return boolean
247    */
248    protected abstract boolean handleIsPreRemove();
249
250    private boolean __preRemove5a;
251    private boolean __preRemove5aSet = false;
252
253    /**
254     * Returns true if the associated operation has the <<PreRemove>> stereotype.
255     * NOTE: The method signature must return void and have no args.
256     * @return (boolean)handleIsPreRemove()
257     */
258    public final boolean isPreRemove()
259    {
260        boolean preRemove5a = this.__preRemove5a;
261        if (!this.__preRemove5aSet)
262        {
263            // preRemove has no pre constraints
264            preRemove5a = handleIsPreRemove();
265            // preRemove has no post constraints
266            this.__preRemove5a = preRemove5a;
267            if (isMetafacadePropertyCachingEnabled())
268            {
269                this.__preRemove5aSet = true;
270            }
271        }
272        return preRemove5a;
273    }
274
275   /**
276    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostRemove()
277    * @return boolean
278    */
279    protected abstract boolean handleIsPostRemove();
280
281    private boolean __postRemove6a;
282    private boolean __postRemove6aSet = false;
283
284    /**
285     * Returns true if the associated operation has the <<PostRemove>> stereotype.
286     * NOTE: The method signature must return void and have no args.
287     * @return (boolean)handleIsPostRemove()
288     */
289    public final boolean isPostRemove()
290    {
291        boolean postRemove6a = this.__postRemove6a;
292        if (!this.__postRemove6aSet)
293        {
294            // postRemove has no pre constraints
295            postRemove6a = handleIsPostRemove();
296            // postRemove has no post constraints
297            this.__postRemove6a = postRemove6a;
298            if (isMetafacadePropertyCachingEnabled())
299            {
300                this.__postRemove6aSet = true;
301            }
302        }
303        return postRemove6a;
304    }
305
306   /**
307    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPreUpdate()
308    * @return boolean
309    */
310    protected abstract boolean handleIsPreUpdate();
311
312    private boolean __preUpdate7a;
313    private boolean __preUpdate7aSet = false;
314
315    /**
316     * Returns true if the associated operation has the <<PreUpdate>> stereotype.
317     * NOTE: The method signature must return void and have no args.
318     * @return (boolean)handleIsPreUpdate()
319     */
320    public final boolean isPreUpdate()
321    {
322        boolean preUpdate7a = this.__preUpdate7a;
323        if (!this.__preUpdate7aSet)
324        {
325            // preUpdate has no pre constraints
326            preUpdate7a = handleIsPreUpdate();
327            // preUpdate has no post constraints
328            this.__preUpdate7a = preUpdate7a;
329            if (isMetafacadePropertyCachingEnabled())
330            {
331                this.__preUpdate7aSet = true;
332            }
333        }
334        return preUpdate7a;
335    }
336
337   /**
338    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostUpdate()
339    * @return boolean
340    */
341    protected abstract boolean handleIsPostUpdate();
342
343    private boolean __postUpdate8a;
344    private boolean __postUpdate8aSet = false;
345
346    /**
347     * Returns true if the associated operation has the <<PostUpdate>> stereotype.
348     * NOTE: The method signature must return void and have no args.
349     * @return (boolean)handleIsPostUpdate()
350     */
351    public final boolean isPostUpdate()
352    {
353        boolean postUpdate8a = this.__postUpdate8a;
354        if (!this.__postUpdate8aSet)
355        {
356            // postUpdate has no pre constraints
357            postUpdate8a = handleIsPostUpdate();
358            // postUpdate has no post constraints
359            this.__postUpdate8a = postUpdate8a;
360            if (isMetafacadePropertyCachingEnabled())
361            {
362                this.__postUpdate8aSet = true;
363            }
364        }
365        return postUpdate8a;
366    }
367
368   /**
369    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostLoad()
370    * @return boolean
371    */
372    protected abstract boolean handleIsPostLoad();
373
374    private boolean __postLoad9a;
375    private boolean __postLoad9aSet = false;
376
377    /**
378     * Returns true if the associated operation has the <<PostLoad>> stereotype.
379     * NOTE: The method signature must return void and have no args.
380     * @return (boolean)handleIsPostLoad()
381     */
382    public final boolean isPostLoad()
383    {
384        boolean postLoad9a = this.__postLoad9a;
385        if (!this.__postLoad9aSet)
386        {
387            // postLoad has no pre constraints
388            postLoad9a = handleIsPostLoad();
389            // postLoad has no post constraints
390            this.__postLoad9a = postLoad9a;
391            if (isMetafacadePropertyCachingEnabled())
392            {
393                this.__postLoad9aSet = true;
394            }
395        }
396        return postLoad9a;
397    }
398
399   /**
400    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isLifecycleCallback()
401    * @return boolean
402    */
403    protected abstract boolean handleIsLifecycleCallback();
404
405    private boolean __lifecycleCallback10a;
406    private boolean __lifecycleCallback10aSet = false;
407
408    /**
409     * Returns true if this operation is marked with any of the lifecycle callback stereotypes like
410     * PrePersist, PostPersist, PreRemove, PostRemove, PreUpdate, PostUpdate or PostLoad.
411     * @return (boolean)handleIsLifecycleCallback()
412     */
413    public final boolean isLifecycleCallback()
414    {
415        boolean lifecycleCallback10a = this.__lifecycleCallback10a;
416        if (!this.__lifecycleCallback10aSet)
417        {
418            // lifecycleCallback has no pre constraints
419            lifecycleCallback10a = handleIsLifecycleCallback();
420            // lifecycleCallback has no post constraints
421            this.__lifecycleCallback10a = lifecycleCallback10a;
422            if (isMetafacadePropertyCachingEnabled())
423            {
424                this.__lifecycleCallback10aSet = true;
425            }
426        }
427        return lifecycleCallback10a;
428    }
429
430   /**
431    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#getImplementationName()
432    * @return String
433    */
434    protected abstract String handleGetImplementationName();
435
436    private String __implementationName11a;
437    private boolean __implementationName11aSet = false;
438
439    /**
440     * The name of the operation used within the entity implementation.
441     * @return (String)handleGetImplementationName()
442     */
443    public final String getImplementationName()
444    {
445        String implementationName11a = this.__implementationName11a;
446        if (!this.__implementationName11aSet)
447        {
448            // implementationName has no pre constraints
449            implementationName11a = handleGetImplementationName();
450            // implementationName has no post constraints
451            this.__implementationName11a = implementationName11a;
452            if (isMetafacadePropertyCachingEnabled())
453            {
454                this.__implementationName11aSet = true;
455            }
456        }
457        return implementationName11a;
458    }
459
460   /**
461    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#getImplementationCall()
462    * @return String
463    */
464    protected abstract String handleGetImplementationCall();
465
466    private String __implementationCall12a;
467    private boolean __implementationCall12aSet = false;
468
469    /**
470     * The method call for the implementation operation.
471     * @return (String)handleGetImplementationCall()
472     */
473    public final String getImplementationCall()
474    {
475        String implementationCall12a = this.__implementationCall12a;
476        if (!this.__implementationCall12aSet)
477        {
478            // implementationCall has no pre constraints
479            implementationCall12a = handleGetImplementationCall();
480            // implementationCall has no post constraints
481            this.__implementationCall12a = implementationCall12a;
482            if (isMetafacadePropertyCachingEnabled())
483            {
484                this.__implementationCall12aSet = true;
485            }
486        }
487        return implementationCall12a;
488    }
489
490   /**
491    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#getImplementationSignature()
492    * @return String
493    */
494    protected abstract String handleGetImplementationSignature();
495
496    private String __implementationSignature13a;
497    private boolean __implementationSignature13aSet = false;
498
499    /**
500     * The signature for the implementation operation.
501     * @return (String)handleGetImplementationSignature()
502     */
503    public final String getImplementationSignature()
504    {
505        String implementationSignature13a = this.__implementationSignature13a;
506        if (!this.__implementationSignature13aSet)
507        {
508            // implementationSignature has no pre constraints
509            implementationSignature13a = handleGetImplementationSignature();
510            // implementationSignature has no post constraints
511            this.__implementationSignature13a = implementationSignature13a;
512            if (isMetafacadePropertyCachingEnabled())
513            {
514                this.__implementationSignature13aSet = true;
515            }
516        }
517        return implementationSignature13a;
518    }
519
520   /**
521    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isCreateMethod()
522    * @return boolean
523    */
524    protected abstract boolean handleIsCreateMethod();
525
526    private boolean __createMethod14a;
527    private boolean __createMethod14aSet = false;
528
529    /**
530     * Returns true if the operation has the <<CreateMethod>> stereotype.
531     * @return (boolean)handleIsCreateMethod()
532     */
533    public final boolean isCreateMethod()
534    {
535        boolean createMethod14a = this.__createMethod14a;
536        if (!this.__createMethod14aSet)
537        {
538            // createMethod has no pre constraints
539            createMethod14a = handleIsCreateMethod();
540            // createMethod has no post constraints
541            this.__createMethod14a = createMethod14a;
542            if (isMetafacadePropertyCachingEnabled())
543            {
544                this.__createMethod14aSet = true;
545            }
546        }
547        return createMethod14a;
548    }
549
550   /**
551    * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isFinderMethod()
552    * @return boolean
553    */
554    protected abstract boolean handleIsFinderMethod();
555
556    private boolean __finderMethod15a;
557    private boolean __finderMethod15aSet = false;
558
559    /**
560     * Returns true if the operation is a finder or query operation.
561     * @return (boolean)handleIsFinderMethod()
562     */
563    public final boolean isFinderMethod()
564    {
565        boolean finderMethod15a = this.__finderMethod15a;
566        if (!this.__finderMethod15aSet)
567        {
568            // finderMethod has no pre constraints
569            finderMethod15a = handleIsFinderMethod();
570            // finderMethod has no post constraints
571            this.__finderMethod15a = finderMethod15a;
572            if (isMetafacadePropertyCachingEnabled())
573            {
574                this.__finderMethod15aSet = true;
575            }
576        }
577        return finderMethod15a;
578    }
579
580    // ------------- associations ------------------
581
582    /**
583     * @return true
584     * @see OperationFacade
585     */
586    public boolean isOperationFacadeMetaType()
587    {
588        return true;
589    }
590
591    /**
592     * @return true
593     * @see ModelElementFacade
594     */
595    public boolean isModelElementFacadeMetaType()
596    {
597        return true;
598    }
599
600    // ----------- delegates to OperationFacade ------------
601    /**
602     * Copies all tagged values from the given ModelElementFacade to this model element facade.
603     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
604     */
605    public void copyTaggedValues(ModelElementFacade element)
606    {
607        this.getSuperOperationFacade().copyTaggedValues(element);
608    }
609
610    /**
611     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
612     * one found will be returned.
613     * @see ModelElementFacade#findTaggedValue(String tagName)
614     */
615    public Object findTaggedValue(String tagName)
616    {
617        return this.getSuperOperationFacade().findTaggedValue(tagName);
618    }
619
620    /**
621     * Returns all the values for the tagged value with the specified name. The returned collection
622     * will contains only String instances, or will be empty. Never null.
623     * @see ModelElementFacade#findTaggedValues(String tagName)
624     */
625    public Collection<Object> findTaggedValues(String tagName)
626    {
627        return this.getSuperOperationFacade().findTaggedValues(tagName);
628    }
629
630    /**
631     * Returns the fully qualified name of the model element. The fully qualified name includes
632     * complete package qualified name of the underlying model element. The templates parameter will
633     * be replaced by the correct one given the binding relation of the parameter to this element.
634     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
635     */
636    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
637    {
638        return this.getSuperOperationFacade().getBindedFullyQualifiedName(bindedElement);
639    }
640
641    /**
642     * Gets all constraints belonging to the model element.
643     * @see ModelElementFacade#getConstraints()
644     */
645    public Collection<ConstraintFacade> getConstraints()
646    {
647        return this.getSuperOperationFacade().getConstraints();
648    }
649
650    /**
651     * Returns the constraints of the argument kind that have been placed onto this model. Typical
652     * kinds are "inv", "pre" and "post". Other kinds are possible.
653     * @see ModelElementFacade#getConstraints(String kind)
654     */
655    public Collection<ConstraintFacade> getConstraints(String kind)
656    {
657        return this.getSuperOperationFacade().getConstraints(kind);
658    }
659
660    /**
661     * Gets the documentation for the model element, The indent argument is prefixed to each line.
662     * By default this method wraps lines after 64 characters.
663     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
664     * @see ModelElementFacade#getDocumentation(String indent)
665     */
666    public String getDocumentation(String indent)
667    {
668        return this.getSuperOperationFacade().getDocumentation(indent);
669    }
670
671    /**
672     * This method returns the documentation for this model element, with the lines wrapped after
673     * the specified number of characters, values of less than 1 will indicate no line wrapping is
674     * required. By default paragraphs are returned as HTML.
675     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
676     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
677     */
678    public String getDocumentation(String indent, int lineLength)
679    {
680        return this.getSuperOperationFacade().getDocumentation(indent, lineLength);
681    }
682
683    /**
684     * This method returns the documentation for this model element, with the lines wrapped after
685     * the specified number of characters, values of less than 1 will indicate no line wrapping is
686     * required. HTML style determines if HTML Escaping is applied.
687     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
688     */
689    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
690    {
691        return this.getSuperOperationFacade().getDocumentation(indent, lineLength, htmlStyle);
692    }
693
694    /**
695     * The fully qualified name of this model element.
696     * @see ModelElementFacade#getFullyQualifiedName()
697     */
698    public String getFullyQualifiedName()
699    {
700        return this.getSuperOperationFacade().getFullyQualifiedName();
701    }
702
703    /**
704     * Returns the fully qualified name of the model element. The fully qualified name includes
705     * complete package qualified name of the underlying model element.  If modelName is true, then
706     * the original name of the model element (the name contained within the model) will be the name
707     * returned, otherwise a name from a language mapping will be returned.
708     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
709     */
710    public String getFullyQualifiedName(boolean modelName)
711    {
712        return this.getSuperOperationFacade().getFullyQualifiedName(modelName);
713    }
714
715    /**
716     * Returns the fully qualified name as a path, the returned value always starts with out a slash
717     * '/'.
718     * @see ModelElementFacade#getFullyQualifiedNamePath()
719     */
720    public String getFullyQualifiedNamePath()
721    {
722        return this.getSuperOperationFacade().getFullyQualifiedNamePath();
723    }
724
725    /**
726     * Gets the unique identifier of the underlying model element.
727     * @see ModelElementFacade#getId()
728     */
729    public String getId()
730    {
731        return this.getSuperOperationFacade().getId();
732    }
733
734    /**
735     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
736     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
737     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
738     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
739     * JDK5 compiler level.
740     * @see ModelElementFacade#getKeywords()
741     */
742    public Collection<String> getKeywords()
743    {
744        return this.getSuperOperationFacade().getKeywords();
745    }
746
747    /**
748     * UML2: Retrieves a localized label for this named element.
749     * @see ModelElementFacade#getLabel()
750     */
751    public String getLabel()
752    {
753        return this.getSuperOperationFacade().getLabel();
754    }
755
756    /**
757     * The language mappings that have been set for this model element.
758     * @see ModelElementFacade#getLanguageMappings()
759     */
760    public TypeMappings getLanguageMappings()
761    {
762        return this.getSuperOperationFacade().getLanguageMappings();
763    }
764
765    /**
766     * Return the model containing this model element (multiple models may be loaded and processed
767     * at the same time).
768     * @see ModelElementFacade#getModel()
769     */
770    public ModelFacade getModel()
771    {
772        return this.getSuperOperationFacade().getModel();
773    }
774
775    /**
776     * The name of the model element.
777     * @see ModelElementFacade#getName()
778     */
779    public String getName()
780    {
781        return this.getSuperOperationFacade().getName();
782    }
783
784    /**
785     * Gets the package to which this model element belongs.
786     * @see ModelElementFacade#getPackage()
787     */
788    public ModelElementFacade getPackage()
789    {
790        return this.getSuperOperationFacade().getPackage();
791    }
792
793    /**
794     * The name of this model element's package.
795     * @see ModelElementFacade#getPackageName()
796     */
797    public String getPackageName()
798    {
799        return this.getSuperOperationFacade().getPackageName();
800    }
801
802    /**
803     * Gets the package name (optionally providing the ability to retrieve the model name and not
804     * the mapped name).
805     * @see ModelElementFacade#getPackageName(boolean modelName)
806     */
807    public String getPackageName(boolean modelName)
808    {
809        return this.getSuperOperationFacade().getPackageName(modelName);
810    }
811
812    /**
813     * Returns the package as a path, the returned value always starts with out a slash '/'.
814     * @see ModelElementFacade#getPackagePath()
815     */
816    public String getPackagePath()
817    {
818        return this.getSuperOperationFacade().getPackagePath();
819    }
820
821    /**
822     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
823     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
824     * the names of the containing namespaces starting at the root of the hierarchy and ending with
825     * the name of the NamedElement itself.
826     * @see ModelElementFacade#getQualifiedName()
827     */
828    public String getQualifiedName()
829    {
830        return this.getSuperOperationFacade().getQualifiedName();
831    }
832
833    /**
834     * Gets the root package for the model element.
835     * @see ModelElementFacade#getRootPackage()
836     */
837    public PackageFacade getRootPackage()
838    {
839        return this.getSuperOperationFacade().getRootPackage();
840    }
841
842    /**
843     * Gets the dependencies for which this model element is the source.
844     * @see ModelElementFacade#getSourceDependencies()
845     */
846    public Collection<DependencyFacade> getSourceDependencies()
847    {
848        return this.getSuperOperationFacade().getSourceDependencies();
849    }
850
851    /**
852     * If this model element is the context of an activity graph, this represents that activity
853     * graph.
854     * @see ModelElementFacade#getStateMachineContext()
855     */
856    public StateMachineFacade getStateMachineContext()
857    {
858        return this.getSuperOperationFacade().getStateMachineContext();
859    }
860
861    /**
862     * The collection of ALL stereotype names for this model element.
863     * @see ModelElementFacade#getStereotypeNames()
864     */
865    public Collection<String> getStereotypeNames()
866    {
867        return this.getSuperOperationFacade().getStereotypeNames();
868    }
869
870    /**
871     * Gets all stereotypes for this model element.
872     * @see ModelElementFacade#getStereotypes()
873     */
874    public Collection<StereotypeFacade> getStereotypes()
875    {
876        return this.getSuperOperationFacade().getStereotypes();
877    }
878
879    /**
880     * Return the TaggedValues associated with this model element, under all stereotypes.
881     * @see ModelElementFacade#getTaggedValues()
882     */
883    public Collection<TaggedValueFacade> getTaggedValues()
884    {
885        return this.getSuperOperationFacade().getTaggedValues();
886    }
887
888    /**
889     * Gets the dependencies for which this model element is the target.
890     * @see ModelElementFacade#getTargetDependencies()
891     */
892    public Collection<DependencyFacade> getTargetDependencies()
893    {
894        return this.getSuperOperationFacade().getTargetDependencies();
895    }
896
897    /**
898     * Get the template parameter for this model element having the parameterName
899     * @see ModelElementFacade#getTemplateParameter(String parameterName)
900     */
901    public Object getTemplateParameter(String parameterName)
902    {
903        return this.getSuperOperationFacade().getTemplateParameter(parameterName);
904    }
905
906    /**
907     * Get the template parameters for this model element
908     * @see ModelElementFacade#getTemplateParameters()
909     */
910    public Collection<TemplateParameterFacade> getTemplateParameters()
911    {
912        return this.getSuperOperationFacade().getTemplateParameters();
913    }
914
915    /**
916     * The visibility (i.e. public, private, protected or package) of the model element, will
917     * attempt a lookup for these values in the language mappings (if any).
918     * @see ModelElementFacade#getVisibility()
919     */
920    public String getVisibility()
921    {
922        return this.getSuperOperationFacade().getVisibility();
923    }
924
925    /**
926     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
927     * is taken into account when searching for the stereotype), false otherwise.
928     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
929     */
930    public boolean hasExactStereotype(String stereotypeName)
931    {
932        return this.getSuperOperationFacade().hasExactStereotype(stereotypeName);
933    }
934
935    /**
936     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
937     * pipe, semicolon, or << >>
938     * @see ModelElementFacade#hasKeyword(String keywordName)
939     */
940    public boolean hasKeyword(String keywordName)
941    {
942        return this.getSuperOperationFacade().hasKeyword(keywordName);
943    }
944
945    /**
946     * Returns true if the model element has the specified stereotype.  If the stereotype itself
947     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
948     * one of the stereotype's ancestors has a matching name this method will return true, false
949     * otherwise.
950     * For example, if we have a certain stereotype called <<exception>> and a model element has a
951     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
952     * method with 'stereotypeName' defined as 'exception' the method would return true since
953     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
954     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
955     * @see ModelElementFacade#hasStereotype(String stereotypeName)
956     */
957    public boolean hasStereotype(String stereotypeName)
958    {
959        return this.getSuperOperationFacade().hasStereotype(stereotypeName);
960    }
961
962    /**
963     * True if there are target dependencies from this element that are instances of BindingFacade.
964     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
965     * @see ModelElementFacade#isBindingDependenciesPresent()
966     */
967    public boolean isBindingDependenciesPresent()
968    {
969        return this.getSuperOperationFacade().isBindingDependenciesPresent();
970    }
971
972    /**
973     * Indicates if any constraints are present on this model element.
974     * @see ModelElementFacade#isConstraintsPresent()
975     */
976    public boolean isConstraintsPresent()
977    {
978        return this.getSuperOperationFacade().isConstraintsPresent();
979    }
980
981    /**
982     * Indicates if any documentation is present on this model element.
983     * @see ModelElementFacade#isDocumentationPresent()
984     */
985    public boolean isDocumentationPresent()
986    {
987        return this.getSuperOperationFacade().isDocumentationPresent();
988    }
989
990    /**
991     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
992     * @see ModelElementFacade#isReservedWord()
993     */
994    public boolean isReservedWord()
995    {
996        return this.getSuperOperationFacade().isReservedWord();
997    }
998
999    /**
1000     * True is there are template parameters on this model element. For UML2, applies to Class,
1001     * Operation, Property, and Parameter.
1002     * @see ModelElementFacade#isTemplateParametersPresent()
1003     */
1004    public boolean isTemplateParametersPresent()
1005    {
1006        return this.getSuperOperationFacade().isTemplateParametersPresent();
1007    }
1008
1009    /**
1010     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1011     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1012     * Enumerations and Interfaces, optionally applies on other model elements.
1013     * @see ModelElementFacade#isValidIdentifierName()
1014     */
1015    public boolean isValidIdentifierName()
1016    {
1017        return this.getSuperOperationFacade().isValidIdentifierName();
1018    }
1019
1020    /**
1021     * Searches for the constraint with the specified 'name' on this model element, and if found
1022     * translates it using the specified 'translation' from a translation library discovered by the
1023     * framework.
1024     * @see ModelElementFacade#translateConstraint(String name, String translation)
1025     */
1026    public String translateConstraint(String name, String translation)
1027    {
1028        return this.getSuperOperationFacade().translateConstraint(name, translation);
1029    }
1030
1031    /**
1032     * Translates all constraints belonging to this model element with the given 'translation'.
1033     * @see ModelElementFacade#translateConstraints(String translation)
1034     */
1035    public String[] translateConstraints(String translation)
1036    {
1037        return this.getSuperOperationFacade().translateConstraints(translation);
1038    }
1039
1040    /**
1041     * Translates the constraints of the specified 'kind' belonging to this model element.
1042     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1043     */
1044    public String[] translateConstraints(String kind, String translation)
1045    {
1046        return this.getSuperOperationFacade().translateConstraints(kind, translation);
1047    }
1048
1049    /**
1050     * Finds the parameter on this operation having the given name, if no parameter is found, null
1051     * is returned instead.
1052     * @see OperationFacade#findParameter(String name)
1053     */
1054    public ParameterFacade findParameter(String name)
1055    {
1056        return this.getSuperOperationFacade().findParameter(name);
1057    }
1058
1059    /**
1060     * Searches the given feature for the specified tag.
1061     * If the follow boolean is set to true then the search will continue from the class operation
1062     * to the class itself and then up the class hierarchy.
1063     * @see OperationFacade#findTaggedValue(String name, boolean follow)
1064     */
1065    public Object findTaggedValue(String name, boolean follow)
1066    {
1067        return this.getSuperOperationFacade().findTaggedValue(name, follow);
1068    }
1069
1070    /**
1071     * A comma separated list of all argument names.
1072     * @see OperationFacade#getArgumentNames()
1073     */
1074    public String getArgumentNames()
1075    {
1076        return this.getSuperOperationFacade().getArgumentNames();
1077    }
1078
1079    /**
1080     * A comma separated list of all types of each argument, in order.
1081     * @see OperationFacade#getArgumentTypeNames()
1082     */
1083    public String getArgumentTypeNames()
1084    {
1085        return this.getSuperOperationFacade().getArgumentTypeNames();
1086    }
1087
1088    /**
1089     * Specification of an argument used to pass information into or out of an invocation of a
1090     * behavioral
1091     * feature. Parameters are allowed to be treated as connectable elements. Parameters have
1092     * support for
1093     * streaming, exceptions, and parameter sets.
1094     * @see OperationFacade#getArguments()
1095     */
1096    public Collection<ParameterFacade> getArguments()
1097    {
1098        return this.getSuperOperationFacade().getArguments();
1099    }
1100
1101    /**
1102     * Constructs the operation call with the operation name
1103     * @see OperationFacade#getCall()
1104     */
1105    public String getCall()
1106    {
1107        return this.getSuperOperationFacade().getCall();
1108    }
1109
1110    /**
1111     * Returns the concurrency modifier for this operation (i.e. concurrent, guarded or sequential)
1112     * of the model element, will attempt a lookup for these values in the language mappings (if
1113     * any).
1114     * @see OperationFacade#getConcurrency()
1115     */
1116    public String getConcurrency()
1117    {
1118        return this.getSuperOperationFacade().getConcurrency();
1119    }
1120
1121    /**
1122     * A comma separated list containing all exceptions that this operation throws.  Exceptions are
1123     * determined through dependencies that have the target element stereotyped as <<Exception>>.
1124     * @see OperationFacade#getExceptionList()
1125     */
1126    public String getExceptionList()
1127    {
1128        return this.getSuperOperationFacade().getExceptionList();
1129    }
1130
1131    /**
1132     * Returns a comma separated list of exceptions appended to the comma separated list of fully
1133     * qualified 'initialException' classes passed in to this method.
1134     * @see OperationFacade#getExceptionList(String initialExceptions)
1135     */
1136    public String getExceptionList(String initialExceptions)
1137    {
1138        return this.getSuperOperationFacade().getExceptionList(initialExceptions);
1139    }
1140
1141    /**
1142     * A collection of all exceptions thrown by this operation.
1143     * @see OperationFacade#getExceptions()
1144     */
1145    public Collection<ModelElementFacade> getExceptions()
1146    {
1147        return this.getSuperOperationFacade().getExceptions();
1148    }
1149
1150    /**
1151     * Return Type with multiplicity taken into account. UML14 does not allow multiplicity *.
1152     * @see OperationFacade#getGetterSetterReturnTypeName()
1153     */
1154    public String getGetterSetterReturnTypeName()
1155    {
1156        return this.getSuperOperationFacade().getGetterSetterReturnTypeName();
1157    }
1158
1159    /**
1160     * the lower value for the multiplicity
1161     * -only applicable for UML2
1162     * @see OperationFacade#getLower()
1163     */
1164    public int getLower()
1165    {
1166        return this.getSuperOperationFacade().getLower();
1167    }
1168
1169    /**
1170     * Returns the operation method body determined from UML sequence diagrams or other UML sources.
1171     * @see OperationFacade#getMethodBody()
1172     */
1173    public String getMethodBody()
1174    {
1175        return this.getSuperOperationFacade().getMethodBody();
1176    }
1177
1178    /**
1179     * The operation this operation overrides, null if this operation is not overriding.
1180     * @see OperationFacade#getOverriddenOperation()
1181     */
1182    public OperationFacade getOverriddenOperation()
1183    {
1184        return this.getSuperOperationFacade().getOverriddenOperation();
1185    }
1186
1187    /**
1188     * Gets the owner of this operation
1189     * @see OperationFacade#getOwner()
1190     */
1191    public ClassifierFacade getOwner()
1192    {
1193        return this.getSuperOperationFacade().getOwner();
1194    }
1195
1196    /**
1197     * Return all parameters for the operation, including the return parameter.
1198     * @see OperationFacade#getParameters()
1199     */
1200    public Collection<ParameterFacade> getParameters()
1201    {
1202        return this.getSuperOperationFacade().getParameters();
1203    }
1204
1205    /**
1206     * The name of the operation that handles postcondition constraints.
1207     * @see OperationFacade#getPostconditionName()
1208     */
1209    public String getPostconditionName()
1210    {
1211        return this.getSuperOperationFacade().getPostconditionName();
1212    }
1213
1214    /**
1215     * The postcondition constraints belonging to this operation.
1216     * @see OperationFacade#getPostconditions()
1217     */
1218    public Collection<ConstraintFacade> getPostconditions()
1219    {
1220        return this.getSuperOperationFacade().getPostconditions();
1221    }
1222
1223    /**
1224     * The call to the precondition operation.
1225     * @see OperationFacade#getPreconditionCall()
1226     */
1227    public String getPreconditionCall()
1228    {
1229        return this.getSuperOperationFacade().getPreconditionCall();
1230    }
1231
1232    /**
1233     * The name of the operation that handles precondition constraints.
1234     * @see OperationFacade#getPreconditionName()
1235     */
1236    public String getPreconditionName()
1237    {
1238        return this.getSuperOperationFacade().getPreconditionName();
1239    }
1240
1241    /**
1242     * The signature of the precondition operation.
1243     * @see OperationFacade#getPreconditionSignature()
1244     */
1245    public String getPreconditionSignature()
1246    {
1247        return this.getSuperOperationFacade().getPreconditionSignature();
1248    }
1249
1250    /**
1251     * The precondition constraints belonging to this operation.
1252     * @see OperationFacade#getPreconditions()
1253     */
1254    public Collection<ConstraintFacade> getPreconditions()
1255    {
1256        return this.getSuperOperationFacade().getPreconditions();
1257    }
1258
1259    /**
1260     * (UML2 Only). Get the actual return parameter (which may have stereotypes etc).
1261     * @see OperationFacade#getReturnParameter()
1262     */
1263    public ParameterFacade getReturnParameter()
1264    {
1265        return this.getSuperOperationFacade().getReturnParameter();
1266    }
1267
1268    /**
1269     * The operation return type parameter.
1270     * @see OperationFacade#getReturnType()
1271     */
1272    public ClassifierFacade getReturnType()
1273    {
1274        return this.getSuperOperationFacade().getReturnType();
1275    }
1276
1277    /**
1278     * Return the operation signature, including public/protested abstract returnType name plus
1279     * argument type and name
1280     * @see OperationFacade#getSignature()
1281     */
1282    public String getSignature()
1283    {
1284        return this.getSuperOperationFacade().getSignature();
1285    }
1286
1287    /**
1288     * Returns the signature of the operation and optionally appends the argument names (if
1289     * withArgumentNames is true), otherwise returns the signature with just the types alone in the
1290     * signature.
1291     * @see OperationFacade#getSignature(boolean withArgumentNames)
1292     */
1293    public String getSignature(boolean withArgumentNames)
1294    {
1295        return this.getSuperOperationFacade().getSignature(withArgumentNames);
1296    }
1297
1298    /**
1299     * Returns the signature of the operation and optionally appends the given 'argumentModifier' to
1300     * each argument.
1301     * @see OperationFacade#getSignature(String argumentModifier)
1302     */
1303    public String getSignature(String argumentModifier)
1304    {
1305        return this.getSuperOperationFacade().getSignature(argumentModifier);
1306    }
1307
1308    /**
1309     * A comma-separated parameter list  (type and name of each parameter) of an operation.
1310     * @see OperationFacade#getTypedArgumentList()
1311     */
1312    public String getTypedArgumentList()
1313    {
1314        return this.getSuperOperationFacade().getTypedArgumentList();
1315    }
1316
1317    /**
1318     * A comma-separated parameter list  (type and name of each parameter) of an operation with an
1319     * optional modifier (i.e final) before each parameter.
1320     * @see OperationFacade#getTypedArgumentList(String modifier)
1321     */
1322    public String getTypedArgumentList(String modifier)
1323    {
1324        return this.getSuperOperationFacade().getTypedArgumentList(modifier);
1325    }
1326
1327    /**
1328     * the upper value for the multiplicity (will be -1 for *)
1329     * - only applicable for UML2
1330     * @see OperationFacade#getUpper()
1331     */
1332    public int getUpper()
1333    {
1334        return this.getSuperOperationFacade().getUpper();
1335    }
1336
1337    /**
1338     * True is the operation is abstract.
1339     * @see OperationFacade#isAbstract()
1340     */
1341    public boolean isAbstract()
1342    {
1343        return this.getSuperOperationFacade().isAbstract();
1344    }
1345
1346    /**
1347     * True if the operation has (i.e. throws any exceptions) false otherwise.
1348     * @see OperationFacade#isExceptionsPresent()
1349     */
1350    public boolean isExceptionsPresent()
1351    {
1352        return this.getSuperOperationFacade().isExceptionsPresent();
1353    }
1354
1355    /**
1356     * IsLeaf property in the operation. If true, operation is final, cannot be extended or
1357     * implemented by a descendant. Default=false.
1358     * @see OperationFacade#isLeaf()
1359     */
1360    public boolean isLeaf()
1361    {
1362        return this.getSuperOperationFacade().isLeaf();
1363    }
1364
1365    /**
1366     * UML2 only. If the return type parameter multiplicity>1 OR the operation multiplicity>1.
1367     * Default=false.
1368     * @see OperationFacade#isMany()
1369     */
1370    public boolean isMany()
1371    {
1372        return this.getSuperOperationFacade().isMany();
1373    }
1374
1375    /**
1376     * UML2 only: If isMany (Collection type returned), is the type unique within the collection. 
1377     * Unique+Ordered determines CollectionType implementation of return result. Default=false.
1378     * @see OperationFacade#isOrdered()
1379     */
1380    public boolean isOrdered()
1381    {
1382        return this.getSuperOperationFacade().isOrdered();
1383    }
1384
1385    /**
1386     * True if this operation overrides an operation defined in an ancestor class. An operation
1387     * overrides when the names of the operations as well as the types of the arguments are equal.
1388     * The return type may be different and is, as well as any exceptions, ignored.
1389     * @see OperationFacade#isOverriding()
1390     */
1391    public boolean isOverriding()
1392    {
1393        return this.getSuperOperationFacade().isOverriding();
1394    }
1395
1396    /**
1397     * Whether any postcondition constraints are present on this operation.
1398     * @see OperationFacade#isPostconditionsPresent()
1399     */
1400    public boolean isPostconditionsPresent()
1401    {
1402        return this.getSuperOperationFacade().isPostconditionsPresent();
1403    }
1404
1405    /**
1406     * Whether any precondition constraints are present on this operation.
1407     * @see OperationFacade#isPreconditionsPresent()
1408     */
1409    public boolean isPreconditionsPresent()
1410    {
1411        return this.getSuperOperationFacade().isPreconditionsPresent();
1412    }
1413
1414    /**
1415     * Indicates whether or not this operation is a query operation.
1416     * @see OperationFacade#isQuery()
1417     */
1418    public boolean isQuery()
1419    {
1420        return this.getSuperOperationFacade().isQuery();
1421    }
1422
1423    /**
1424     * True/false depending on whether or not the operation has a return type or not (i.e. a return
1425     * type of something other than void).
1426     * @see OperationFacade#isReturnTypePresent()
1427     */
1428    public boolean isReturnTypePresent()
1429    {
1430        return this.getSuperOperationFacade().isReturnTypePresent();
1431    }
1432
1433    /**
1434     * True is the operation is static (only a single instance can be instantiated).
1435     * @see OperationFacade#isStatic()
1436     */
1437    public boolean isStatic()
1438    {
1439        return this.getSuperOperationFacade().isStatic();
1440    }
1441
1442    /**
1443     * UML2 only: for Collection return type, is the type unique within the collection.
1444     * Unique+Ordered determines the returned CollectionType. Default=false.
1445     * @see OperationFacade#isUnique()
1446     */
1447    public boolean isUnique()
1448    {
1449        return this.getSuperOperationFacade().isUnique();
1450    }
1451
1452    /**
1453     * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1454     */
1455    @Override
1456    public void initialize()
1457    {
1458        this.getSuperOperationFacade().initialize();
1459    }
1460
1461    /**
1462     * @return Object getSuperOperationFacade().getValidationOwner()
1463     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1464     */
1465    @Override
1466    public Object getValidationOwner()
1467    {
1468        Object owner = this.getSuperOperationFacade().getValidationOwner();
1469        return owner;
1470    }
1471
1472    /**
1473     * @return String getSuperOperationFacade().getValidationName()
1474     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1475     */
1476    @Override
1477    public String getValidationName()
1478    {
1479        String name = this.getSuperOperationFacade().getValidationName();
1480        return name;
1481    }
1482
1483    /**
1484     * @param validationMessages Collection<ModelValidationMessage>
1485     * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1486     */
1487    @Override
1488    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1489    {
1490        this.getSuperOperationFacade().validateInvariants(validationMessages);
1491    }
1492
1493    /**
1494     * The property that stores the name of the metafacade.
1495     */
1496    private static final String NAME_PROPERTY = "name";
1497    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1498
1499    /**
1500     * @see Object#toString()
1501     */
1502    @Override
1503    public String toString()
1504    {
1505        final StringBuilder toString = new StringBuilder(this.getClass().getName());
1506        toString.append("[");
1507        try
1508        {
1509            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1510        }
1511        catch (final Throwable tryAgain)
1512        {
1513            try
1514            {
1515                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1516            }
1517            catch (final Throwable ignore)
1518            {
1519                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1520            }
1521        }
1522        toString.append("]");
1523        return toString.toString();
1524    }
1525}