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.meta.metafacades;
6   
7   import java.util.Collection;
8   import org.andromda.core.common.Introspector;
9   import org.andromda.core.metafacade.MetafacadeBase;
10  import org.andromda.core.metafacade.MetafacadeFactory;
11  import org.andromda.core.metafacade.ModelValidationMessage;
12  import org.andromda.metafacades.uml.ConstraintFacade;
13  import org.andromda.metafacades.uml.DependencyFacade;
14  import org.andromda.metafacades.uml.GeneralizableElementFacade;
15  import org.andromda.metafacades.uml.GeneralizationFacade;
16  import org.andromda.metafacades.uml.ModelElementFacade;
17  import org.andromda.metafacades.uml.ModelFacade;
18  import org.andromda.metafacades.uml.PackageFacade;
19  import org.andromda.metafacades.uml.StateMachineFacade;
20  import org.andromda.metafacades.uml.StereotypeFacade;
21  import org.andromda.metafacades.uml.TaggedValueFacade;
22  import org.andromda.metafacades.uml.TemplateParameterFacade;
23  import org.andromda.metafacades.uml.TypeMappings;
24  
25  /**
26   * Represents a generalization between two metafacades.
27   * MetafacadeLogic for MetafacadeGeneralization
28   *
29   * @see MetafacadeGeneralization
30   */
31  public abstract class MetafacadeGeneralizationLogic
32      extends MetafacadeBase
33      implements MetafacadeGeneralization
34  {
35      /**
36       * The underlying UML object
37       * @see Object
38       */
39      protected Object metaObject;
40  
41      /** Create Metafacade implementation instance using the MetafacadeFactory from the context
42       * @param metaObjectIn
43       * @param context
44       */
45      protected MetafacadeGeneralizationLogic(Object metaObjectIn, String context)
46      {
47          super(metaObjectIn, getContext(context));
48          this.superGeneralizationFacade =
49             (GeneralizationFacade)
50              MetafacadeFactory.getInstance().createFacadeImpl(
51                      "org.andromda.metafacades.uml.GeneralizationFacade",
52                      metaObjectIn,
53                      getContext(context));
54          this.metaObject = metaObjectIn;
55      }
56  
57      /**
58       * Gets the context for this metafacade logic instance.
59       * @param context String. Set to MetafacadeGeneralization if null
60       * @return context String
61       */
62      private static String getContext(String context)
63      {
64          if (context == null)
65          {
66              context = "org.andromda.cartridges.meta.metafacades.MetafacadeGeneralization";
67          }
68          return context;
69      }
70  
71      private GeneralizationFacade superGeneralizationFacade;
72      private boolean superGeneralizationFacadeInitialized = false;
73  
74      /**
75       * Gets the GeneralizationFacade parent instance.
76       * @return this.superGeneralizationFacade GeneralizationFacade
77       */
78      private GeneralizationFacade getSuperGeneralizationFacade()
79      {
80          if (!this.superGeneralizationFacadeInitialized)
81          {
82              ((MetafacadeBase)this.superGeneralizationFacade).setMetafacadeContext(this.getMetafacadeContext());
83              this.superGeneralizationFacadeInitialized = true;
84          }
85          return this.superGeneralizationFacade;
86      }
87  
88      /** Reset context only for non-root metafacades
89       * @param context
90       * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
91       */
92      @Override
93      public void resetMetafacadeContext(String context)
94      {
95          if (!this.contextRoot) // reset context only for non-root metafacades
96          {
97              context = getContext(context);  // to have same value as in original constructor call
98              setMetafacadeContext (context);
99              if (this.superGeneralizationFacadeInitialized)
100             {
101                 ((MetafacadeBase)this.superGeneralizationFacade).resetMetafacadeContext(context);
102             }
103         }
104     }
105 
106     /**
107      * @return boolean true always
108      * @see MetafacadeGeneralization
109      */
110     public boolean isMetafacadeGeneralizationMetaType()
111     {
112         return true;
113     }
114 
115     // --------------- attributes ---------------------
116 
117    /**
118     * @see org.andromda.cartridges.meta.metafacades.MetafacadeGeneralization#getPrecedence()
119     * @return Integer
120     */
121     protected abstract Integer handleGetPrecedence();
122 
123     private Integer __precedence1a;
124     private boolean __precedence1aSet = false;
125 
126     /**
127      * Stores the precedence of this generalization (this only matters when multiple inheritance is
128      * taken into account).
129      * @return (Integer)handleGetPrecedence()
130      */
131     public final Integer getPrecedence()
132     {
133         Integer precedence1a = this.__precedence1a;
134         if (!this.__precedence1aSet)
135         {
136             // precedence has no pre constraints
137             precedence1a = handleGetPrecedence();
138             // precedence has no post constraints
139             this.__precedence1a = precedence1a;
140             if (isMetafacadePropertyCachingEnabled())
141             {
142                 this.__precedence1aSet = true;
143             }
144         }
145         return precedence1a;
146     }
147 
148    /**
149     * @see org.andromda.cartridges.meta.metafacades.MetafacadeGeneralization#getGetterName()
150     * @return String
151     */
152     protected abstract String handleGetGetterName();
153 
154     private String __getterName2a;
155     private boolean __getterName2aSet = false;
156 
157     /**
158      * The getter name to retrieve this generalization.
159      * @return (String)handleGetGetterName()
160      */
161     public final String getGetterName()
162     {
163         String getterName2a = this.__getterName2a;
164         if (!this.__getterName2aSet)
165         {
166             // getterName has no pre constraints
167             getterName2a = handleGetGetterName();
168             // getterName has no post constraints
169             this.__getterName2a = getterName2a;
170             if (isMetafacadePropertyCachingEnabled())
171             {
172                 this.__getterName2aSet = true;
173             }
174         }
175         return getterName2a;
176     }
177 
178    /**
179     * @see org.andromda.cartridges.meta.metafacades.MetafacadeGeneralization#getGetterNameVisibility()
180     * @return String
181     */
182     protected abstract String handleGetGetterNameVisibility();
183 
184     private String __getterNameVisibility3a;
185     private boolean __getterNameVisibility3aSet = false;
186 
187     /**
188      * The visibility of the getter name for accessing this generalization.
189      * @return (String)handleGetGetterNameVisibility()
190      */
191     public final String getGetterNameVisibility()
192     {
193         String getterNameVisibility3a = this.__getterNameVisibility3a;
194         if (!this.__getterNameVisibility3aSet)
195         {
196             // getterNameVisibility has no pre constraints
197             getterNameVisibility3a = handleGetGetterNameVisibility();
198             // getterNameVisibility has no post constraints
199             this.__getterNameVisibility3a = getterNameVisibility3a;
200             if (isMetafacadePropertyCachingEnabled())
201             {
202                 this.__getterNameVisibility3aSet = true;
203             }
204         }
205         return getterNameVisibility3a;
206     }
207 
208     /**
209      * @return true
210      * @see GeneralizationFacade
211      */
212     public boolean isGeneralizationFacadeMetaType()
213     {
214         return true;
215     }
216 
217     /**
218      * @return true
219      * @see ModelElementFacade
220      */
221     public boolean isModelElementFacadeMetaType()
222     {
223         return true;
224     }
225 
226     // ----------- delegates to GeneralizationFacade ------------
227     /**
228      * The model element that represents an element that can be generalized or specialized.
229      * @see GeneralizationFacade#getChild()
230      */
231     public GeneralizableElementFacade getChild()
232     {
233         return this.getSuperGeneralizationFacade().getChild();
234     }
235 
236     /**
237      * The model element that represents an element that can be generalized or specialized.
238      * @see GeneralizationFacade#getParent()
239      */
240     public GeneralizableElementFacade getParent()
241     {
242         return this.getSuperGeneralizationFacade().getParent();
243     }
244 
245     /**
246      * Copies all tagged values from the given ModelElementFacade to this model element facade.
247      * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
248      */
249     public void copyTaggedValues(ModelElementFacade element)
250     {
251         this.getSuperGeneralizationFacade().copyTaggedValues(element);
252     }
253 
254     /**
255      * Finds the tagged value with the specified 'tagName'. In case there are more values the first
256      * one found will be returned.
257      * @see ModelElementFacade#findTaggedValue(String tagName)
258      */
259     public Object findTaggedValue(String tagName)
260     {
261         return this.getSuperGeneralizationFacade().findTaggedValue(tagName);
262     }
263 
264     /**
265      * Returns all the values for the tagged value with the specified name. The returned collection
266      * will contains only String instances, or will be empty. Never null.
267      * @see ModelElementFacade#findTaggedValues(String tagName)
268      */
269     public Collection<Object> findTaggedValues(String tagName)
270     {
271         return this.getSuperGeneralizationFacade().findTaggedValues(tagName);
272     }
273 
274     /**
275      * Returns the fully qualified name of the model element. The fully qualified name includes
276      * complete package qualified name of the underlying model element. The templates parameter will
277      * be replaced by the correct one given the binding relation of the parameter to this element.
278      * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
279      */
280     public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
281     {
282         return this.getSuperGeneralizationFacade().getBindedFullyQualifiedName(bindedElement);
283     }
284 
285     /**
286      * Gets all constraints belonging to the model element.
287      * @see ModelElementFacade#getConstraints()
288      */
289     public Collection<ConstraintFacade> getConstraints()
290     {
291         return this.getSuperGeneralizationFacade().getConstraints();
292     }
293 
294     /**
295      * Returns the constraints of the argument kind that have been placed onto this model. Typical
296      * kinds are "inv", "pre" and "post". Other kinds are possible.
297      * @see ModelElementFacade#getConstraints(String kind)
298      */
299     public Collection<ConstraintFacade> getConstraints(String kind)
300     {
301         return this.getSuperGeneralizationFacade().getConstraints(kind);
302     }
303 
304     /**
305      * Gets the documentation for the model element, The indent argument is prefixed to each line.
306      * By default this method wraps lines after 64 characters.
307      * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
308      * @see ModelElementFacade#getDocumentation(String indent)
309      */
310     public String getDocumentation(String indent)
311     {
312         return this.getSuperGeneralizationFacade().getDocumentation(indent);
313     }
314 
315     /**
316      * This method returns the documentation for this model element, with the lines wrapped after
317      * the specified number of characters, values of less than 1 will indicate no line wrapping is
318      * required. By default paragraphs are returned as HTML.
319      * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
320      * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
321      */
322     public String getDocumentation(String indent, int lineLength)
323     {
324         return this.getSuperGeneralizationFacade().getDocumentation(indent, lineLength);
325     }
326 
327     /**
328      * This method returns the documentation for this model element, with the lines wrapped after
329      * the specified number of characters, values of less than 1 will indicate no line wrapping is
330      * required. HTML style determines if HTML Escaping is applied.
331      * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
332      */
333     public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
334     {
335         return this.getSuperGeneralizationFacade().getDocumentation(indent, lineLength, htmlStyle);
336     }
337 
338     /**
339      * The fully qualified name of this model element.
340      * @see ModelElementFacade#getFullyQualifiedName()
341      */
342     public String getFullyQualifiedName()
343     {
344         return this.getSuperGeneralizationFacade().getFullyQualifiedName();
345     }
346 
347     /**
348      * Returns the fully qualified name of the model element. The fully qualified name includes
349      * complete package qualified name of the underlying model element.  If modelName is true, then
350      * the original name of the model element (the name contained within the model) will be the name
351      * returned, otherwise a name from a language mapping will be returned.
352      * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
353      */
354     public String getFullyQualifiedName(boolean modelName)
355     {
356         return this.getSuperGeneralizationFacade().getFullyQualifiedName(modelName);
357     }
358 
359     /**
360      * Returns the fully qualified name as a path, the returned value always starts with out a slash
361      * '/'.
362      * @see ModelElementFacade#getFullyQualifiedNamePath()
363      */
364     public String getFullyQualifiedNamePath()
365     {
366         return this.getSuperGeneralizationFacade().getFullyQualifiedNamePath();
367     }
368 
369     /**
370      * Gets the unique identifier of the underlying model element.
371      * @see ModelElementFacade#getId()
372      */
373     public String getId()
374     {
375         return this.getSuperGeneralizationFacade().getId();
376     }
377 
378     /**
379      * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
380      * are not represented by other properties, i.e. native, transient, volatile, synchronized,
381      * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
382      * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
383      * JDK5 compiler level.
384      * @see ModelElementFacade#getKeywords()
385      */
386     public Collection<String> getKeywords()
387     {
388         return this.getSuperGeneralizationFacade().getKeywords();
389     }
390 
391     /**
392      * UML2: Retrieves a localized label for this named element.
393      * @see ModelElementFacade#getLabel()
394      */
395     public String getLabel()
396     {
397         return this.getSuperGeneralizationFacade().getLabel();
398     }
399 
400     /**
401      * The language mappings that have been set for this model element.
402      * @see ModelElementFacade#getLanguageMappings()
403      */
404     public TypeMappings getLanguageMappings()
405     {
406         return this.getSuperGeneralizationFacade().getLanguageMappings();
407     }
408 
409     /**
410      * Return the model containing this model element (multiple models may be loaded and processed
411      * at the same time).
412      * @see ModelElementFacade#getModel()
413      */
414     public ModelFacade getModel()
415     {
416         return this.getSuperGeneralizationFacade().getModel();
417     }
418 
419     /**
420      * The name of the model element.
421      * @see ModelElementFacade#getName()
422      */
423     public String getName()
424     {
425         return this.getSuperGeneralizationFacade().getName();
426     }
427 
428     /**
429      * Gets the package to which this model element belongs.
430      * @see ModelElementFacade#getPackage()
431      */
432     public ModelElementFacade getPackage()
433     {
434         return this.getSuperGeneralizationFacade().getPackage();
435     }
436 
437     /**
438      * The name of this model element's package.
439      * @see ModelElementFacade#getPackageName()
440      */
441     public String getPackageName()
442     {
443         return this.getSuperGeneralizationFacade().getPackageName();
444     }
445 
446     /**
447      * Gets the package name (optionally providing the ability to retrieve the model name and not
448      * the mapped name).
449      * @see ModelElementFacade#getPackageName(boolean modelName)
450      */
451     public String getPackageName(boolean modelName)
452     {
453         return this.getSuperGeneralizationFacade().getPackageName(modelName);
454     }
455 
456     /**
457      * Returns the package as a path, the returned value always starts with out a slash '/'.
458      * @see ModelElementFacade#getPackagePath()
459      */
460     public String getPackagePath()
461     {
462         return this.getSuperGeneralizationFacade().getPackagePath();
463     }
464 
465     /**
466      * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
467      * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
468      * the names of the containing namespaces starting at the root of the hierarchy and ending with
469      * the name of the NamedElement itself.
470      * @see ModelElementFacade#getQualifiedName()
471      */
472     public String getQualifiedName()
473     {
474         return this.getSuperGeneralizationFacade().getQualifiedName();
475     }
476 
477     /**
478      * Gets the root package for the model element.
479      * @see ModelElementFacade#getRootPackage()
480      */
481     public PackageFacade getRootPackage()
482     {
483         return this.getSuperGeneralizationFacade().getRootPackage();
484     }
485 
486     /**
487      * Gets the dependencies for which this model element is the source.
488      * @see ModelElementFacade#getSourceDependencies()
489      */
490     public Collection<DependencyFacade> getSourceDependencies()
491     {
492         return this.getSuperGeneralizationFacade().getSourceDependencies();
493     }
494 
495     /**
496      * If this model element is the context of an activity graph, this represents that activity
497      * graph.
498      * @see ModelElementFacade#getStateMachineContext()
499      */
500     public StateMachineFacade getStateMachineContext()
501     {
502         return this.getSuperGeneralizationFacade().getStateMachineContext();
503     }
504 
505     /**
506      * The collection of ALL stereotype names for this model element.
507      * @see ModelElementFacade#getStereotypeNames()
508      */
509     public Collection<String> getStereotypeNames()
510     {
511         return this.getSuperGeneralizationFacade().getStereotypeNames();
512     }
513 
514     /**
515      * Gets all stereotypes for this model element.
516      * @see ModelElementFacade#getStereotypes()
517      */
518     public Collection<StereotypeFacade> getStereotypes()
519     {
520         return this.getSuperGeneralizationFacade().getStereotypes();
521     }
522 
523     /**
524      * Return the TaggedValues associated with this model element, under all stereotypes.
525      * @see ModelElementFacade#getTaggedValues()
526      */
527     public Collection<TaggedValueFacade> getTaggedValues()
528     {
529         return this.getSuperGeneralizationFacade().getTaggedValues();
530     }
531 
532     /**
533      * Gets the dependencies for which this model element is the target.
534      * @see ModelElementFacade#getTargetDependencies()
535      */
536     public Collection<DependencyFacade> getTargetDependencies()
537     {
538         return this.getSuperGeneralizationFacade().getTargetDependencies();
539     }
540 
541     /**
542      * Get the template parameter for this model element having the parameterName
543      * @see ModelElementFacade#getTemplateParameter(String parameterName)
544      */
545     public Object getTemplateParameter(String parameterName)
546     {
547         return this.getSuperGeneralizationFacade().getTemplateParameter(parameterName);
548     }
549 
550     /**
551      * Get the template parameters for this model element
552      * @see ModelElementFacade#getTemplateParameters()
553      */
554     public Collection<TemplateParameterFacade> getTemplateParameters()
555     {
556         return this.getSuperGeneralizationFacade().getTemplateParameters();
557     }
558 
559     /**
560      * The visibility (i.e. public, private, protected or package) of the model element, will
561      * attempt a lookup for these values in the language mappings (if any).
562      * @see ModelElementFacade#getVisibility()
563      */
564     public String getVisibility()
565     {
566         return this.getSuperGeneralizationFacade().getVisibility();
567     }
568 
569     /**
570      * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
571      * is taken into account when searching for the stereotype), false otherwise.
572      * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
573      */
574     public boolean hasExactStereotype(String stereotypeName)
575     {
576         return this.getSuperGeneralizationFacade().hasExactStereotype(stereotypeName);
577     }
578 
579     /**
580      * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
581      * pipe, semicolon, or << >>
582      * @see ModelElementFacade#hasKeyword(String keywordName)
583      */
584     public boolean hasKeyword(String keywordName)
585     {
586         return this.getSuperGeneralizationFacade().hasKeyword(keywordName);
587     }
588 
589     /**
590      * Returns true if the model element has the specified stereotype.  If the stereotype itself
591      * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
592      * one of the stereotype's ancestors has a matching name this method will return true, false
593      * otherwise.
594      * For example, if we have a certain stereotype called <<exception>> and a model element has a
595      * stereotype called <<applicationException>> which extends <<exception>>, when calling this
596      * method with 'stereotypeName' defined as 'exception' the method would return true since
597      * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
598      * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
599      * @see ModelElementFacade#hasStereotype(String stereotypeName)
600      */
601     public boolean hasStereotype(String stereotypeName)
602     {
603         return this.getSuperGeneralizationFacade().hasStereotype(stereotypeName);
604     }
605 
606     /**
607      * True if there are target dependencies from this element that are instances of BindingFacade.
608      * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
609      * @see ModelElementFacade#isBindingDependenciesPresent()
610      */
611     public boolean isBindingDependenciesPresent()
612     {
613         return this.getSuperGeneralizationFacade().isBindingDependenciesPresent();
614     }
615 
616     /**
617      * Indicates if any constraints are present on this model element.
618      * @see ModelElementFacade#isConstraintsPresent()
619      */
620     public boolean isConstraintsPresent()
621     {
622         return this.getSuperGeneralizationFacade().isConstraintsPresent();
623     }
624 
625     /**
626      * Indicates if any documentation is present on this model element.
627      * @see ModelElementFacade#isDocumentationPresent()
628      */
629     public boolean isDocumentationPresent()
630     {
631         return this.getSuperGeneralizationFacade().isDocumentationPresent();
632     }
633 
634     /**
635      * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
636      * @see ModelElementFacade#isReservedWord()
637      */
638     public boolean isReservedWord()
639     {
640         return this.getSuperGeneralizationFacade().isReservedWord();
641     }
642 
643     /**
644      * True is there are template parameters on this model element. For UML2, applies to Class,
645      * Operation, Property, and Parameter.
646      * @see ModelElementFacade#isTemplateParametersPresent()
647      */
648     public boolean isTemplateParametersPresent()
649     {
650         return this.getSuperGeneralizationFacade().isTemplateParametersPresent();
651     }
652 
653     /**
654      * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
655      * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
656      * Enumerations and Interfaces, optionally applies on other model elements.
657      * @see ModelElementFacade#isValidIdentifierName()
658      */
659     public boolean isValidIdentifierName()
660     {
661         return this.getSuperGeneralizationFacade().isValidIdentifierName();
662     }
663 
664     /**
665      * Searches for the constraint with the specified 'name' on this model element, and if found
666      * translates it using the specified 'translation' from a translation library discovered by the
667      * framework.
668      * @see ModelElementFacade#translateConstraint(String name, String translation)
669      */
670     public String translateConstraint(String name, String translation)
671     {
672         return this.getSuperGeneralizationFacade().translateConstraint(name, translation);
673     }
674 
675     /**
676      * Translates all constraints belonging to this model element with the given 'translation'.
677      * @see ModelElementFacade#translateConstraints(String translation)
678      */
679     public String[] translateConstraints(String translation)
680     {
681         return this.getSuperGeneralizationFacade().translateConstraints(translation);
682     }
683 
684     /**
685      * Translates the constraints of the specified 'kind' belonging to this model element.
686      * @see ModelElementFacade#translateConstraints(String kind, String translation)
687      */
688     public String[] translateConstraints(String kind, String translation)
689     {
690         return this.getSuperGeneralizationFacade().translateConstraints(kind, translation);
691     }
692 
693     /**
694      * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
695      */
696     @Override
697     public void initialize()
698     {
699         this.getSuperGeneralizationFacade().initialize();
700     }
701 
702     /**
703      * @return Object getSuperGeneralizationFacade().getValidationOwner()
704      * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
705      */
706     @Override
707     public Object getValidationOwner()
708     {
709         Object owner = this.getSuperGeneralizationFacade().getValidationOwner();
710         return owner;
711     }
712 
713     /**
714      * @return String getSuperGeneralizationFacade().getValidationName()
715      * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
716      */
717     @Override
718     public String getValidationName()
719     {
720         String name = this.getSuperGeneralizationFacade().getValidationName();
721         return name;
722     }
723 
724     /**
725      * @param validationMessages Collection<ModelValidationMessage>
726      * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
727      */
728     @Override
729     public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
730     {
731         this.getSuperGeneralizationFacade().validateInvariants(validationMessages);
732     }
733 
734     /**
735      * The property that stores the name of the metafacade.
736      */
737     private static final String NAME_PROPERTY = "name";
738     private static final String FQNAME_PROPERTY = "fullyQualifiedName";
739 
740     /**
741      * @see Object#toString()
742      */
743     @Override
744     public String toString()
745     {
746         final StringBuilder toString = new StringBuilder(this.getClass().getName());
747         toString.append("[");
748         try
749         {
750             toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
751         }
752         catch (final Throwable tryAgain)
753         {
754             try
755             {
756                 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
757             }
758             catch (final Throwable ignore)
759             {
760                 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
761             }
762         }
763         toString.append("]");
764         return toString.toString();
765     }
766 }