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