1 // license-header java merge-point
2 //
3 // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4 //
5 package org.andromda.cartridges.jsf.metafacades;
6
7 import java.util.Collection;
8 import java.util.List;
9 import org.andromda.core.common.Introspector;
10 import org.andromda.core.metafacade.MetafacadeBase;
11 import org.andromda.core.metafacade.MetafacadeFactory;
12 import org.andromda.core.metafacade.ModelValidationMessage;
13 import org.andromda.metafacades.uml.AssociationEndFacade;
14 import org.andromda.metafacades.uml.AttributeFacade;
15 import org.andromda.metafacades.uml.ClassifierFacade;
16 import org.andromda.metafacades.uml.ConstraintFacade;
17 import org.andromda.metafacades.uml.DependencyFacade;
18 import org.andromda.metafacades.uml.FrontEndAction;
19 import org.andromda.metafacades.uml.FrontEndController;
20 import org.andromda.metafacades.uml.FrontEndUseCase;
21 import org.andromda.metafacades.uml.GeneralizableElementFacade;
22 import org.andromda.metafacades.uml.GeneralizationFacade;
23 import org.andromda.metafacades.uml.ModelElementFacade;
24 import org.andromda.metafacades.uml.ModelFacade;
25 import org.andromda.metafacades.uml.OperationFacade;
26 import org.andromda.metafacades.uml.PackageFacade;
27 import org.andromda.metafacades.uml.StateMachineFacade;
28 import org.andromda.metafacades.uml.StereotypeFacade;
29 import org.andromda.metafacades.uml.TaggedValueFacade;
30 import org.andromda.metafacades.uml.TemplateParameterFacade;
31 import org.andromda.metafacades.uml.TypeMappings;
32 import org.apache.log4j.Logger;
33
34 /**
35 * Represents a controller for a JSF application.
36 * MetafacadeLogic for JSFController
37 *
38 * @see JSFController
39 */
40 public abstract class JSFControllerLogic
41 extends MetafacadeBase
42 implements JSFController
43 {
44 /**
45 * The underlying UML object
46 * @see Object
47 */
48 protected Object metaObject;
49
50 /** Create Metafacade implementation instance using the MetafacadeFactory from the context
51 * @param metaObjectIn
52 * @param context
53 */
54 protected JSFControllerLogic(Object metaObjectIn, String context)
55 {
56 super(metaObjectIn, getContext(context));
57 this.superFrontEndController =
58 (FrontEndController)
59 MetafacadeFactory.getInstance().createFacadeImpl(
60 "org.andromda.metafacades.uml.FrontEndController",
61 metaObjectIn,
62 getContext(context));
63 this.metaObject = metaObjectIn;
64 }
65
66 /**
67 * The logger instance.
68 */
69 private static final Logger logger = Logger.getLogger(JSFControllerLogic.class);
70
71 /**
72 * Gets the context for this metafacade logic instance.
73 * @param context String. Set to JSFController if null
74 * @return context String
75 */
76 private static String getContext(String context)
77 {
78 if (context == null)
79 {
80 context = "org.andromda.cartridges.jsf.metafacades.JSFController";
81 }
82 return context;
83 }
84
85 private FrontEndController superFrontEndController;
86 private boolean superFrontEndControllerInitialized = false;
87
88 /**
89 * Gets the FrontEndController parent instance.
90 * @return this.superFrontEndController FrontEndController
91 */
92 private FrontEndController getSuperFrontEndController()
93 {
94 if (!this.superFrontEndControllerInitialized)
95 {
96 ((MetafacadeBase)this.superFrontEndController).setMetafacadeContext(this.getMetafacadeContext());
97 this.superFrontEndControllerInitialized = true;
98 }
99 return this.superFrontEndController;
100 }
101
102 /** Reset context only for non-root metafacades
103 * @param context
104 * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
105 */
106 @Override
107 public void resetMetafacadeContext(String context)
108 {
109 if (!this.contextRoot) // reset context only for non-root metafacades
110 {
111 context = getContext(context); // to have same value as in original constructor call
112 setMetafacadeContext (context);
113 if (this.superFrontEndControllerInitialized)
114 {
115 ((MetafacadeBase)this.superFrontEndController).resetMetafacadeContext(context);
116 }
117 }
118 }
119
120 /**
121 * @return boolean true always
122 * @see JSFController
123 */
124 public boolean isJSFControllerMetaType()
125 {
126 return true;
127 }
128
129 // --------------- attributes ---------------------
130
131 /**
132 * @see org.andromda.cartridges.jsf.metafacades.JSFController#getImplementationName()
133 * @return String
134 */
135 protected abstract String handleGetImplementationName();
136
137 private String __implementationName1a;
138 private boolean __implementationName1aSet = false;
139
140 /**
141 * The implementation name of this controller.
142 * @return (String)handleGetImplementationName()
143 */
144 public final String getImplementationName()
145 {
146 String implementationName1a = this.__implementationName1a;
147 if (!this.__implementationName1aSet)
148 {
149 // implementationName has no pre constraints
150 implementationName1a = handleGetImplementationName();
151 // implementationName has no post constraints
152 this.__implementationName1a = implementationName1a;
153 if (isMetafacadePropertyCachingEnabled())
154 {
155 this.__implementationName1aSet = true;
156 }
157 }
158 return implementationName1a;
159 }
160
161 /**
162 * @see org.andromda.cartridges.jsf.metafacades.JSFController#getFullyQualifiedImplementationName()
163 * @return String
164 */
165 protected abstract String handleGetFullyQualifiedImplementationName();
166
167 private String __fullyQualifiedImplementationName2a;
168 private boolean __fullyQualifiedImplementationName2aSet = false;
169
170 /**
171 * The fully qualified implementation name of this controller.
172 * @return (String)handleGetFullyQualifiedImplementationName()
173 */
174 public final String getFullyQualifiedImplementationName()
175 {
176 String fullyQualifiedImplementationName2a = this.__fullyQualifiedImplementationName2a;
177 if (!this.__fullyQualifiedImplementationName2aSet)
178 {
179 // fullyQualifiedImplementationName has no pre constraints
180 fullyQualifiedImplementationName2a = handleGetFullyQualifiedImplementationName();
181 // fullyQualifiedImplementationName has no post constraints
182 this.__fullyQualifiedImplementationName2a = fullyQualifiedImplementationName2a;
183 if (isMetafacadePropertyCachingEnabled())
184 {
185 this.__fullyQualifiedImplementationName2aSet = true;
186 }
187 }
188 return fullyQualifiedImplementationName2a;
189 }
190
191 /**
192 * @see org.andromda.cartridges.jsf.metafacades.JSFController#getFullyQualifiedImplementationPath()
193 * @return String
194 */
195 protected abstract String handleGetFullyQualifiedImplementationPath();
196
197 private String __fullyQualifiedImplementationPath3a;
198 private boolean __fullyQualifiedImplementationPath3aSet = false;
199
200 /**
201 * The fully qualified path to the controller implemention file.
202 * @return (String)handleGetFullyQualifiedImplementationPath()
203 */
204 public final String getFullyQualifiedImplementationPath()
205 {
206 String fullyQualifiedImplementationPath3a = this.__fullyQualifiedImplementationPath3a;
207 if (!this.__fullyQualifiedImplementationPath3aSet)
208 {
209 // fullyQualifiedImplementationPath has no pre constraints
210 fullyQualifiedImplementationPath3a = handleGetFullyQualifiedImplementationPath();
211 // fullyQualifiedImplementationPath has no post constraints
212 this.__fullyQualifiedImplementationPath3a = fullyQualifiedImplementationPath3a;
213 if (isMetafacadePropertyCachingEnabled())
214 {
215 this.__fullyQualifiedImplementationPath3aSet = true;
216 }
217 }
218 return fullyQualifiedImplementationPath3a;
219 }
220
221 /**
222 * @see org.andromda.cartridges.jsf.metafacades.JSFController#getBeanName()
223 * @return String
224 */
225 protected abstract String handleGetBeanName();
226
227 private String __beanName4a;
228 private boolean __beanName4aSet = false;
229
230 /**
231 * The bean name of this controller (this is what is stored in the JSF configuration file).
232 * @return (String)handleGetBeanName()
233 */
234 public final String getBeanName()
235 {
236 String beanName4a = this.__beanName4a;
237 if (!this.__beanName4aSet)
238 {
239 // beanName has no pre constraints
240 beanName4a = handleGetBeanName();
241 // beanName has no post constraints
242 this.__beanName4a = beanName4a;
243 if (isMetafacadePropertyCachingEnabled())
244 {
245 this.__beanName4aSet = true;
246 }
247 }
248 return beanName4a;
249 }
250
251 /**
252 * @see org.andromda.cartridges.jsf.metafacades.JSFController#getControllerSerialVersionUID()
253 * @return String
254 */
255 protected abstract String handleGetControllerSerialVersionUID();
256
257 private String __controllerSerialVersionUID5a;
258 private boolean __controllerSerialVersionUID5aSet = false;
259
260 /**
261 * The calculated serial version UID for this controller.
262 * @return (String)handleGetControllerSerialVersionUID()
263 */
264 public final String getControllerSerialVersionUID()
265 {
266 String controllerSerialVersionUID5a = this.__controllerSerialVersionUID5a;
267 if (!this.__controllerSerialVersionUID5aSet)
268 {
269 // controllerSerialVersionUID has no pre constraints
270 controllerSerialVersionUID5a = handleGetControllerSerialVersionUID();
271 // controllerSerialVersionUID has no post constraints
272 this.__controllerSerialVersionUID5a = controllerSerialVersionUID5a;
273 if (isMetafacadePropertyCachingEnabled())
274 {
275 this.__controllerSerialVersionUID5aSet = true;
276 }
277 }
278 return controllerSerialVersionUID5a;
279 }
280
281 // ------------- associations ------------------
282
283 /**
284 * Represents a controller for a JSF application.
285 * @return (List<DependencyFacade>)handleGetSessionObjectReferences()
286 */
287 public final List<DependencyFacade> getSessionObjectReferences()
288 {
289 List<DependencyFacade> getSessionObjectReferences1r = null;
290 // jSFController has no pre constraints
291 List result = handleGetSessionObjectReferences();
292 List shieldedResult = this.shieldedElements(result);
293 try
294 {
295 getSessionObjectReferences1r = (List<DependencyFacade>)shieldedResult;
296 }
297 catch (ClassCastException ex)
298 {
299 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
300 JSFControllerLogic.logger.warn("incorrect metafacade cast for JSFControllerLogic.getSessionObjectReferences List<DependencyFacade> " + result + ": " + shieldedResult);
301 }
302 // jSFController has no post constraints
303 return getSessionObjectReferences1r;
304 }
305
306 /**
307 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
308 * @return List
309 */
310 protected abstract List handleGetSessionObjectReferences();
311
312 /**
313 * @return true
314 * @see FrontEndController
315 */
316 public boolean isFrontEndControllerMetaType()
317 {
318 return true;
319 }
320
321 /**
322 * @return true
323 * @see ClassifierFacade
324 */
325 public boolean isClassifierFacadeMetaType()
326 {
327 return true;
328 }
329
330 /**
331 * @return true
332 * @see GeneralizableElementFacade
333 */
334 public boolean isGeneralizableElementFacadeMetaType()
335 {
336 return true;
337 }
338
339 /**
340 * @return true
341 * @see ModelElementFacade
342 */
343 public boolean isModelElementFacadeMetaType()
344 {
345 return true;
346 }
347
348 // ----------- delegates to FrontEndController ------------
349 /**
350 * Return the attribute which name matches the parameter
351 * @see ClassifierFacade#findAttribute(String name)
352 */
353 public AttributeFacade findAttribute(String name)
354 {
355 return this.getSuperFrontEndController().findAttribute(name);
356 }
357
358 /**
359 * Those abstraction dependencies for which this classifier is the client.
360 * @see ClassifierFacade#getAbstractions()
361 */
362 public Collection<ClassifierFacade> getAbstractions()
363 {
364 return this.getSuperFrontEndController().getAbstractions();
365 }
366
367 /**
368 * Lists all classes associated to this one and any ancestor classes (through generalization).
369 * There will be no duplicates. The order of the elements is predictable.
370 * @see ClassifierFacade#getAllAssociatedClasses()
371 */
372 public Collection<ClassifierFacade> getAllAssociatedClasses()
373 {
374 return this.getSuperFrontEndController().getAllAssociatedClasses();
375 }
376
377 /**
378 * A collection containing all 'properties' of the classifier and its ancestors. Properties are
379 * any attributes and navigable connecting association ends.
380 * @see ClassifierFacade#getAllProperties()
381 */
382 public Collection<ModelElementFacade> getAllProperties()
383 {
384 return this.getSuperFrontEndController().getAllProperties();
385 }
386
387 /**
388 * A collection containing all required and/or read-only 'properties' of the classifier and its
389 * ancestors. Properties are any attributes and navigable connecting association ends.
390 * @see ClassifierFacade#getAllRequiredConstructorParameters()
391 */
392 public Collection<ModelElementFacade> getAllRequiredConstructorParameters()
393 {
394 return this.getSuperFrontEndController().getAllRequiredConstructorParameters();
395 }
396
397 /**
398 * Gets the array type for this classifier. If this classifier already represents an array, it
399 * just returns itself.
400 * @see ClassifierFacade#getArray()
401 */
402 public ClassifierFacade getArray()
403 {
404 return this.getSuperFrontEndController().getArray();
405 }
406
407 /**
408 * The name of the classifier as an array.
409 * @see ClassifierFacade#getArrayName()
410 */
411 public String getArrayName()
412 {
413 return this.getSuperFrontEndController().getArrayName();
414 }
415
416 /**
417 * Lists the classes associated to this one, there is no repitition of classes. The order of the
418 * elements is predictable.
419 * @see ClassifierFacade#getAssociatedClasses()
420 */
421 public Collection<ClassifierFacade> getAssociatedClasses()
422 {
423 return this.getSuperFrontEndController().getAssociatedClasses();
424 }
425
426 /**
427 * Gets the association ends belonging to a classifier.
428 * @see ClassifierFacade#getAssociationEnds()
429 */
430 public List<AssociationEndFacade> getAssociationEnds()
431 {
432 return this.getSuperFrontEndController().getAssociationEnds();
433 }
434
435 /**
436 * Gets the attributes that belong to the classifier.
437 * @see ClassifierFacade#getAttributes()
438 */
439 public List<AttributeFacade> getAttributes()
440 {
441 return this.getSuperFrontEndController().getAttributes();
442 }
443
444 /**
445 * Gets all attributes for the classifier and if 'follow' is true goes up the inheritance
446 * hierarchy and gets the attributes from the super classes as well.
447 * @see ClassifierFacade#getAttributes(boolean follow)
448 */
449 public List<AttributeFacade> getAttributes(boolean follow)
450 {
451 return this.getSuperFrontEndController().getAttributes(follow);
452 }
453
454 /**
455 * The fully qualified name of the classifier as an array.
456 * @see ClassifierFacade#getFullyQualifiedArrayName()
457 */
458 public String getFullyQualifiedArrayName()
459 {
460 return this.getSuperFrontEndController().getFullyQualifiedArrayName();
461 }
462
463 /**
464 * Returns all those operations that could be implemented at this classifier's level. This means
465 * the operations owned by this classifier as well as any realized interface's operations
466 * (recursively) in case this classifier itself is not already an interface, or generalized when
467 * this classifier is an interface.
468 * @see ClassifierFacade#getImplementationOperations()
469 */
470 public Collection<OperationFacade> getImplementationOperations()
471 {
472 return this.getSuperFrontEndController().getImplementationOperations();
473 }
474
475 /**
476 * A comma separated list of the fully qualified names of all implemented interfaces.
477 * @see ClassifierFacade#getImplementedInterfaceList()
478 */
479 public String getImplementedInterfaceList()
480 {
481 return this.getSuperFrontEndController().getImplementedInterfaceList();
482 }
483
484 /**
485 * Those attributes that are scoped to an instance of this class.
486 * @see ClassifierFacade#getInstanceAttributes()
487 */
488 public Collection<AttributeFacade> getInstanceAttributes()
489 {
490 return this.getSuperFrontEndController().getInstanceAttributes();
491 }
492
493 /**
494 * Those operations that are scoped to an instance of this class.
495 * @see ClassifierFacade#getInstanceOperations()
496 */
497 public List<OperationFacade> getInstanceOperations()
498 {
499 return this.getSuperFrontEndController().getInstanceOperations();
500 }
501
502 /**
503 * Those interfaces that are abstractions of this classifier, this basically means this
504 * classifier realizes them.
505 * @see ClassifierFacade#getInterfaceAbstractions()
506 */
507 public Collection<ClassifierFacade> getInterfaceAbstractions()
508 {
509 return this.getSuperFrontEndController().getInterfaceAbstractions();
510 }
511
512 /**
513 * A String representing a new Constructor declaration for this classifier type to be used in a
514 * Java environment.
515 * @see ClassifierFacade#getJavaNewString()
516 */
517 public String getJavaNewString()
518 {
519 return this.getSuperFrontEndController().getJavaNewString();
520 }
521
522 /**
523 * A String representing the null-value for this classifier type to be used in a Java
524 * environment.
525 * @see ClassifierFacade#getJavaNullString()
526 */
527 public String getJavaNullString()
528 {
529 return this.getSuperFrontEndController().getJavaNullString();
530 }
531
532 /**
533 * The other ends of this classifier's association ends which are navigable.
534 * @see ClassifierFacade#getNavigableConnectingEnds()
535 */
536 public Collection<AssociationEndFacade> getNavigableConnectingEnds()
537 {
538 return this.getSuperFrontEndController().getNavigableConnectingEnds();
539 }
540
541 /**
542 * Get the other ends of this classifier's association ends which are navigable and if 'follow'
543 * is true goes up the inheritance hierarchy and gets the super association ends as well.
544 * @see ClassifierFacade#getNavigableConnectingEnds(boolean follow)
545 */
546 public List<AssociationEndFacade> getNavigableConnectingEnds(boolean follow)
547 {
548 return this.getSuperFrontEndController().getNavigableConnectingEnds(follow);
549 }
550
551 /**
552 * Assuming that the classifier is an array, this will return the non array type of the
553 * classifier from
554 * the model. If the classifier is NOT an array, it will just return itself.
555 * @see ClassifierFacade#getNonArray()
556 */
557 public ClassifierFacade getNonArray()
558 {
559 return this.getSuperFrontEndController().getNonArray();
560 }
561
562 /**
563 * The attributes from this classifier in the form of an operation call (this example would be
564 * in Java): '(String attributeOne, String attributeTwo). If there were no attributes on the
565 * classifier, the result would be an empty '()'.
566 * @see ClassifierFacade#getOperationCallFromAttributes()
567 */
568 public String getOperationCallFromAttributes()
569 {
570 return this.getSuperFrontEndController().getOperationCallFromAttributes();
571 }
572
573 /**
574 * The operations owned by this classifier.
575 * @see ClassifierFacade#getOperations()
576 */
577 public List<OperationFacade> getOperations()
578 {
579 return this.getSuperFrontEndController().getOperations();
580 }
581
582 /**
583 * A collection containing all 'properties' of the classifier. Properties are any attributes
584 * and navigable connecting association ends.
585 * @see ClassifierFacade#getProperties()
586 */
587 public List<ModelElementFacade> getProperties()
588 {
589 return this.getSuperFrontEndController().getProperties();
590 }
591
592 /**
593 * Gets all properties (attributes and navigable association ends) for the classifier and if
594 * 'follow' is true goes up the inheritance hierarchy and gets the properties from the super
595 * classes as well.
596 * @see ClassifierFacade#getProperties(boolean follow)
597 */
598 public List getProperties(boolean follow)
599 {
600 return this.getSuperFrontEndController().getProperties(follow);
601 }
602
603 /**
604 * A collection containing all required and/or read-only 'properties' of the classifier.
605 * Properties are any attributes and navigable connecting association ends.
606 * @see ClassifierFacade#getRequiredConstructorParameters()
607 */
608 public Collection<ModelElementFacade> getRequiredConstructorParameters()
609 {
610 return this.getSuperFrontEndController().getRequiredConstructorParameters();
611 }
612
613 /**
614 * Returns the serial version UID of the underlying model element.
615 * @see ClassifierFacade#getSerialVersionUID()
616 */
617 public long getSerialVersionUID()
618 {
619 return this.getSuperFrontEndController().getSerialVersionUID();
620 }
621
622 /**
623 * Those attributes that are scoped to the definition of this class.
624 * @see ClassifierFacade#getStaticAttributes()
625 */
626 public Collection<AttributeFacade> getStaticAttributes()
627 {
628 return this.getSuperFrontEndController().getStaticAttributes();
629 }
630
631 /**
632 * Those operations that are scoped to the definition of this class.
633 * @see ClassifierFacade#getStaticOperations()
634 */
635 public List<OperationFacade> getStaticOperations()
636 {
637 return this.getSuperFrontEndController().getStaticOperations();
638 }
639
640 /**
641 * This class' superclass, returns the generalization if it is a ClassifierFacade, null
642 * otherwise.
643 * @see ClassifierFacade#getSuperClass()
644 */
645 public ClassifierFacade getSuperClass()
646 {
647 return this.getSuperFrontEndController().getSuperClass();
648 }
649
650 /**
651 * The wrapper name for this classifier if a mapped type has a defined wrapper class (ie. 'long'
652 * maps to 'Long'). If the classifier doesn't have a wrapper defined for it, this method will
653 * return a null. Note that wrapper mappings must be defined for the namespace by defining the
654 * 'wrapperMappingsUri', this property must point to the location of the mappings file which
655 * maps the primitives to wrapper types.
656 * @see ClassifierFacade#getWrapperName()
657 */
658 public String getWrapperName()
659 {
660 return this.getSuperFrontEndController().getWrapperName();
661 }
662
663 /**
664 * Indicates if this classifier is 'abstract'.
665 * @see ClassifierFacade#isAbstract()
666 */
667 public boolean isAbstract()
668 {
669 return this.getSuperFrontEndController().isAbstract();
670 }
671
672 /**
673 * True if this classifier represents an array type. False otherwise.
674 * @see ClassifierFacade#isArrayType()
675 */
676 public boolean isArrayType()
677 {
678 return this.getSuperFrontEndController().isArrayType();
679 }
680
681 /**
682 * True if the ClassifierFacade is an AssociationClass.
683 * @see ClassifierFacade#isAssociationClass()
684 */
685 public boolean isAssociationClass()
686 {
687 return this.getSuperFrontEndController().isAssociationClass();
688 }
689
690 /**
691 * Returns true if this type represents a Blob type.
692 * @see ClassifierFacade#isBlobType()
693 */
694 public boolean isBlobType()
695 {
696 return this.getSuperFrontEndController().isBlobType();
697 }
698
699 /**
700 * Indicates if this type represents a boolean type or not.
701 * @see ClassifierFacade#isBooleanType()
702 */
703 public boolean isBooleanType()
704 {
705 return this.getSuperFrontEndController().isBooleanType();
706 }
707
708 /**
709 * Indicates if this type represents a char, Character, or java.lang.Character type or not.
710 * @see ClassifierFacade#isCharacterType()
711 */
712 public boolean isCharacterType()
713 {
714 return this.getSuperFrontEndController().isCharacterType();
715 }
716
717 /**
718 * Returns true if this type represents a Clob type.
719 * @see ClassifierFacade#isClobType()
720 */
721 public boolean isClobType()
722 {
723 return this.getSuperFrontEndController().isClobType();
724 }
725
726 /**
727 * True if this classifier represents a collection type. False otherwise.
728 * @see ClassifierFacade#isCollectionType()
729 */
730 public boolean isCollectionType()
731 {
732 return this.getSuperFrontEndController().isCollectionType();
733 }
734
735 /**
736 * True/false depending on whether or not this classifier represents a datatype. A data type is
737 * a type whose instances are identified only by their value. A data type may contain attributes
738 * to support the modeling of structured data types.
739 * @see ClassifierFacade#isDataType()
740 */
741 public boolean isDataType()
742 {
743 return this.getSuperFrontEndController().isDataType();
744 }
745
746 /**
747 * True when this classifier is a date type.
748 * @see ClassifierFacade#isDateType()
749 */
750 public boolean isDateType()
751 {
752 return this.getSuperFrontEndController().isDateType();
753 }
754
755 /**
756 * Indicates if this type represents a Double type or not.
757 * @see ClassifierFacade#isDoubleType()
758 */
759 public boolean isDoubleType()
760 {
761 return this.getSuperFrontEndController().isDoubleType();
762 }
763
764 /**
765 * Indicates whether or not this classifier represents an "EmbeddedValue'.
766 * @see ClassifierFacade#isEmbeddedValue()
767 */
768 public boolean isEmbeddedValue()
769 {
770 return this.getSuperFrontEndController().isEmbeddedValue();
771 }
772
773 /**
774 * True if this classifier is in fact marked as an enumeration.
775 * @see ClassifierFacade#isEnumeration()
776 */
777 public boolean isEnumeration()
778 {
779 return this.getSuperFrontEndController().isEnumeration();
780 }
781
782 /**
783 * Returns true if this type represents a 'file' type.
784 * @see ClassifierFacade#isFileType()
785 */
786 public boolean isFileType()
787 {
788 return this.getSuperFrontEndController().isFileType();
789 }
790
791 /**
792 * Indicates if this type represents a Float type or not.
793 * @see ClassifierFacade#isFloatType()
794 */
795 public boolean isFloatType()
796 {
797 return this.getSuperFrontEndController().isFloatType();
798 }
799
800 /**
801 * Indicates if this type represents an int or Integer or java.lang.Integer type or not.
802 * @see ClassifierFacade#isIntegerType()
803 */
804 public boolean isIntegerType()
805 {
806 return this.getSuperFrontEndController().isIntegerType();
807 }
808
809 /**
810 * True/false depending on whether or not this Classifier represents an interface.
811 * @see ClassifierFacade#isInterface()
812 */
813 public boolean isInterface()
814 {
815 return this.getSuperFrontEndController().isInterface();
816 }
817
818 /**
819 * True if this classifier cannot be extended and represent a leaf in the inheritance tree.
820 * @see ClassifierFacade#isLeaf()
821 */
822 public boolean isLeaf()
823 {
824 return this.getSuperFrontEndController().isLeaf();
825 }
826
827 /**
828 * True if this classifier represents a list type. False otherwise.
829 * @see ClassifierFacade#isListType()
830 */
831 public boolean isListType()
832 {
833 return this.getSuperFrontEndController().isListType();
834 }
835
836 /**
837 * Indicates if this type represents a Long type or not.
838 * @see ClassifierFacade#isLongType()
839 */
840 public boolean isLongType()
841 {
842 return this.getSuperFrontEndController().isLongType();
843 }
844
845 /**
846 * Indicates whether or not this classifier represents a Map type.
847 * @see ClassifierFacade#isMapType()
848 */
849 public boolean isMapType()
850 {
851 return this.getSuperFrontEndController().isMapType();
852 }
853
854 /**
855 * Indicates whether or not this classifier represents a primitive type.
856 * @see ClassifierFacade#isPrimitive()
857 */
858 public boolean isPrimitive()
859 {
860 return this.getSuperFrontEndController().isPrimitive();
861 }
862
863 /**
864 * True if this classifier represents a set type. False otherwise.
865 * @see ClassifierFacade#isSetType()
866 */
867 public boolean isSetType()
868 {
869 return this.getSuperFrontEndController().isSetType();
870 }
871
872 /**
873 * Indicates whether or not this classifier represents a string type.
874 * @see ClassifierFacade#isStringType()
875 */
876 public boolean isStringType()
877 {
878 return this.getSuperFrontEndController().isStringType();
879 }
880
881 /**
882 * Indicates whether or not this classifier represents a time type.
883 * @see ClassifierFacade#isTimeType()
884 */
885 public boolean isTimeType()
886 {
887 return this.getSuperFrontEndController().isTimeType();
888 }
889
890 /**
891 * Returns true if this type is a wrapped primitive type.
892 * @see ClassifierFacade#isWrappedPrimitive()
893 */
894 public boolean isWrappedPrimitive()
895 {
896 return this.getSuperFrontEndController().isWrappedPrimitive();
897 }
898
899 /**
900 * All actions that defer to at least one operation of this controller.
901 * @see FrontEndController#getDeferringActions()
902 */
903 public List<FrontEndAction> getDeferringActions()
904 {
905 return this.getSuperFrontEndController().getDeferringActions();
906 }
907
908 /**
909 * Returns all back-end services referenced by this controller.
910 * @see FrontEndController#getServiceReferences()
911 */
912 public List<DependencyFacade> getServiceReferences()
913 {
914 return this.getSuperFrontEndController().getServiceReferences();
915 }
916
917 /**
918 * Returns the use-case "controlled" by this controller.
919 * @see FrontEndController#getUseCase()
920 */
921 public FrontEndUseCase getUseCase()
922 {
923 return this.getSuperFrontEndController().getUseCase();
924 }
925
926 /**
927 * Finds the tagged value optional searching the entire inheritance hierarchy if 'follow' is set
928 * to true.
929 * @see GeneralizableElementFacade#findTaggedValue(String tagName, boolean follow)
930 */
931 public Object findTaggedValue(String tagName, boolean follow)
932 {
933 return this.getSuperFrontEndController().findTaggedValue(tagName, follow);
934 }
935
936 /**
937 * All generalizations for this generalizable element, goes up the inheritance tree.
938 * @see GeneralizableElementFacade#getAllGeneralizations()
939 */
940 public Collection<GeneralizableElementFacade> getAllGeneralizations()
941 {
942 return this.getSuperFrontEndController().getAllGeneralizations();
943 }
944
945 /**
946 * All specializations (travels down the inheritance hierarchy).
947 * @see GeneralizableElementFacade#getAllSpecializations()
948 */
949 public Collection<GeneralizableElementFacade> getAllSpecializations()
950 {
951 return this.getSuperFrontEndController().getAllSpecializations();
952 }
953
954 /**
955 * Gets the direct generalization for this generalizable element.
956 * @see GeneralizableElementFacade#getGeneralization()
957 */
958 public GeneralizableElementFacade getGeneralization()
959 {
960 return this.getSuperFrontEndController().getGeneralization();
961 }
962
963 /**
964 * Gets the actual links that this generalization element is part of (it plays either the
965 * specialization or generalization).
966 * @see GeneralizableElementFacade#getGeneralizationLinks()
967 */
968 public Collection<GeneralizationFacade> getGeneralizationLinks()
969 {
970 return this.getSuperFrontEndController().getGeneralizationLinks();
971 }
972
973 /**
974 * A comma separated list of the fully qualified names of all generalizations.
975 * @see GeneralizableElementFacade#getGeneralizationList()
976 */
977 public String getGeneralizationList()
978 {
979 return this.getSuperFrontEndController().getGeneralizationList();
980 }
981
982 /**
983 * The element found when you recursively follow the generalization path up to the root. If an
984 * element has no generalization itself will be considered the root.
985 * @see GeneralizableElementFacade#getGeneralizationRoot()
986 */
987 public GeneralizableElementFacade getGeneralizationRoot()
988 {
989 return this.getSuperFrontEndController().getGeneralizationRoot();
990 }
991
992 /**
993 * Return all generalizations (ancestors) from this generalizable element.
994 * @see GeneralizableElementFacade#getGeneralizations()
995 */
996 public Collection<GeneralizableElementFacade> getGeneralizations()
997 {
998 return this.getSuperFrontEndController().getGeneralizations();
999 }
1000
1001 /**
1002 * Gets the direct specializations (i.e. sub elements) for this generalizatble element.
1003 * @see GeneralizableElementFacade#getSpecializations()
1004 */
1005 public Collection<GeneralizableElementFacade> getSpecializations()
1006 {
1007 return this.getSuperFrontEndController().getSpecializations();
1008 }
1009
1010 /**
1011 * Copies all tagged values from the given ModelElementFacade to this model element facade.
1012 * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
1013 */
1014 public void copyTaggedValues(ModelElementFacade element)
1015 {
1016 this.getSuperFrontEndController().copyTaggedValues(element);
1017 }
1018
1019 /**
1020 * Finds the tagged value with the specified 'tagName'. In case there are more values the first
1021 * one found will be returned.
1022 * @see ModelElementFacade#findTaggedValue(String tagName)
1023 */
1024 public Object findTaggedValue(String tagName)
1025 {
1026 return this.getSuperFrontEndController().findTaggedValue(tagName);
1027 }
1028
1029 /**
1030 * Returns all the values for the tagged value with the specified name. The returned collection
1031 * will contains only String instances, or will be empty. Never null.
1032 * @see ModelElementFacade#findTaggedValues(String tagName)
1033 */
1034 public Collection<Object> findTaggedValues(String tagName)
1035 {
1036 return this.getSuperFrontEndController().findTaggedValues(tagName);
1037 }
1038
1039 /**
1040 * Returns the fully qualified name of the model element. The fully qualified name includes
1041 * complete package qualified name of the underlying model element. The templates parameter will
1042 * be replaced by the correct one given the binding relation of the parameter to this element.
1043 * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1044 */
1045 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1046 {
1047 return this.getSuperFrontEndController().getBindedFullyQualifiedName(bindedElement);
1048 }
1049
1050 /**
1051 * Gets all constraints belonging to the model element.
1052 * @see ModelElementFacade#getConstraints()
1053 */
1054 public Collection<ConstraintFacade> getConstraints()
1055 {
1056 return this.getSuperFrontEndController().getConstraints();
1057 }
1058
1059 /**
1060 * Returns the constraints of the argument kind that have been placed onto this model. Typical
1061 * kinds are "inv", "pre" and "post". Other kinds are possible.
1062 * @see ModelElementFacade#getConstraints(String kind)
1063 */
1064 public Collection<ConstraintFacade> getConstraints(String kind)
1065 {
1066 return this.getSuperFrontEndController().getConstraints(kind);
1067 }
1068
1069 /**
1070 * Gets the documentation for the model element, The indent argument is prefixed to each line.
1071 * By default this method wraps lines after 64 characters.
1072 * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
1073 * @see ModelElementFacade#getDocumentation(String indent)
1074 */
1075 public String getDocumentation(String indent)
1076 {
1077 return this.getSuperFrontEndController().getDocumentation(indent);
1078 }
1079
1080 /**
1081 * This method returns the documentation for this model element, with the lines wrapped after
1082 * the specified number of characters, values of less than 1 will indicate no line wrapping is
1083 * required. By default paragraphs are returned as HTML.
1084 * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
1085 * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
1086 */
1087 public String getDocumentation(String indent, int lineLength)
1088 {
1089 return this.getSuperFrontEndController().getDocumentation(indent, lineLength);
1090 }
1091
1092 /**
1093 * This method returns the documentation for this model element, with the lines wrapped after
1094 * the specified number of characters, values of less than 1 will indicate no line wrapping is
1095 * required. HTML style determines if HTML Escaping is applied.
1096 * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1097 */
1098 public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1099 {
1100 return this.getSuperFrontEndController().getDocumentation(indent, lineLength, htmlStyle);
1101 }
1102
1103 /**
1104 * The fully qualified name of this model element.
1105 * @see ModelElementFacade#getFullyQualifiedName()
1106 */
1107 public String getFullyQualifiedName()
1108 {
1109 return this.getSuperFrontEndController().getFullyQualifiedName();
1110 }
1111
1112 /**
1113 * Returns the fully qualified name of the model element. The fully qualified name includes
1114 * complete package qualified name of the underlying model element. If modelName is true, then
1115 * the original name of the model element (the name contained within the model) will be the name
1116 * returned, otherwise a name from a language mapping will be returned.
1117 * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1118 */
1119 public String getFullyQualifiedName(boolean modelName)
1120 {
1121 return this.getSuperFrontEndController().getFullyQualifiedName(modelName);
1122 }
1123
1124 /**
1125 * Returns the fully qualified name as a path, the returned value always starts with out a slash
1126 * '/'.
1127 * @see ModelElementFacade#getFullyQualifiedNamePath()
1128 */
1129 public String getFullyQualifiedNamePath()
1130 {
1131 return this.getSuperFrontEndController().getFullyQualifiedNamePath();
1132 }
1133
1134 /**
1135 * Gets the unique identifier of the underlying model element.
1136 * @see ModelElementFacade#getId()
1137 */
1138 public String getId()
1139 {
1140 return this.getSuperFrontEndController().getId();
1141 }
1142
1143 /**
1144 * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1145 * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1146 * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1147 * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1148 * JDK5 compiler level.
1149 * @see ModelElementFacade#getKeywords()
1150 */
1151 public Collection<String> getKeywords()
1152 {
1153 return this.getSuperFrontEndController().getKeywords();
1154 }
1155
1156 /**
1157 * UML2: Retrieves a localized label for this named element.
1158 * @see ModelElementFacade#getLabel()
1159 */
1160 public String getLabel()
1161 {
1162 return this.getSuperFrontEndController().getLabel();
1163 }
1164
1165 /**
1166 * The language mappings that have been set for this model element.
1167 * @see ModelElementFacade#getLanguageMappings()
1168 */
1169 public TypeMappings getLanguageMappings()
1170 {
1171 return this.getSuperFrontEndController().getLanguageMappings();
1172 }
1173
1174 /**
1175 * Return the model containing this model element (multiple models may be loaded and processed
1176 * at the same time).
1177 * @see ModelElementFacade#getModel()
1178 */
1179 public ModelFacade getModel()
1180 {
1181 return this.getSuperFrontEndController().getModel();
1182 }
1183
1184 /**
1185 * The name of the model element.
1186 * @see ModelElementFacade#getName()
1187 */
1188 public String getName()
1189 {
1190 return this.getSuperFrontEndController().getName();
1191 }
1192
1193 /**
1194 * Gets the package to which this model element belongs.
1195 * @see ModelElementFacade#getPackage()
1196 */
1197 public ModelElementFacade getPackage()
1198 {
1199 return this.getSuperFrontEndController().getPackage();
1200 }
1201
1202 /**
1203 * The name of this model element's package.
1204 * @see ModelElementFacade#getPackageName()
1205 */
1206 public String getPackageName()
1207 {
1208 return this.getSuperFrontEndController().getPackageName();
1209 }
1210
1211 /**
1212 * Gets the package name (optionally providing the ability to retrieve the model name and not
1213 * the mapped name).
1214 * @see ModelElementFacade#getPackageName(boolean modelName)
1215 */
1216 public String getPackageName(boolean modelName)
1217 {
1218 return this.getSuperFrontEndController().getPackageName(modelName);
1219 }
1220
1221 /**
1222 * Returns the package as a path, the returned value always starts with out a slash '/'.
1223 * @see ModelElementFacade#getPackagePath()
1224 */
1225 public String getPackagePath()
1226 {
1227 return this.getSuperFrontEndController().getPackagePath();
1228 }
1229
1230 /**
1231 * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1232 * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1233 * the names of the containing namespaces starting at the root of the hierarchy and ending with
1234 * the name of the NamedElement itself.
1235 * @see ModelElementFacade#getQualifiedName()
1236 */
1237 public String getQualifiedName()
1238 {
1239 return this.getSuperFrontEndController().getQualifiedName();
1240 }
1241
1242 /**
1243 * Gets the root package for the model element.
1244 * @see ModelElementFacade#getRootPackage()
1245 */
1246 public PackageFacade getRootPackage()
1247 {
1248 return this.getSuperFrontEndController().getRootPackage();
1249 }
1250
1251 /**
1252 * Gets the dependencies for which this model element is the source.
1253 * @see ModelElementFacade#getSourceDependencies()
1254 */
1255 public Collection<DependencyFacade> getSourceDependencies()
1256 {
1257 return this.getSuperFrontEndController().getSourceDependencies();
1258 }
1259
1260 /**
1261 * If this model element is the context of an activity graph, this represents that activity
1262 * graph.
1263 * @see ModelElementFacade#getStateMachineContext()
1264 */
1265 public StateMachineFacade getStateMachineContext()
1266 {
1267 return this.getSuperFrontEndController().getStateMachineContext();
1268 }
1269
1270 /**
1271 * The collection of ALL stereotype names for this model element.
1272 * @see ModelElementFacade#getStereotypeNames()
1273 */
1274 public Collection<String> getStereotypeNames()
1275 {
1276 return this.getSuperFrontEndController().getStereotypeNames();
1277 }
1278
1279 /**
1280 * Gets all stereotypes for this model element.
1281 * @see ModelElementFacade#getStereotypes()
1282 */
1283 public Collection<StereotypeFacade> getStereotypes()
1284 {
1285 return this.getSuperFrontEndController().getStereotypes();
1286 }
1287
1288 /**
1289 * Return the TaggedValues associated with this model element, under all stereotypes.
1290 * @see ModelElementFacade#getTaggedValues()
1291 */
1292 public Collection<TaggedValueFacade> getTaggedValues()
1293 {
1294 return this.getSuperFrontEndController().getTaggedValues();
1295 }
1296
1297 /**
1298 * Gets the dependencies for which this model element is the target.
1299 * @see ModelElementFacade#getTargetDependencies()
1300 */
1301 public Collection<DependencyFacade> getTargetDependencies()
1302 {
1303 return this.getSuperFrontEndController().getTargetDependencies();
1304 }
1305
1306 /**
1307 * Get the template parameter for this model element having the parameterName
1308 * @see ModelElementFacade#getTemplateParameter(String parameterName)
1309 */
1310 public Object getTemplateParameter(String parameterName)
1311 {
1312 return this.getSuperFrontEndController().getTemplateParameter(parameterName);
1313 }
1314
1315 /**
1316 * Get the template parameters for this model element
1317 * @see ModelElementFacade#getTemplateParameters()
1318 */
1319 public Collection<TemplateParameterFacade> getTemplateParameters()
1320 {
1321 return this.getSuperFrontEndController().getTemplateParameters();
1322 }
1323
1324 /**
1325 * The visibility (i.e. public, private, protected or package) of the model element, will
1326 * attempt a lookup for these values in the language mappings (if any).
1327 * @see ModelElementFacade#getVisibility()
1328 */
1329 public String getVisibility()
1330 {
1331 return this.getSuperFrontEndController().getVisibility();
1332 }
1333
1334 /**
1335 * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1336 * is taken into account when searching for the stereotype), false otherwise.
1337 * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1338 */
1339 public boolean hasExactStereotype(String stereotypeName)
1340 {
1341 return this.getSuperFrontEndController().hasExactStereotype(stereotypeName);
1342 }
1343
1344 /**
1345 * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1346 * pipe, semicolon, or << >>
1347 * @see ModelElementFacade#hasKeyword(String keywordName)
1348 */
1349 public boolean hasKeyword(String keywordName)
1350 {
1351 return this.getSuperFrontEndController().hasKeyword(keywordName);
1352 }
1353
1354 /**
1355 * Returns true if the model element has the specified stereotype. If the stereotype itself
1356 * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1357 * one of the stereotype's ancestors has a matching name this method will return true, false
1358 * otherwise.
1359 * For example, if we have a certain stereotype called <<exception>> and a model element has a
1360 * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1361 * method with 'stereotypeName' defined as 'exception' the method would return true since
1362 * <<applicationException>> inherits from <<exception>>. If you want to check if the model
1363 * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1364 * @see ModelElementFacade#hasStereotype(String stereotypeName)
1365 */
1366 public boolean hasStereotype(String stereotypeName)
1367 {
1368 return this.getSuperFrontEndController().hasStereotype(stereotypeName);
1369 }
1370
1371 /**
1372 * True if there are target dependencies from this element that are instances of BindingFacade.
1373 * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1374 * @see ModelElementFacade#isBindingDependenciesPresent()
1375 */
1376 public boolean isBindingDependenciesPresent()
1377 {
1378 return this.getSuperFrontEndController().isBindingDependenciesPresent();
1379 }
1380
1381 /**
1382 * Indicates if any constraints are present on this model element.
1383 * @see ModelElementFacade#isConstraintsPresent()
1384 */
1385 public boolean isConstraintsPresent()
1386 {
1387 return this.getSuperFrontEndController().isConstraintsPresent();
1388 }
1389
1390 /**
1391 * Indicates if any documentation is present on this model element.
1392 * @see ModelElementFacade#isDocumentationPresent()
1393 */
1394 public boolean isDocumentationPresent()
1395 {
1396 return this.getSuperFrontEndController().isDocumentationPresent();
1397 }
1398
1399 /**
1400 * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1401 * @see ModelElementFacade#isReservedWord()
1402 */
1403 public boolean isReservedWord()
1404 {
1405 return this.getSuperFrontEndController().isReservedWord();
1406 }
1407
1408 /**
1409 * True is there are template parameters on this model element. For UML2, applies to Class,
1410 * Operation, Property, and Parameter.
1411 * @see ModelElementFacade#isTemplateParametersPresent()
1412 */
1413 public boolean isTemplateParametersPresent()
1414 {
1415 return this.getSuperFrontEndController().isTemplateParametersPresent();
1416 }
1417
1418 /**
1419 * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1420 * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1421 * Enumerations and Interfaces, optionally applies on other model elements.
1422 * @see ModelElementFacade#isValidIdentifierName()
1423 */
1424 public boolean isValidIdentifierName()
1425 {
1426 return this.getSuperFrontEndController().isValidIdentifierName();
1427 }
1428
1429 /**
1430 * Searches for the constraint with the specified 'name' on this model element, and if found
1431 * translates it using the specified 'translation' from a translation library discovered by the
1432 * framework.
1433 * @see ModelElementFacade#translateConstraint(String name, String translation)
1434 */
1435 public String translateConstraint(String name, String translation)
1436 {
1437 return this.getSuperFrontEndController().translateConstraint(name, translation);
1438 }
1439
1440 /**
1441 * Translates all constraints belonging to this model element with the given 'translation'.
1442 * @see ModelElementFacade#translateConstraints(String translation)
1443 */
1444 public String[] translateConstraints(String translation)
1445 {
1446 return this.getSuperFrontEndController().translateConstraints(translation);
1447 }
1448
1449 /**
1450 * Translates the constraints of the specified 'kind' belonging to this model element.
1451 * @see ModelElementFacade#translateConstraints(String kind, String translation)
1452 */
1453 public String[] translateConstraints(String kind, String translation)
1454 {
1455 return this.getSuperFrontEndController().translateConstraints(kind, translation);
1456 }
1457
1458 /**
1459 * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1460 */
1461 @Override
1462 public void initialize()
1463 {
1464 this.getSuperFrontEndController().initialize();
1465 }
1466
1467 /**
1468 * @return Object getSuperFrontEndController().getValidationOwner()
1469 * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1470 */
1471 @Override
1472 public Object getValidationOwner()
1473 {
1474 Object owner = this.getSuperFrontEndController().getValidationOwner();
1475 return owner;
1476 }
1477
1478 /**
1479 * @return String getSuperFrontEndController().getValidationName()
1480 * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1481 */
1482 @Override
1483 public String getValidationName()
1484 {
1485 String name = this.getSuperFrontEndController().getValidationName();
1486 return name;
1487 }
1488
1489 /**
1490 * @param validationMessages Collection<ModelValidationMessage>
1491 * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1492 */
1493 @Override
1494 public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1495 {
1496 this.getSuperFrontEndController().validateInvariants(validationMessages);
1497 }
1498
1499 /**
1500 * The property that stores the name of the metafacade.
1501 */
1502 private static final String NAME_PROPERTY = "name";
1503 private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1504
1505 /**
1506 * @see Object#toString()
1507 */
1508 @Override
1509 public String toString()
1510 {
1511 final StringBuilder toString = new StringBuilder(this.getClass().getName());
1512 toString.append("[");
1513 try
1514 {
1515 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1516 }
1517 catch (final Throwable tryAgain)
1518 {
1519 try
1520 {
1521 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1522 }
1523 catch (final Throwable ignore)
1524 {
1525 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1526 }
1527 }
1528 toString.append("]");
1529 return toString.toString();
1530 }
1531 }