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 }