1 // license-header java merge-point
2 //
3 // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4 //
5 package org.andromda.cartridges.bpm4struts.metafacades;
6
7 import java.util.Collection;
8 import org.andromda.core.common.Introspector;
9 import org.andromda.core.metafacade.MetafacadeBase;
10 import org.andromda.core.metafacade.MetafacadeFactory;
11 import org.andromda.core.metafacade.ModelValidationMessage;
12 import org.andromda.metafacades.uml.AttributeFacade;
13 import org.andromda.metafacades.uml.ClassifierFacade;
14 import org.andromda.metafacades.uml.ConstraintFacade;
15 import org.andromda.metafacades.uml.DependencyFacade;
16 import org.andromda.metafacades.uml.EnumerationFacade;
17 import org.andromda.metafacades.uml.ModelElementFacade;
18 import org.andromda.metafacades.uml.ModelFacade;
19 import org.andromda.metafacades.uml.PackageFacade;
20 import org.andromda.metafacades.uml.StateMachineFacade;
21 import org.andromda.metafacades.uml.StereotypeFacade;
22 import org.andromda.metafacades.uml.TaggedValueFacade;
23 import org.andromda.metafacades.uml.TemplateParameterFacade;
24 import org.andromda.metafacades.uml.TypeMappings;
25 import org.andromda.translation.ocl.validation.OCLIntrospector;
26 import org.andromda.translation.ocl.validation.OCLResultEnsurer;
27 import org.apache.log4j.Logger;
28
29 /**
30 * TODO: Model Documentation for org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute
31 * MetafacadeLogic for StrutsAttribute
32 *
33 * @see StrutsAttribute
34 */
35 public abstract class StrutsAttributeLogic
36 extends MetafacadeBase
37 implements StrutsAttribute
38 {
39 /**
40 * The underlying UML object
41 * @see Object
42 */
43 protected Object metaObject;
44
45 /** Create Metafacade implementation instance using the MetafacadeFactory from the context
46 * @param metaObjectIn
47 * @param context
48 */
49 protected StrutsAttributeLogic(Object metaObjectIn, String context)
50 {
51 super(metaObjectIn, getContext(context));
52 this.superAttributeFacade =
53 (AttributeFacade)
54 MetafacadeFactory.getInstance().createFacadeImpl(
55 "org.andromda.metafacades.uml.AttributeFacade",
56 metaObjectIn,
57 getContext(context));
58 this.metaObject = metaObjectIn;
59 }
60
61 /**
62 * The logger instance.
63 */
64 private static final Logger logger = Logger.getLogger(StrutsAttributeLogic.class);
65
66 /**
67 * Gets the context for this metafacade logic instance.
68 * @param context String. Set to StrutsAttribute if null
69 * @return context String
70 */
71 private static String getContext(String context)
72 {
73 if (context == null)
74 {
75 context = "org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute";
76 }
77 return context;
78 }
79
80 private AttributeFacade superAttributeFacade;
81 private boolean superAttributeFacadeInitialized = false;
82
83 /**
84 * Gets the AttributeFacade parent instance.
85 * @return this.superAttributeFacade AttributeFacade
86 */
87 private AttributeFacade getSuperAttributeFacade()
88 {
89 if (!this.superAttributeFacadeInitialized)
90 {
91 ((MetafacadeBase)this.superAttributeFacade).setMetafacadeContext(this.getMetafacadeContext());
92 this.superAttributeFacadeInitialized = true;
93 }
94 return this.superAttributeFacade;
95 }
96
97 /** Reset context only for non-root metafacades
98 * @param context
99 * @see MetafacadeBase#resetMetafacadeContext(String context)
100 */
101 @Override
102 public void resetMetafacadeContext(String context)
103 {
104 if (!this.contextRoot) // reset context only for non-root metafacades
105 {
106 context = getContext(context); // to have same value as in original constructor call
107 setMetafacadeContext (context);
108 if (this.superAttributeFacadeInitialized)
109 {
110 ((MetafacadeBase)this.superAttributeFacade).resetMetafacadeContext(context);
111 }
112 }
113 }
114
115 /**
116 * @return boolean true always
117 * @see StrutsAttribute
118 */
119 public boolean isStrutsAttributeMetaType()
120 {
121 return true;
122 }
123
124 // --------------- attributes ---------------------
125
126 /**
127 * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute#getDateFormat()
128 * @return String
129 */
130 protected abstract String handleGetDateFormat();
131
132 private String __dateFormat1a;
133 private boolean __dateFormat1aSet = false;
134
135 /**
136 * If this attribute is a date type this property represents the format in which this date is to
137 * be presented to the end-user. Null otherwise.
138 * @return (String)handleGetDateFormat()
139 */
140 public final String getDateFormat()
141 {
142 String dateFormat1a = this.__dateFormat1a;
143 if (!this.__dateFormat1aSet)
144 {
145 // dateFormat has no pre constraints
146 dateFormat1a = handleGetDateFormat();
147 // dateFormat has no post constraints
148 this.__dateFormat1a = dateFormat1a;
149 if (isMetafacadePropertyCachingEnabled())
150 {
151 this.__dateFormat1aSet = true;
152 }
153 }
154 return dateFormat1a;
155 }
156
157 /**
158 * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute#isSafeNamePresent()
159 * @return boolean
160 */
161 protected abstract boolean handleIsSafeNamePresent();
162
163 private boolean __safeNamePresent2a;
164 private boolean __safeNamePresent2aSet = false;
165
166 /**
167 * True if this parameter has a name that can properly be handled by Jakarta commons (this lib
168 * is used by Struts but contains a bug)
169 * @return (boolean)handleIsSafeNamePresent()
170 */
171 public final boolean isSafeNamePresent()
172 {
173 boolean safeNamePresent2a = this.__safeNamePresent2a;
174 if (!this.__safeNamePresent2aSet)
175 {
176 // safeNamePresent has no pre constraints
177 safeNamePresent2a = handleIsSafeNamePresent();
178 // safeNamePresent has no post constraints
179 this.__safeNamePresent2a = safeNamePresent2a;
180 if (isMetafacadePropertyCachingEnabled())
181 {
182 this.__safeNamePresent2aSet = true;
183 }
184 }
185 return safeNamePresent2a;
186 }
187
188 // ---------------- business methods ----------------------
189
190 /**
191 * Method to be implemented in descendants
192 * TODO: Model Documentation for
193 * org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute.getDummyValue
194 * @param seed
195 * @return String
196 */
197 protected abstract String handleGetDummyValue(int seed);
198
199 /**
200 * TODO: Model Documentation for
201 * org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute.getDummyValue
202 * @param seed int
203 * TODO: Model Documentation for
204 * org.andromda.cartridges.bpm4struts.metafacades.StrutsAttribute.getDummyValue(seed)
205 * @return handleGetDummyValue(seed)
206 */
207 public String getDummyValue(int seed)
208 {
209 // getDummyValue has no pre constraints
210 String returnValue = handleGetDummyValue(seed);
211 // getDummyValue has no post constraints
212 return returnValue;
213 }
214
215 /**
216 * @return true
217 * @see AttributeFacade
218 */
219 public boolean isAttributeFacadeMetaType()
220 {
221 return true;
222 }
223
224 /**
225 * @return true
226 * @see ModelElementFacade
227 */
228 public boolean isModelElementFacadeMetaType()
229 {
230 return true;
231 }
232
233 // ----------- delegates to AttributeFacade ------------
234 /**
235 * Searches the given feature for the specified tag.
236 * If the follow boolean is set to true then the search will continue from the class attribute
237 * to the class itself and then up the class hierarchy.
238 * @see AttributeFacade#findTaggedValue(String name, boolean follow)
239 */
240 public Object findTaggedValue(String name, boolean follow)
241 {
242 return this.getSuperAttributeFacade().findTaggedValue(name, follow);
243 }
244
245 /**
246 * The default value of the attribute. This is the value given if no value is defined.
247 * @see AttributeFacade#getDefaultValue()
248 */
249 public String getDefaultValue()
250 {
251 return this.getSuperAttributeFacade().getDefaultValue();
252 }
253
254 /**
255 * If the attribute is an enumeration literal this represents the owning enumeration. Can be
256 * empty.
257 * @see AttributeFacade#getEnumeration()
258 */
259 public EnumerationFacade getEnumeration()
260 {
261 return this.getSuperAttributeFacade().getEnumeration();
262 }
263
264 /**
265 * Returns the enumeration literal parameters defined by tagged value as a comma separated list.
266 * @see AttributeFacade#getEnumerationLiteralParameters()
267 */
268 public String getEnumerationLiteralParameters()
269 {
270 return this.getSuperAttributeFacade().getEnumerationLiteralParameters();
271 }
272
273 /**
274 * The value for this attribute if it is an enumeration literal, null otherwise. The default
275 * value is returned as a String if it has been specified, if it's not specified this
276 * attribute's name is assumed.
277 * @see AttributeFacade#getEnumerationValue()
278 */
279 public String getEnumerationValue()
280 {
281 return this.getSuperAttributeFacade().getEnumerationValue();
282 }
283
284 /**
285 * The name of the accessor operation that would retrieve this attribute's value.
286 * @see AttributeFacade#getGetterName()
287 */
288 public String getGetterName()
289 {
290 return this.getSuperAttributeFacade().getGetterName();
291 }
292
293 /**
294 * The name of the type that is returned on the accessor and mutator operations, determined in
295 * part by the multiplicity.
296 * @see AttributeFacade#getGetterSetterTypeName()
297 */
298 public String getGetterSetterTypeName()
299 {
300 return this.getSuperAttributeFacade().getGetterSetterTypeName();
301 }
302
303 /**
304 * the lower value for the multiplicity
305 * -only applicable for UML2
306 * @see AttributeFacade#getLower()
307 */
308 public int getLower()
309 {
310 return this.getSuperAttributeFacade().getLower();
311 }
312
313 /**
314 * Gets the classifier who is the owner of the attributes.
315 * @see AttributeFacade#getOwner()
316 */
317 public ClassifierFacade getOwner()
318 {
319 return this.getSuperAttributeFacade().getOwner();
320 }
321
322 /**
323 * The name of the mutator operation that would retrieve this attribute's value.
324 * @see AttributeFacade#getSetterName()
325 */
326 public String getSetterName()
327 {
328 return this.getSuperAttributeFacade().getSetterName();
329 }
330
331 /**
332 * The classifier owning this attribute.
333 * @see AttributeFacade#getType()
334 */
335 public ClassifierFacade getType()
336 {
337 return this.getSuperAttributeFacade().getType();
338 }
339
340 /**
341 * the upper value for the multiplicity (will be -1 for *)
342 * -only applicable for UML2
343 * @see AttributeFacade#getUpper()
344 */
345 public int getUpper()
346 {
347 return this.getSuperAttributeFacade().getUpper();
348 }
349
350 /**
351 * True if this attribute can only be set.
352 * @see AttributeFacade#isAddOnly()
353 */
354 public boolean isAddOnly()
355 {
356 return this.getSuperAttributeFacade().isAddOnly();
357 }
358
359 /**
360 * True if this attribute can be modified.
361 * @see AttributeFacade#isChangeable()
362 */
363 public boolean isChangeable()
364 {
365 return this.getSuperAttributeFacade().isChangeable();
366 }
367
368 /**
369 * Indicates if the default value is present.
370 * @see AttributeFacade#isDefaultValuePresent()
371 */
372 public boolean isDefaultValuePresent()
373 {
374 return this.getSuperAttributeFacade().isDefaultValuePresent();
375 }
376
377 /**
378 * If the attribute is derived (its value is computed). UML2 only. UML14 always returns false.
379 * Default=false.
380 * @see AttributeFacade#isDerived()
381 */
382 public boolean isDerived()
383 {
384 return this.getSuperAttributeFacade().isDerived();
385 }
386
387 /**
388 * True if this attribute is owned by an enumeration.
389 * @see AttributeFacade#isEnumerationLiteral()
390 */
391 public boolean isEnumerationLiteral()
392 {
393 return this.getSuperAttributeFacade().isEnumerationLiteral();
394 }
395
396 /**
397 * Returns true if enumeration literal parameters exist (defined by tagged value) for the
398 * literal.
399 * @see AttributeFacade#isEnumerationLiteralParametersExist()
400 */
401 public boolean isEnumerationLiteralParametersExist()
402 {
403 return this.getSuperAttributeFacade().isEnumerationLiteralParametersExist();
404 }
405
406 /**
407 * True if this attribute is owned by an enumeration but is defined as a member variable (NOT a
408 * literal).
409 * @see AttributeFacade#isEnumerationMember()
410 */
411 public boolean isEnumerationMember()
412 {
413 return this.getSuperAttributeFacade().isEnumerationMember();
414 }
415
416 /**
417 * IsLeaf property in the operation. If true, operation is final, cannot be extended or
418 * implemented by a descendant.
419 * @see AttributeFacade#isLeaf()
420 */
421 public boolean isLeaf()
422 {
423 return this.getSuperAttributeFacade().isLeaf();
424 }
425
426 /**
427 * Whether or not this attribute has a multiplicity greater than 1.
428 * @see AttributeFacade#isMany()
429 */
430 public boolean isMany()
431 {
432 return this.getSuperAttributeFacade().isMany();
433 }
434
435 /**
436 * Indicates whether or not the attributes are ordered (if multiplicity is greater than 1).
437 * @see AttributeFacade#isOrdered()
438 */
439 public boolean isOrdered()
440 {
441 return this.getSuperAttributeFacade().isOrdered();
442 }
443
444 /**
445 * Whether or not this attribute can be modified.
446 * @see AttributeFacade#isReadOnly()
447 */
448 public boolean isReadOnly()
449 {
450 return this.getSuperAttributeFacade().isReadOnly();
451 }
452
453 /**
454 * Whether or not the multiplicity of this attribute is 1.
455 * @see AttributeFacade#isRequired()
456 */
457 public boolean isRequired()
458 {
459 return this.getSuperAttributeFacade().isRequired();
460 }
461
462 /**
463 * Indicates if this attribute is 'static', meaning it has a classifier scope.
464 * @see AttributeFacade#isStatic()
465 */
466 public boolean isStatic()
467 {
468 return this.getSuperAttributeFacade().isStatic();
469 }
470
471 /**
472 * If the attribute is unique within the Collection type. UML2 only. UML14 always returns false.
473 * Unique+Ordered determines the implementation Collection type. Default=false.
474 * @see AttributeFacade#isUnique()
475 */
476 public boolean isUnique()
477 {
478 return this.getSuperAttributeFacade().isUnique();
479 }
480
481 /**
482 * Copies all tagged values from the given ModelElementFacade to this model element facade.
483 * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
484 */
485 public void copyTaggedValues(ModelElementFacade element)
486 {
487 this.getSuperAttributeFacade().copyTaggedValues(element);
488 }
489
490 /**
491 * Finds the tagged value with the specified 'tagName'. In case there are more values the first
492 * one found will be returned.
493 * @see ModelElementFacade#findTaggedValue(String tagName)
494 */
495 public Object findTaggedValue(String tagName)
496 {
497 return this.getSuperAttributeFacade().findTaggedValue(tagName);
498 }
499
500 /**
501 * Returns all the values for the tagged value with the specified name. The returned collection
502 * will contains only String instances, or will be empty. Never null.
503 * @see ModelElementFacade#findTaggedValues(String tagName)
504 */
505 public Collection<Object> findTaggedValues(String tagName)
506 {
507 return this.getSuperAttributeFacade().findTaggedValues(tagName);
508 }
509
510 /**
511 * Returns the fully qualified name of the model element. The fully qualified name includes
512 * complete package qualified name of the underlying model element. The templates parameter will
513 * be replaced by the correct one given the binding relation of the parameter to this element.
514 * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
515 */
516 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
517 {
518 return this.getSuperAttributeFacade().getBindedFullyQualifiedName(bindedElement);
519 }
520
521 /**
522 * Gets all constraints belonging to the model element.
523 * @see ModelElementFacade#getConstraints()
524 */
525 public Collection<ConstraintFacade> getConstraints()
526 {
527 return this.getSuperAttributeFacade().getConstraints();
528 }
529
530 /**
531 * Returns the constraints of the argument kind that have been placed onto this model. Typical
532 * kinds are "inv", "pre" and "post". Other kinds are possible.
533 * @see ModelElementFacade#getConstraints(String kind)
534 */
535 public Collection<ConstraintFacade> getConstraints(String kind)
536 {
537 return this.getSuperAttributeFacade().getConstraints(kind);
538 }
539
540 /**
541 * Gets the documentation for the model element, The indent argument is prefixed to each line.
542 * By default this method wraps lines after 64 characters.
543 * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
544 * @see ModelElementFacade#getDocumentation(String indent)
545 */
546 public String getDocumentation(String indent)
547 {
548 return this.getSuperAttributeFacade().getDocumentation(indent);
549 }
550
551 /**
552 * This method returns the documentation for this model element, with the lines wrapped after
553 * the specified number of characters, values of less than 1 will indicate no line wrapping is
554 * required. By default paragraphs are returned as HTML.
555 * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
556 * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
557 */
558 public String getDocumentation(String indent, int lineLength)
559 {
560 return this.getSuperAttributeFacade().getDocumentation(indent, lineLength);
561 }
562
563 /**
564 * This method returns the documentation for this model element, with the lines wrapped after
565 * the specified number of characters, values of less than 1 will indicate no line wrapping is
566 * required. HTML style determines if HTML Escaping is applied.
567 * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
568 */
569 public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
570 {
571 return this.getSuperAttributeFacade().getDocumentation(indent, lineLength, htmlStyle);
572 }
573
574 /**
575 * The fully qualified name of this model element.
576 * @see ModelElementFacade#getFullyQualifiedName()
577 */
578 public String getFullyQualifiedName()
579 {
580 return this.getSuperAttributeFacade().getFullyQualifiedName();
581 }
582
583 /**
584 * Returns the fully qualified name of the model element. The fully qualified name includes
585 * complete package qualified name of the underlying model element. If modelName is true, then
586 * the original name of the model element (the name contained within the model) will be the name
587 * returned, otherwise a name from a language mapping will be returned.
588 * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
589 */
590 public String getFullyQualifiedName(boolean modelName)
591 {
592 return this.getSuperAttributeFacade().getFullyQualifiedName(modelName);
593 }
594
595 /**
596 * Returns the fully qualified name as a path, the returned value always starts with out a slash
597 * '/'.
598 * @see ModelElementFacade#getFullyQualifiedNamePath()
599 */
600 public String getFullyQualifiedNamePath()
601 {
602 return this.getSuperAttributeFacade().getFullyQualifiedNamePath();
603 }
604
605 /**
606 * Gets the unique identifier of the underlying model element.
607 * @see ModelElementFacade#getId()
608 */
609 public String getId()
610 {
611 return this.getSuperAttributeFacade().getId();
612 }
613
614 /**
615 * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
616 * are not represented by other properties, i.e. native, transient, volatile, synchronized,
617 * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
618 * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
619 * JDK5 compiler level.
620 * @see ModelElementFacade#getKeywords()
621 */
622 public Collection<String> getKeywords()
623 {
624 return this.getSuperAttributeFacade().getKeywords();
625 }
626
627 /**
628 * UML2: Retrieves a localized label for this named element.
629 * @see ModelElementFacade#getLabel()
630 */
631 public String getLabel()
632 {
633 return this.getSuperAttributeFacade().getLabel();
634 }
635
636 /**
637 * The language mappings that have been set for this model element.
638 * @see ModelElementFacade#getLanguageMappings()
639 */
640 public TypeMappings getLanguageMappings()
641 {
642 return this.getSuperAttributeFacade().getLanguageMappings();
643 }
644
645 /**
646 * Return the model containing this model element (multiple models may be loaded and processed
647 * at the same time).
648 * @see ModelElementFacade#getModel()
649 */
650 public ModelFacade getModel()
651 {
652 return this.getSuperAttributeFacade().getModel();
653 }
654
655 /**
656 * The name of the model element.
657 * @see ModelElementFacade#getName()
658 */
659 public String getName()
660 {
661 return this.getSuperAttributeFacade().getName();
662 }
663
664 /**
665 * Gets the package to which this model element belongs.
666 * @see ModelElementFacade#getPackage()
667 */
668 public ModelElementFacade getPackage()
669 {
670 return this.getSuperAttributeFacade().getPackage();
671 }
672
673 /**
674 * The name of this model element's package.
675 * @see ModelElementFacade#getPackageName()
676 */
677 public String getPackageName()
678 {
679 return this.getSuperAttributeFacade().getPackageName();
680 }
681
682 /**
683 * Gets the package name (optionally providing the ability to retrieve the model name and not
684 * the mapped name).
685 * @see ModelElementFacade#getPackageName(boolean modelName)
686 */
687 public String getPackageName(boolean modelName)
688 {
689 return this.getSuperAttributeFacade().getPackageName(modelName);
690 }
691
692 /**
693 * Returns the package as a path, the returned value always starts with out a slash '/'.
694 * @see ModelElementFacade#getPackagePath()
695 */
696 public String getPackagePath()
697 {
698 return this.getSuperAttributeFacade().getPackagePath();
699 }
700
701 /**
702 * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
703 * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
704 * the names of the containing namespaces starting at the root of the hierarchy and ending with
705 * the name of the NamedElement itself.
706 * @see ModelElementFacade#getQualifiedName()
707 */
708 public String getQualifiedName()
709 {
710 return this.getSuperAttributeFacade().getQualifiedName();
711 }
712
713 /**
714 * Gets the root package for the model element.
715 * @see ModelElementFacade#getRootPackage()
716 */
717 public PackageFacade getRootPackage()
718 {
719 return this.getSuperAttributeFacade().getRootPackage();
720 }
721
722 /**
723 * Gets the dependencies for which this model element is the source.
724 * @see ModelElementFacade#getSourceDependencies()
725 */
726 public Collection<DependencyFacade> getSourceDependencies()
727 {
728 return this.getSuperAttributeFacade().getSourceDependencies();
729 }
730
731 /**
732 * If this model element is the context of an activity graph, this represents that activity
733 * graph.
734 * @see ModelElementFacade#getStateMachineContext()
735 */
736 public StateMachineFacade getStateMachineContext()
737 {
738 return this.getSuperAttributeFacade().getStateMachineContext();
739 }
740
741 /**
742 * The collection of ALL stereotype names for this model element.
743 * @see ModelElementFacade#getStereotypeNames()
744 */
745 public Collection<String> getStereotypeNames()
746 {
747 return this.getSuperAttributeFacade().getStereotypeNames();
748 }
749
750 /**
751 * Gets all stereotypes for this model element.
752 * @see ModelElementFacade#getStereotypes()
753 */
754 public Collection<StereotypeFacade> getStereotypes()
755 {
756 return this.getSuperAttributeFacade().getStereotypes();
757 }
758
759 /**
760 * Return the TaggedValues associated with this model element, under all stereotypes.
761 * @see ModelElementFacade#getTaggedValues()
762 */
763 public Collection<TaggedValueFacade> getTaggedValues()
764 {
765 return this.getSuperAttributeFacade().getTaggedValues();
766 }
767
768 /**
769 * Gets the dependencies for which this model element is the target.
770 * @see ModelElementFacade#getTargetDependencies()
771 */
772 public Collection<DependencyFacade> getTargetDependencies()
773 {
774 return this.getSuperAttributeFacade().getTargetDependencies();
775 }
776
777 /**
778 * Get the template parameter for this model element having the parameterName
779 * @see ModelElementFacade#getTemplateParameter(String parameterName)
780 */
781 public Object getTemplateParameter(String parameterName)
782 {
783 return this.getSuperAttributeFacade().getTemplateParameter(parameterName);
784 }
785
786 /**
787 * Get the template parameters for this model element
788 * @see ModelElementFacade#getTemplateParameters()
789 */
790 public Collection<TemplateParameterFacade> getTemplateParameters()
791 {
792 return this.getSuperAttributeFacade().getTemplateParameters();
793 }
794
795 /**
796 * The visibility (i.e. public, private, protected or package) of the model element, will
797 * attempt a lookup for these values in the language mappings (if any).
798 * @see ModelElementFacade#getVisibility()
799 */
800 public String getVisibility()
801 {
802 return this.getSuperAttributeFacade().getVisibility();
803 }
804
805 /**
806 * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
807 * is taken into account when searching for the stereotype), false otherwise.
808 * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
809 */
810 public boolean hasExactStereotype(String stereotypeName)
811 {
812 return this.getSuperAttributeFacade().hasExactStereotype(stereotypeName);
813 }
814
815 /**
816 * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
817 * pipe, semicolon, or << >>
818 * @see ModelElementFacade#hasKeyword(String keywordName)
819 */
820 public boolean hasKeyword(String keywordName)
821 {
822 return this.getSuperAttributeFacade().hasKeyword(keywordName);
823 }
824
825 /**
826 * Returns true if the model element has the specified stereotype. If the stereotype itself
827 * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
828 * one of the stereotype's ancestors has a matching name this method will return true, false
829 * otherwise.
830 * For example, if we have a certain stereotype called <<exception>> and a model element has a
831 * stereotype called <<applicationException>> which extends <<exception>>, when calling this
832 * method with 'stereotypeName' defined as 'exception' the method would return true since
833 * <<applicationException>> inherits from <<exception>>. If you want to check if the model
834 * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
835 * @see ModelElementFacade#hasStereotype(String stereotypeName)
836 */
837 public boolean hasStereotype(String stereotypeName)
838 {
839 return this.getSuperAttributeFacade().hasStereotype(stereotypeName);
840 }
841
842 /**
843 * True if there are target dependencies from this element that are instances of BindingFacade.
844 * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
845 * @see ModelElementFacade#isBindingDependenciesPresent()
846 */
847 public boolean isBindingDependenciesPresent()
848 {
849 return this.getSuperAttributeFacade().isBindingDependenciesPresent();
850 }
851
852 /**
853 * Indicates if any constraints are present on this model element.
854 * @see ModelElementFacade#isConstraintsPresent()
855 */
856 public boolean isConstraintsPresent()
857 {
858 return this.getSuperAttributeFacade().isConstraintsPresent();
859 }
860
861 /**
862 * Indicates if any documentation is present on this model element.
863 * @see ModelElementFacade#isDocumentationPresent()
864 */
865 public boolean isDocumentationPresent()
866 {
867 return this.getSuperAttributeFacade().isDocumentationPresent();
868 }
869
870 /**
871 * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
872 * @see ModelElementFacade#isReservedWord()
873 */
874 public boolean isReservedWord()
875 {
876 return this.getSuperAttributeFacade().isReservedWord();
877 }
878
879 /**
880 * True is there are template parameters on this model element. For UML2, applies to Class,
881 * Operation, Property, and Parameter.
882 * @see ModelElementFacade#isTemplateParametersPresent()
883 */
884 public boolean isTemplateParametersPresent()
885 {
886 return this.getSuperAttributeFacade().isTemplateParametersPresent();
887 }
888
889 /**
890 * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
891 * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
892 * Enumerations and Interfaces, optionally applies on other model elements.
893 * @see ModelElementFacade#isValidIdentifierName()
894 */
895 public boolean isValidIdentifierName()
896 {
897 return this.getSuperAttributeFacade().isValidIdentifierName();
898 }
899
900 /**
901 * Searches for the constraint with the specified 'name' on this model element, and if found
902 * translates it using the specified 'translation' from a translation library discovered by the
903 * framework.
904 * @see ModelElementFacade#translateConstraint(String name, String translation)
905 */
906 public String translateConstraint(String name, String translation)
907 {
908 return this.getSuperAttributeFacade().translateConstraint(name, translation);
909 }
910
911 /**
912 * Translates all constraints belonging to this model element with the given 'translation'.
913 * @see ModelElementFacade#translateConstraints(String translation)
914 */
915 public String[] translateConstraints(String translation)
916 {
917 return this.getSuperAttributeFacade().translateConstraints(translation);
918 }
919
920 /**
921 * Translates the constraints of the specified 'kind' belonging to this model element.
922 * @see ModelElementFacade#translateConstraints(String kind, String translation)
923 */
924 public String[] translateConstraints(String kind, String translation)
925 {
926 return this.getSuperAttributeFacade().translateConstraints(kind, translation);
927 }
928
929 /**
930 * @see MetafacadeBase#initialize()
931 */
932 @Override
933 public void initialize()
934 {
935 this.getSuperAttributeFacade().initialize();
936 }
937
938 /**
939 * @return Object getSuperAttributeFacade().getValidationOwner()
940 * @see MetafacadeBase#getValidationOwner()
941 */
942 @Override
943 public Object getValidationOwner()
944 {
945 Object owner = this.getSuperAttributeFacade().getValidationOwner();
946 return owner;
947 }
948
949 /**
950 * @return String getSuperAttributeFacade().getValidationName()
951 * @see MetafacadeBase#getValidationName()
952 */
953 @Override
954 public String getValidationName()
955 {
956 String name = this.getSuperAttributeFacade().getValidationName();
957 return name;
958 }
959
960 /**
961 * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::SAFE NAME - TO BE REMOVED LATER</p>
962 * <p><b>Error:</b> The names you give to fields cannot start with a lowercase character directly followed by a character in uppercase. This is due to a bug in the Jakarta commons library which is used by Struts. The behavior of that library is inconsistent with the reflection API provided by the JDK. Please rename this field or you'll get exceptions when running your web application.</p>
963 * <p><b>OCL:</b> context StrutsAttribute inv: safeNamePresent</p>
964 * @param validationMessages Collection<ModelValidationMessage>
965 * @see MetafacadeBase#validateInvariants(Collection validationMessages)
966 */
967 @Override
968 public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
969 {
970 this.getSuperAttributeFacade().validateInvariants(validationMessages);
971 try
972 {
973 final Object contextElement = this.THIS();
974 boolean constraintValid = OCLResultEnsurer.ensure(OCLIntrospector.invoke(contextElement,"safeNamePresent"));
975 if (!constraintValid)
976 {
977 validationMessages.add(
978 new ModelValidationMessage(
979 (MetafacadeBase)contextElement ,
980 "org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::SAFE NAME - TO BE REMOVED LATER",
981 "The names you give to fields cannot start with a lowercase character directly followed by a character in uppercase. This is due to a bug in the Jakarta commons library which is used by Struts. The behavior of that library is inconsistent with the reflection API provided by the JDK. Please rename this field or you'll get exceptions when running your web application."));
982 }
983 }
984 catch (Throwable th)
985 {
986 Throwable cause = th.getCause();
987 int depth = 0; // Some throwables have infinite recursion
988 while (cause != null && depth < 7)
989 {
990 th = cause;
991 depth++;
992 }
993 logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::SAFE NAME - TO BE REMOVED LATER' ON "
994 + this.THIS().toString() + ": " + th.getMessage(), th);
995 }
996 }
997
998 /**
999 * The property that stores the name of the metafacade.
1000 */
1001 private static final String NAME_PROPERTY = "name";
1002 private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1003
1004 /**
1005 * @see Object#toString()
1006 */
1007 @Override
1008 public String toString()
1009 {
1010 final StringBuilder toString = new StringBuilder(this.getClass().getName());
1011 toString.append("[");
1012 try
1013 {
1014 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1015 }
1016 catch (final Throwable tryAgain)
1017 {
1018 try
1019 {
1020 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1021 }
1022 catch (final Throwable ignore)
1023 {
1024 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1025 }
1026 }
1027 toString.append("]");
1028 return toString.toString();
1029 }
1030 }