1 // license-header java merge-point
2 //
3 // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4 //
5 package org.andromda.cartridges.ejb3.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.ClassifierFacade;
13 import org.andromda.metafacades.uml.ConstraintFacade;
14 import org.andromda.metafacades.uml.DependencyFacade;
15 import org.andromda.metafacades.uml.ModelElementFacade;
16 import org.andromda.metafacades.uml.ModelFacade;
17 import org.andromda.metafacades.uml.OperationFacade;
18 import org.andromda.metafacades.uml.PackageFacade;
19 import org.andromda.metafacades.uml.ParameterFacade;
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
26 /**
27 * Represents an operation in an entity EJB bean POJO.
28 * MetafacadeLogic for EJB3OperationFacade
29 *
30 * @see EJB3OperationFacade
31 */
32 public abstract class EJB3OperationFacadeLogic
33 extends MetafacadeBase
34 implements EJB3OperationFacade
35 {
36 /**
37 * The underlying UML object
38 * @see Object
39 */
40 protected Object metaObject;
41
42 /** Create Metafacade implementation instance using the MetafacadeFactory from the context
43 * @param metaObjectIn
44 * @param context
45 */
46 protected EJB3OperationFacadeLogic(Object metaObjectIn, String context)
47 {
48 super(metaObjectIn, getContext(context));
49 this.superOperationFacade =
50 (OperationFacade)
51 MetafacadeFactory.getInstance().createFacadeImpl(
52 "org.andromda.metafacades.uml.OperationFacade",
53 metaObjectIn,
54 getContext(context));
55 this.metaObject = metaObjectIn;
56 }
57
58 /**
59 * Gets the context for this metafacade logic instance.
60 * @param context String. Set to EJB3OperationFacade if null
61 * @return context String
62 */
63 private static String getContext(String context)
64 {
65 if (context == null)
66 {
67 context = "org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade";
68 }
69 return context;
70 }
71
72 private OperationFacade superOperationFacade;
73 private boolean superOperationFacadeInitialized = false;
74
75 /**
76 * Gets the OperationFacade parent instance.
77 * @return this.superOperationFacade OperationFacade
78 */
79 private OperationFacade getSuperOperationFacade()
80 {
81 if (!this.superOperationFacadeInitialized)
82 {
83 ((MetafacadeBase)this.superOperationFacade).setMetafacadeContext(this.getMetafacadeContext());
84 this.superOperationFacadeInitialized = true;
85 }
86 return this.superOperationFacade;
87 }
88
89 /** Reset context only for non-root metafacades
90 * @param context
91 * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
92 */
93 @Override
94 public void resetMetafacadeContext(String context)
95 {
96 if (!this.contextRoot) // reset context only for non-root metafacades
97 {
98 context = getContext(context); // to have same value as in original constructor call
99 setMetafacadeContext (context);
100 if (this.superOperationFacadeInitialized)
101 {
102 ((MetafacadeBase)this.superOperationFacade).resetMetafacadeContext(context);
103 }
104 }
105 }
106
107 /**
108 * @return boolean true always
109 * @see EJB3OperationFacade
110 */
111 public boolean isEJB3OperationFacadeMetaType()
112 {
113 return true;
114 }
115
116 // --------------- attributes ---------------------
117
118 /**
119 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isBusinessOperation()
120 * @return boolean
121 */
122 protected abstract boolean handleIsBusinessOperation();
123
124 private boolean __businessOperation1a;
125 private boolean __businessOperation1aSet = false;
126
127 /**
128 * True/false on whether or not this operation is an EJB business operation. This returns true
129 * if the operation is not one of the following:
130 * Create Method
131 * Finder or Query Method
132 * Select Method
133 * @return (boolean)handleIsBusinessOperation()
134 */
135 public final boolean isBusinessOperation()
136 {
137 boolean businessOperation1a = this.__businessOperation1a;
138 if (!this.__businessOperation1aSet)
139 {
140 // businessOperation has no pre constraints
141 businessOperation1a = handleIsBusinessOperation();
142 // businessOperation has no post constraints
143 this.__businessOperation1a = businessOperation1a;
144 if (isMetafacadePropertyCachingEnabled())
145 {
146 this.__businessOperation1aSet = true;
147 }
148 }
149 return businessOperation1a;
150 }
151
152 /**
153 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isSelectMethod()
154 * @return boolean
155 */
156 protected abstract boolean handleIsSelectMethod();
157
158 private boolean __selectMethod2a;
159 private boolean __selectMethod2aSet = false;
160
161 /**
162 * True/false on whether or not this operation represents a select method.
163 * @return (boolean)handleIsSelectMethod()
164 */
165 public final boolean isSelectMethod()
166 {
167 boolean selectMethod2a = this.__selectMethod2a;
168 if (!this.__selectMethod2aSet)
169 {
170 // selectMethod has no pre constraints
171 selectMethod2a = handleIsSelectMethod();
172 // selectMethod has no post constraints
173 this.__selectMethod2a = selectMethod2a;
174 if (isMetafacadePropertyCachingEnabled())
175 {
176 this.__selectMethod2aSet = true;
177 }
178 }
179 return selectMethod2a;
180 }
181
182 /**
183 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPrePersist()
184 * @return boolean
185 */
186 protected abstract boolean handleIsPrePersist();
187
188 private boolean __prePersist3a;
189 private boolean __prePersist3aSet = false;
190
191 /**
192 * Returns true if the associated operation has the <<PrePersist>> stereotype.
193 * NOTE: The method signature must return void and have no args.
194 * @return (boolean)handleIsPrePersist()
195 */
196 public final boolean isPrePersist()
197 {
198 boolean prePersist3a = this.__prePersist3a;
199 if (!this.__prePersist3aSet)
200 {
201 // prePersist has no pre constraints
202 prePersist3a = handleIsPrePersist();
203 // prePersist has no post constraints
204 this.__prePersist3a = prePersist3a;
205 if (isMetafacadePropertyCachingEnabled())
206 {
207 this.__prePersist3aSet = true;
208 }
209 }
210 return prePersist3a;
211 }
212
213 /**
214 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostPersist()
215 * @return boolean
216 */
217 protected abstract boolean handleIsPostPersist();
218
219 private boolean __postPersist4a;
220 private boolean __postPersist4aSet = false;
221
222 /**
223 * Returns true if the associated operation has the <<PostPersist>> stereotype.
224 * NOTE: The method signature must return void and have no args.
225 * @return (boolean)handleIsPostPersist()
226 */
227 public final boolean isPostPersist()
228 {
229 boolean postPersist4a = this.__postPersist4a;
230 if (!this.__postPersist4aSet)
231 {
232 // postPersist has no pre constraints
233 postPersist4a = handleIsPostPersist();
234 // postPersist has no post constraints
235 this.__postPersist4a = postPersist4a;
236 if (isMetafacadePropertyCachingEnabled())
237 {
238 this.__postPersist4aSet = true;
239 }
240 }
241 return postPersist4a;
242 }
243
244 /**
245 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPreRemove()
246 * @return boolean
247 */
248 protected abstract boolean handleIsPreRemove();
249
250 private boolean __preRemove5a;
251 private boolean __preRemove5aSet = false;
252
253 /**
254 * Returns true if the associated operation has the <<PreRemove>> stereotype.
255 * NOTE: The method signature must return void and have no args.
256 * @return (boolean)handleIsPreRemove()
257 */
258 public final boolean isPreRemove()
259 {
260 boolean preRemove5a = this.__preRemove5a;
261 if (!this.__preRemove5aSet)
262 {
263 // preRemove has no pre constraints
264 preRemove5a = handleIsPreRemove();
265 // preRemove has no post constraints
266 this.__preRemove5a = preRemove5a;
267 if (isMetafacadePropertyCachingEnabled())
268 {
269 this.__preRemove5aSet = true;
270 }
271 }
272 return preRemove5a;
273 }
274
275 /**
276 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostRemove()
277 * @return boolean
278 */
279 protected abstract boolean handleIsPostRemove();
280
281 private boolean __postRemove6a;
282 private boolean __postRemove6aSet = false;
283
284 /**
285 * Returns true if the associated operation has the <<PostRemove>> stereotype.
286 * NOTE: The method signature must return void and have no args.
287 * @return (boolean)handleIsPostRemove()
288 */
289 public final boolean isPostRemove()
290 {
291 boolean postRemove6a = this.__postRemove6a;
292 if (!this.__postRemove6aSet)
293 {
294 // postRemove has no pre constraints
295 postRemove6a = handleIsPostRemove();
296 // postRemove has no post constraints
297 this.__postRemove6a = postRemove6a;
298 if (isMetafacadePropertyCachingEnabled())
299 {
300 this.__postRemove6aSet = true;
301 }
302 }
303 return postRemove6a;
304 }
305
306 /**
307 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPreUpdate()
308 * @return boolean
309 */
310 protected abstract boolean handleIsPreUpdate();
311
312 private boolean __preUpdate7a;
313 private boolean __preUpdate7aSet = false;
314
315 /**
316 * Returns true if the associated operation has the <<PreUpdate>> stereotype.
317 * NOTE: The method signature must return void and have no args.
318 * @return (boolean)handleIsPreUpdate()
319 */
320 public final boolean isPreUpdate()
321 {
322 boolean preUpdate7a = this.__preUpdate7a;
323 if (!this.__preUpdate7aSet)
324 {
325 // preUpdate has no pre constraints
326 preUpdate7a = handleIsPreUpdate();
327 // preUpdate has no post constraints
328 this.__preUpdate7a = preUpdate7a;
329 if (isMetafacadePropertyCachingEnabled())
330 {
331 this.__preUpdate7aSet = true;
332 }
333 }
334 return preUpdate7a;
335 }
336
337 /**
338 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostUpdate()
339 * @return boolean
340 */
341 protected abstract boolean handleIsPostUpdate();
342
343 private boolean __postUpdate8a;
344 private boolean __postUpdate8aSet = false;
345
346 /**
347 * Returns true if the associated operation has the <<PostUpdate>> stereotype.
348 * NOTE: The method signature must return void and have no args.
349 * @return (boolean)handleIsPostUpdate()
350 */
351 public final boolean isPostUpdate()
352 {
353 boolean postUpdate8a = this.__postUpdate8a;
354 if (!this.__postUpdate8aSet)
355 {
356 // postUpdate has no pre constraints
357 postUpdate8a = handleIsPostUpdate();
358 // postUpdate has no post constraints
359 this.__postUpdate8a = postUpdate8a;
360 if (isMetafacadePropertyCachingEnabled())
361 {
362 this.__postUpdate8aSet = true;
363 }
364 }
365 return postUpdate8a;
366 }
367
368 /**
369 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isPostLoad()
370 * @return boolean
371 */
372 protected abstract boolean handleIsPostLoad();
373
374 private boolean __postLoad9a;
375 private boolean __postLoad9aSet = false;
376
377 /**
378 * Returns true if the associated operation has the <<PostLoad>> stereotype.
379 * NOTE: The method signature must return void and have no args.
380 * @return (boolean)handleIsPostLoad()
381 */
382 public final boolean isPostLoad()
383 {
384 boolean postLoad9a = this.__postLoad9a;
385 if (!this.__postLoad9aSet)
386 {
387 // postLoad has no pre constraints
388 postLoad9a = handleIsPostLoad();
389 // postLoad has no post constraints
390 this.__postLoad9a = postLoad9a;
391 if (isMetafacadePropertyCachingEnabled())
392 {
393 this.__postLoad9aSet = true;
394 }
395 }
396 return postLoad9a;
397 }
398
399 /**
400 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isLifecycleCallback()
401 * @return boolean
402 */
403 protected abstract boolean handleIsLifecycleCallback();
404
405 private boolean __lifecycleCallback10a;
406 private boolean __lifecycleCallback10aSet = false;
407
408 /**
409 * Returns true if this operation is marked with any of the lifecycle callback stereotypes like
410 * PrePersist, PostPersist, PreRemove, PostRemove, PreUpdate, PostUpdate or PostLoad.
411 * @return (boolean)handleIsLifecycleCallback()
412 */
413 public final boolean isLifecycleCallback()
414 {
415 boolean lifecycleCallback10a = this.__lifecycleCallback10a;
416 if (!this.__lifecycleCallback10aSet)
417 {
418 // lifecycleCallback has no pre constraints
419 lifecycleCallback10a = handleIsLifecycleCallback();
420 // lifecycleCallback has no post constraints
421 this.__lifecycleCallback10a = lifecycleCallback10a;
422 if (isMetafacadePropertyCachingEnabled())
423 {
424 this.__lifecycleCallback10aSet = true;
425 }
426 }
427 return lifecycleCallback10a;
428 }
429
430 /**
431 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#getImplementationName()
432 * @return String
433 */
434 protected abstract String handleGetImplementationName();
435
436 private String __implementationName11a;
437 private boolean __implementationName11aSet = false;
438
439 /**
440 * The name of the operation used within the entity implementation.
441 * @return (String)handleGetImplementationName()
442 */
443 public final String getImplementationName()
444 {
445 String implementationName11a = this.__implementationName11a;
446 if (!this.__implementationName11aSet)
447 {
448 // implementationName has no pre constraints
449 implementationName11a = handleGetImplementationName();
450 // implementationName has no post constraints
451 this.__implementationName11a = implementationName11a;
452 if (isMetafacadePropertyCachingEnabled())
453 {
454 this.__implementationName11aSet = true;
455 }
456 }
457 return implementationName11a;
458 }
459
460 /**
461 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#getImplementationCall()
462 * @return String
463 */
464 protected abstract String handleGetImplementationCall();
465
466 private String __implementationCall12a;
467 private boolean __implementationCall12aSet = false;
468
469 /**
470 * The method call for the implementation operation.
471 * @return (String)handleGetImplementationCall()
472 */
473 public final String getImplementationCall()
474 {
475 String implementationCall12a = this.__implementationCall12a;
476 if (!this.__implementationCall12aSet)
477 {
478 // implementationCall has no pre constraints
479 implementationCall12a = handleGetImplementationCall();
480 // implementationCall has no post constraints
481 this.__implementationCall12a = implementationCall12a;
482 if (isMetafacadePropertyCachingEnabled())
483 {
484 this.__implementationCall12aSet = true;
485 }
486 }
487 return implementationCall12a;
488 }
489
490 /**
491 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#getImplementationSignature()
492 * @return String
493 */
494 protected abstract String handleGetImplementationSignature();
495
496 private String __implementationSignature13a;
497 private boolean __implementationSignature13aSet = false;
498
499 /**
500 * The signature for the implementation operation.
501 * @return (String)handleGetImplementationSignature()
502 */
503 public final String getImplementationSignature()
504 {
505 String implementationSignature13a = this.__implementationSignature13a;
506 if (!this.__implementationSignature13aSet)
507 {
508 // implementationSignature has no pre constraints
509 implementationSignature13a = handleGetImplementationSignature();
510 // implementationSignature has no post constraints
511 this.__implementationSignature13a = implementationSignature13a;
512 if (isMetafacadePropertyCachingEnabled())
513 {
514 this.__implementationSignature13aSet = true;
515 }
516 }
517 return implementationSignature13a;
518 }
519
520 /**
521 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isCreateMethod()
522 * @return boolean
523 */
524 protected abstract boolean handleIsCreateMethod();
525
526 private boolean __createMethod14a;
527 private boolean __createMethod14aSet = false;
528
529 /**
530 * Returns true if the operation has the <<CreateMethod>> stereotype.
531 * @return (boolean)handleIsCreateMethod()
532 */
533 public final boolean isCreateMethod()
534 {
535 boolean createMethod14a = this.__createMethod14a;
536 if (!this.__createMethod14aSet)
537 {
538 // createMethod has no pre constraints
539 createMethod14a = handleIsCreateMethod();
540 // createMethod has no post constraints
541 this.__createMethod14a = createMethod14a;
542 if (isMetafacadePropertyCachingEnabled())
543 {
544 this.__createMethod14aSet = true;
545 }
546 }
547 return createMethod14a;
548 }
549
550 /**
551 * @see org.andromda.cartridges.ejb3.metafacades.EJB3OperationFacade#isFinderMethod()
552 * @return boolean
553 */
554 protected abstract boolean handleIsFinderMethod();
555
556 private boolean __finderMethod15a;
557 private boolean __finderMethod15aSet = false;
558
559 /**
560 * Returns true if the operation is a finder or query operation.
561 * @return (boolean)handleIsFinderMethod()
562 */
563 public final boolean isFinderMethod()
564 {
565 boolean finderMethod15a = this.__finderMethod15a;
566 if (!this.__finderMethod15aSet)
567 {
568 // finderMethod has no pre constraints
569 finderMethod15a = handleIsFinderMethod();
570 // finderMethod has no post constraints
571 this.__finderMethod15a = finderMethod15a;
572 if (isMetafacadePropertyCachingEnabled())
573 {
574 this.__finderMethod15aSet = true;
575 }
576 }
577 return finderMethod15a;
578 }
579
580 // ------------- associations ------------------
581
582 /**
583 * @return true
584 * @see OperationFacade
585 */
586 public boolean isOperationFacadeMetaType()
587 {
588 return true;
589 }
590
591 /**
592 * @return true
593 * @see ModelElementFacade
594 */
595 public boolean isModelElementFacadeMetaType()
596 {
597 return true;
598 }
599
600 // ----------- delegates to OperationFacade ------------
601 /**
602 * Copies all tagged values from the given ModelElementFacade to this model element facade.
603 * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
604 */
605 public void copyTaggedValues(ModelElementFacade element)
606 {
607 this.getSuperOperationFacade().copyTaggedValues(element);
608 }
609
610 /**
611 * Finds the tagged value with the specified 'tagName'. In case there are more values the first
612 * one found will be returned.
613 * @see ModelElementFacade#findTaggedValue(String tagName)
614 */
615 public Object findTaggedValue(String tagName)
616 {
617 return this.getSuperOperationFacade().findTaggedValue(tagName);
618 }
619
620 /**
621 * Returns all the values for the tagged value with the specified name. The returned collection
622 * will contains only String instances, or will be empty. Never null.
623 * @see ModelElementFacade#findTaggedValues(String tagName)
624 */
625 public Collection<Object> findTaggedValues(String tagName)
626 {
627 return this.getSuperOperationFacade().findTaggedValues(tagName);
628 }
629
630 /**
631 * Returns the fully qualified name of the model element. The fully qualified name includes
632 * complete package qualified name of the underlying model element. The templates parameter will
633 * be replaced by the correct one given the binding relation of the parameter to this element.
634 * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
635 */
636 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
637 {
638 return this.getSuperOperationFacade().getBindedFullyQualifiedName(bindedElement);
639 }
640
641 /**
642 * Gets all constraints belonging to the model element.
643 * @see ModelElementFacade#getConstraints()
644 */
645 public Collection<ConstraintFacade> getConstraints()
646 {
647 return this.getSuperOperationFacade().getConstraints();
648 }
649
650 /**
651 * Returns the constraints of the argument kind that have been placed onto this model. Typical
652 * kinds are "inv", "pre" and "post". Other kinds are possible.
653 * @see ModelElementFacade#getConstraints(String kind)
654 */
655 public Collection<ConstraintFacade> getConstraints(String kind)
656 {
657 return this.getSuperOperationFacade().getConstraints(kind);
658 }
659
660 /**
661 * Gets the documentation for the model element, The indent argument is prefixed to each line.
662 * By default this method wraps lines after 64 characters.
663 * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
664 * @see ModelElementFacade#getDocumentation(String indent)
665 */
666 public String getDocumentation(String indent)
667 {
668 return this.getSuperOperationFacade().getDocumentation(indent);
669 }
670
671 /**
672 * This method returns the documentation for this model element, with the lines wrapped after
673 * the specified number of characters, values of less than 1 will indicate no line wrapping is
674 * required. By default paragraphs are returned as HTML.
675 * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
676 * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
677 */
678 public String getDocumentation(String indent, int lineLength)
679 {
680 return this.getSuperOperationFacade().getDocumentation(indent, lineLength);
681 }
682
683 /**
684 * This method returns the documentation for this model element, with the lines wrapped after
685 * the specified number of characters, values of less than 1 will indicate no line wrapping is
686 * required. HTML style determines if HTML Escaping is applied.
687 * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
688 */
689 public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
690 {
691 return this.getSuperOperationFacade().getDocumentation(indent, lineLength, htmlStyle);
692 }
693
694 /**
695 * The fully qualified name of this model element.
696 * @see ModelElementFacade#getFullyQualifiedName()
697 */
698 public String getFullyQualifiedName()
699 {
700 return this.getSuperOperationFacade().getFullyQualifiedName();
701 }
702
703 /**
704 * Returns the fully qualified name of the model element. The fully qualified name includes
705 * complete package qualified name of the underlying model element. If modelName is true, then
706 * the original name of the model element (the name contained within the model) will be the name
707 * returned, otherwise a name from a language mapping will be returned.
708 * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
709 */
710 public String getFullyQualifiedName(boolean modelName)
711 {
712 return this.getSuperOperationFacade().getFullyQualifiedName(modelName);
713 }
714
715 /**
716 * Returns the fully qualified name as a path, the returned value always starts with out a slash
717 * '/'.
718 * @see ModelElementFacade#getFullyQualifiedNamePath()
719 */
720 public String getFullyQualifiedNamePath()
721 {
722 return this.getSuperOperationFacade().getFullyQualifiedNamePath();
723 }
724
725 /**
726 * Gets the unique identifier of the underlying model element.
727 * @see ModelElementFacade#getId()
728 */
729 public String getId()
730 {
731 return this.getSuperOperationFacade().getId();
732 }
733
734 /**
735 * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
736 * are not represented by other properties, i.e. native, transient, volatile, synchronized,
737 * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
738 * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
739 * JDK5 compiler level.
740 * @see ModelElementFacade#getKeywords()
741 */
742 public Collection<String> getKeywords()
743 {
744 return this.getSuperOperationFacade().getKeywords();
745 }
746
747 /**
748 * UML2: Retrieves a localized label for this named element.
749 * @see ModelElementFacade#getLabel()
750 */
751 public String getLabel()
752 {
753 return this.getSuperOperationFacade().getLabel();
754 }
755
756 /**
757 * The language mappings that have been set for this model element.
758 * @see ModelElementFacade#getLanguageMappings()
759 */
760 public TypeMappings getLanguageMappings()
761 {
762 return this.getSuperOperationFacade().getLanguageMappings();
763 }
764
765 /**
766 * Return the model containing this model element (multiple models may be loaded and processed
767 * at the same time).
768 * @see ModelElementFacade#getModel()
769 */
770 public ModelFacade getModel()
771 {
772 return this.getSuperOperationFacade().getModel();
773 }
774
775 /**
776 * The name of the model element.
777 * @see ModelElementFacade#getName()
778 */
779 public String getName()
780 {
781 return this.getSuperOperationFacade().getName();
782 }
783
784 /**
785 * Gets the package to which this model element belongs.
786 * @see ModelElementFacade#getPackage()
787 */
788 public ModelElementFacade getPackage()
789 {
790 return this.getSuperOperationFacade().getPackage();
791 }
792
793 /**
794 * The name of this model element's package.
795 * @see ModelElementFacade#getPackageName()
796 */
797 public String getPackageName()
798 {
799 return this.getSuperOperationFacade().getPackageName();
800 }
801
802 /**
803 * Gets the package name (optionally providing the ability to retrieve the model name and not
804 * the mapped name).
805 * @see ModelElementFacade#getPackageName(boolean modelName)
806 */
807 public String getPackageName(boolean modelName)
808 {
809 return this.getSuperOperationFacade().getPackageName(modelName);
810 }
811
812 /**
813 * Returns the package as a path, the returned value always starts with out a slash '/'.
814 * @see ModelElementFacade#getPackagePath()
815 */
816 public String getPackagePath()
817 {
818 return this.getSuperOperationFacade().getPackagePath();
819 }
820
821 /**
822 * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
823 * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
824 * the names of the containing namespaces starting at the root of the hierarchy and ending with
825 * the name of the NamedElement itself.
826 * @see ModelElementFacade#getQualifiedName()
827 */
828 public String getQualifiedName()
829 {
830 return this.getSuperOperationFacade().getQualifiedName();
831 }
832
833 /**
834 * Gets the root package for the model element.
835 * @see ModelElementFacade#getRootPackage()
836 */
837 public PackageFacade getRootPackage()
838 {
839 return this.getSuperOperationFacade().getRootPackage();
840 }
841
842 /**
843 * Gets the dependencies for which this model element is the source.
844 * @see ModelElementFacade#getSourceDependencies()
845 */
846 public Collection<DependencyFacade> getSourceDependencies()
847 {
848 return this.getSuperOperationFacade().getSourceDependencies();
849 }
850
851 /**
852 * If this model element is the context of an activity graph, this represents that activity
853 * graph.
854 * @see ModelElementFacade#getStateMachineContext()
855 */
856 public StateMachineFacade getStateMachineContext()
857 {
858 return this.getSuperOperationFacade().getStateMachineContext();
859 }
860
861 /**
862 * The collection of ALL stereotype names for this model element.
863 * @see ModelElementFacade#getStereotypeNames()
864 */
865 public Collection<String> getStereotypeNames()
866 {
867 return this.getSuperOperationFacade().getStereotypeNames();
868 }
869
870 /**
871 * Gets all stereotypes for this model element.
872 * @see ModelElementFacade#getStereotypes()
873 */
874 public Collection<StereotypeFacade> getStereotypes()
875 {
876 return this.getSuperOperationFacade().getStereotypes();
877 }
878
879 /**
880 * Return the TaggedValues associated with this model element, under all stereotypes.
881 * @see ModelElementFacade#getTaggedValues()
882 */
883 public Collection<TaggedValueFacade> getTaggedValues()
884 {
885 return this.getSuperOperationFacade().getTaggedValues();
886 }
887
888 /**
889 * Gets the dependencies for which this model element is the target.
890 * @see ModelElementFacade#getTargetDependencies()
891 */
892 public Collection<DependencyFacade> getTargetDependencies()
893 {
894 return this.getSuperOperationFacade().getTargetDependencies();
895 }
896
897 /**
898 * Get the template parameter for this model element having the parameterName
899 * @see ModelElementFacade#getTemplateParameter(String parameterName)
900 */
901 public Object getTemplateParameter(String parameterName)
902 {
903 return this.getSuperOperationFacade().getTemplateParameter(parameterName);
904 }
905
906 /**
907 * Get the template parameters for this model element
908 * @see ModelElementFacade#getTemplateParameters()
909 */
910 public Collection<TemplateParameterFacade> getTemplateParameters()
911 {
912 return this.getSuperOperationFacade().getTemplateParameters();
913 }
914
915 /**
916 * The visibility (i.e. public, private, protected or package) of the model element, will
917 * attempt a lookup for these values in the language mappings (if any).
918 * @see ModelElementFacade#getVisibility()
919 */
920 public String getVisibility()
921 {
922 return this.getSuperOperationFacade().getVisibility();
923 }
924
925 /**
926 * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
927 * is taken into account when searching for the stereotype), false otherwise.
928 * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
929 */
930 public boolean hasExactStereotype(String stereotypeName)
931 {
932 return this.getSuperOperationFacade().hasExactStereotype(stereotypeName);
933 }
934
935 /**
936 * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
937 * pipe, semicolon, or << >>
938 * @see ModelElementFacade#hasKeyword(String keywordName)
939 */
940 public boolean hasKeyword(String keywordName)
941 {
942 return this.getSuperOperationFacade().hasKeyword(keywordName);
943 }
944
945 /**
946 * Returns true if the model element has the specified stereotype. If the stereotype itself
947 * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
948 * one of the stereotype's ancestors has a matching name this method will return true, false
949 * otherwise.
950 * For example, if we have a certain stereotype called <<exception>> and a model element has a
951 * stereotype called <<applicationException>> which extends <<exception>>, when calling this
952 * method with 'stereotypeName' defined as 'exception' the method would return true since
953 * <<applicationException>> inherits from <<exception>>. If you want to check if the model
954 * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
955 * @see ModelElementFacade#hasStereotype(String stereotypeName)
956 */
957 public boolean hasStereotype(String stereotypeName)
958 {
959 return this.getSuperOperationFacade().hasStereotype(stereotypeName);
960 }
961
962 /**
963 * True if there are target dependencies from this element that are instances of BindingFacade.
964 * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
965 * @see ModelElementFacade#isBindingDependenciesPresent()
966 */
967 public boolean isBindingDependenciesPresent()
968 {
969 return this.getSuperOperationFacade().isBindingDependenciesPresent();
970 }
971
972 /**
973 * Indicates if any constraints are present on this model element.
974 * @see ModelElementFacade#isConstraintsPresent()
975 */
976 public boolean isConstraintsPresent()
977 {
978 return this.getSuperOperationFacade().isConstraintsPresent();
979 }
980
981 /**
982 * Indicates if any documentation is present on this model element.
983 * @see ModelElementFacade#isDocumentationPresent()
984 */
985 public boolean isDocumentationPresent()
986 {
987 return this.getSuperOperationFacade().isDocumentationPresent();
988 }
989
990 /**
991 * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
992 * @see ModelElementFacade#isReservedWord()
993 */
994 public boolean isReservedWord()
995 {
996 return this.getSuperOperationFacade().isReservedWord();
997 }
998
999 /**
1000 * True is there are template parameters on this model element. For UML2, applies to Class,
1001 * Operation, Property, and Parameter.
1002 * @see ModelElementFacade#isTemplateParametersPresent()
1003 */
1004 public boolean isTemplateParametersPresent()
1005 {
1006 return this.getSuperOperationFacade().isTemplateParametersPresent();
1007 }
1008
1009 /**
1010 * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1011 * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1012 * Enumerations and Interfaces, optionally applies on other model elements.
1013 * @see ModelElementFacade#isValidIdentifierName()
1014 */
1015 public boolean isValidIdentifierName()
1016 {
1017 return this.getSuperOperationFacade().isValidIdentifierName();
1018 }
1019
1020 /**
1021 * Searches for the constraint with the specified 'name' on this model element, and if found
1022 * translates it using the specified 'translation' from a translation library discovered by the
1023 * framework.
1024 * @see ModelElementFacade#translateConstraint(String name, String translation)
1025 */
1026 public String translateConstraint(String name, String translation)
1027 {
1028 return this.getSuperOperationFacade().translateConstraint(name, translation);
1029 }
1030
1031 /**
1032 * Translates all constraints belonging to this model element with the given 'translation'.
1033 * @see ModelElementFacade#translateConstraints(String translation)
1034 */
1035 public String[] translateConstraints(String translation)
1036 {
1037 return this.getSuperOperationFacade().translateConstraints(translation);
1038 }
1039
1040 /**
1041 * Translates the constraints of the specified 'kind' belonging to this model element.
1042 * @see ModelElementFacade#translateConstraints(String kind, String translation)
1043 */
1044 public String[] translateConstraints(String kind, String translation)
1045 {
1046 return this.getSuperOperationFacade().translateConstraints(kind, translation);
1047 }
1048
1049 /**
1050 * Finds the parameter on this operation having the given name, if no parameter is found, null
1051 * is returned instead.
1052 * @see OperationFacade#findParameter(String name)
1053 */
1054 public ParameterFacade findParameter(String name)
1055 {
1056 return this.getSuperOperationFacade().findParameter(name);
1057 }
1058
1059 /**
1060 * Searches the given feature for the specified tag.
1061 * If the follow boolean is set to true then the search will continue from the class operation
1062 * to the class itself and then up the class hierarchy.
1063 * @see OperationFacade#findTaggedValue(String name, boolean follow)
1064 */
1065 public Object findTaggedValue(String name, boolean follow)
1066 {
1067 return this.getSuperOperationFacade().findTaggedValue(name, follow);
1068 }
1069
1070 /**
1071 * A comma separated list of all argument names.
1072 * @see OperationFacade#getArgumentNames()
1073 */
1074 public String getArgumentNames()
1075 {
1076 return this.getSuperOperationFacade().getArgumentNames();
1077 }
1078
1079 /**
1080 * A comma separated list of all types of each argument, in order.
1081 * @see OperationFacade#getArgumentTypeNames()
1082 */
1083 public String getArgumentTypeNames()
1084 {
1085 return this.getSuperOperationFacade().getArgumentTypeNames();
1086 }
1087
1088 /**
1089 * Specification of an argument used to pass information into or out of an invocation of a
1090 * behavioral
1091 * feature. Parameters are allowed to be treated as connectable elements. Parameters have
1092 * support for
1093 * streaming, exceptions, and parameter sets.
1094 * @see OperationFacade#getArguments()
1095 */
1096 public Collection<ParameterFacade> getArguments()
1097 {
1098 return this.getSuperOperationFacade().getArguments();
1099 }
1100
1101 /**
1102 * Constructs the operation call with the operation name
1103 * @see OperationFacade#getCall()
1104 */
1105 public String getCall()
1106 {
1107 return this.getSuperOperationFacade().getCall();
1108 }
1109
1110 /**
1111 * Returns the concurrency modifier for this operation (i.e. concurrent, guarded or sequential)
1112 * of the model element, will attempt a lookup for these values in the language mappings (if
1113 * any).
1114 * @see OperationFacade#getConcurrency()
1115 */
1116 public String getConcurrency()
1117 {
1118 return this.getSuperOperationFacade().getConcurrency();
1119 }
1120
1121 /**
1122 * A comma separated list containing all exceptions that this operation throws. Exceptions are
1123 * determined through dependencies that have the target element stereotyped as <<Exception>>.
1124 * @see OperationFacade#getExceptionList()
1125 */
1126 public String getExceptionList()
1127 {
1128 return this.getSuperOperationFacade().getExceptionList();
1129 }
1130
1131 /**
1132 * Returns a comma separated list of exceptions appended to the comma separated list of fully
1133 * qualified 'initialException' classes passed in to this method.
1134 * @see OperationFacade#getExceptionList(String initialExceptions)
1135 */
1136 public String getExceptionList(String initialExceptions)
1137 {
1138 return this.getSuperOperationFacade().getExceptionList(initialExceptions);
1139 }
1140
1141 /**
1142 * A collection of all exceptions thrown by this operation.
1143 * @see OperationFacade#getExceptions()
1144 */
1145 public Collection<ModelElementFacade> getExceptions()
1146 {
1147 return this.getSuperOperationFacade().getExceptions();
1148 }
1149
1150 /**
1151 * Return Type with multiplicity taken into account. UML14 does not allow multiplicity *.
1152 * @see OperationFacade#getGetterSetterReturnTypeName()
1153 */
1154 public String getGetterSetterReturnTypeName()
1155 {
1156 return this.getSuperOperationFacade().getGetterSetterReturnTypeName();
1157 }
1158
1159 /**
1160 * the lower value for the multiplicity
1161 * -only applicable for UML2
1162 * @see OperationFacade#getLower()
1163 */
1164 public int getLower()
1165 {
1166 return this.getSuperOperationFacade().getLower();
1167 }
1168
1169 /**
1170 * Returns the operation method body determined from UML sequence diagrams or other UML sources.
1171 * @see OperationFacade#getMethodBody()
1172 */
1173 public String getMethodBody()
1174 {
1175 return this.getSuperOperationFacade().getMethodBody();
1176 }
1177
1178 /**
1179 * The operation this operation overrides, null if this operation is not overriding.
1180 * @see OperationFacade#getOverriddenOperation()
1181 */
1182 public OperationFacade getOverriddenOperation()
1183 {
1184 return this.getSuperOperationFacade().getOverriddenOperation();
1185 }
1186
1187 /**
1188 * Gets the owner of this operation
1189 * @see OperationFacade#getOwner()
1190 */
1191 public ClassifierFacade getOwner()
1192 {
1193 return this.getSuperOperationFacade().getOwner();
1194 }
1195
1196 /**
1197 * Return all parameters for the operation, including the return parameter.
1198 * @see OperationFacade#getParameters()
1199 */
1200 public Collection<ParameterFacade> getParameters()
1201 {
1202 return this.getSuperOperationFacade().getParameters();
1203 }
1204
1205 /**
1206 * The name of the operation that handles postcondition constraints.
1207 * @see OperationFacade#getPostconditionName()
1208 */
1209 public String getPostconditionName()
1210 {
1211 return this.getSuperOperationFacade().getPostconditionName();
1212 }
1213
1214 /**
1215 * The postcondition constraints belonging to this operation.
1216 * @see OperationFacade#getPostconditions()
1217 */
1218 public Collection<ConstraintFacade> getPostconditions()
1219 {
1220 return this.getSuperOperationFacade().getPostconditions();
1221 }
1222
1223 /**
1224 * The call to the precondition operation.
1225 * @see OperationFacade#getPreconditionCall()
1226 */
1227 public String getPreconditionCall()
1228 {
1229 return this.getSuperOperationFacade().getPreconditionCall();
1230 }
1231
1232 /**
1233 * The name of the operation that handles precondition constraints.
1234 * @see OperationFacade#getPreconditionName()
1235 */
1236 public String getPreconditionName()
1237 {
1238 return this.getSuperOperationFacade().getPreconditionName();
1239 }
1240
1241 /**
1242 * The signature of the precondition operation.
1243 * @see OperationFacade#getPreconditionSignature()
1244 */
1245 public String getPreconditionSignature()
1246 {
1247 return this.getSuperOperationFacade().getPreconditionSignature();
1248 }
1249
1250 /**
1251 * The precondition constraints belonging to this operation.
1252 * @see OperationFacade#getPreconditions()
1253 */
1254 public Collection<ConstraintFacade> getPreconditions()
1255 {
1256 return this.getSuperOperationFacade().getPreconditions();
1257 }
1258
1259 /**
1260 * (UML2 Only). Get the actual return parameter (which may have stereotypes etc).
1261 * @see OperationFacade#getReturnParameter()
1262 */
1263 public ParameterFacade getReturnParameter()
1264 {
1265 return this.getSuperOperationFacade().getReturnParameter();
1266 }
1267
1268 /**
1269 * The operation return type parameter.
1270 * @see OperationFacade#getReturnType()
1271 */
1272 public ClassifierFacade getReturnType()
1273 {
1274 return this.getSuperOperationFacade().getReturnType();
1275 }
1276
1277 /**
1278 * Return the operation signature, including public/protested abstract returnType name plus
1279 * argument type and name
1280 * @see OperationFacade#getSignature()
1281 */
1282 public String getSignature()
1283 {
1284 return this.getSuperOperationFacade().getSignature();
1285 }
1286
1287 /**
1288 * Returns the signature of the operation and optionally appends the argument names (if
1289 * withArgumentNames is true), otherwise returns the signature with just the types alone in the
1290 * signature.
1291 * @see OperationFacade#getSignature(boolean withArgumentNames)
1292 */
1293 public String getSignature(boolean withArgumentNames)
1294 {
1295 return this.getSuperOperationFacade().getSignature(withArgumentNames);
1296 }
1297
1298 /**
1299 * Returns the signature of the operation and optionally appends the given 'argumentModifier' to
1300 * each argument.
1301 * @see OperationFacade#getSignature(String argumentModifier)
1302 */
1303 public String getSignature(String argumentModifier)
1304 {
1305 return this.getSuperOperationFacade().getSignature(argumentModifier);
1306 }
1307
1308 /**
1309 * A comma-separated parameter list (type and name of each parameter) of an operation.
1310 * @see OperationFacade#getTypedArgumentList()
1311 */
1312 public String getTypedArgumentList()
1313 {
1314 return this.getSuperOperationFacade().getTypedArgumentList();
1315 }
1316
1317 /**
1318 * A comma-separated parameter list (type and name of each parameter) of an operation with an
1319 * optional modifier (i.e final) before each parameter.
1320 * @see OperationFacade#getTypedArgumentList(String modifier)
1321 */
1322 public String getTypedArgumentList(String modifier)
1323 {
1324 return this.getSuperOperationFacade().getTypedArgumentList(modifier);
1325 }
1326
1327 /**
1328 * the upper value for the multiplicity (will be -1 for *)
1329 * - only applicable for UML2
1330 * @see OperationFacade#getUpper()
1331 */
1332 public int getUpper()
1333 {
1334 return this.getSuperOperationFacade().getUpper();
1335 }
1336
1337 /**
1338 * True is the operation is abstract.
1339 * @see OperationFacade#isAbstract()
1340 */
1341 public boolean isAbstract()
1342 {
1343 return this.getSuperOperationFacade().isAbstract();
1344 }
1345
1346 /**
1347 * True if the operation has (i.e. throws any exceptions) false otherwise.
1348 * @see OperationFacade#isExceptionsPresent()
1349 */
1350 public boolean isExceptionsPresent()
1351 {
1352 return this.getSuperOperationFacade().isExceptionsPresent();
1353 }
1354
1355 /**
1356 * IsLeaf property in the operation. If true, operation is final, cannot be extended or
1357 * implemented by a descendant. Default=false.
1358 * @see OperationFacade#isLeaf()
1359 */
1360 public boolean isLeaf()
1361 {
1362 return this.getSuperOperationFacade().isLeaf();
1363 }
1364
1365 /**
1366 * UML2 only. If the return type parameter multiplicity>1 OR the operation multiplicity>1.
1367 * Default=false.
1368 * @see OperationFacade#isMany()
1369 */
1370 public boolean isMany()
1371 {
1372 return this.getSuperOperationFacade().isMany();
1373 }
1374
1375 /**
1376 * UML2 only: If isMany (Collection type returned), is the type unique within the collection.
1377 * Unique+Ordered determines CollectionType implementation of return result. Default=false.
1378 * @see OperationFacade#isOrdered()
1379 */
1380 public boolean isOrdered()
1381 {
1382 return this.getSuperOperationFacade().isOrdered();
1383 }
1384
1385 /**
1386 * True if this operation overrides an operation defined in an ancestor class. An operation
1387 * overrides when the names of the operations as well as the types of the arguments are equal.
1388 * The return type may be different and is, as well as any exceptions, ignored.
1389 * @see OperationFacade#isOverriding()
1390 */
1391 public boolean isOverriding()
1392 {
1393 return this.getSuperOperationFacade().isOverriding();
1394 }
1395
1396 /**
1397 * Whether any postcondition constraints are present on this operation.
1398 * @see OperationFacade#isPostconditionsPresent()
1399 */
1400 public boolean isPostconditionsPresent()
1401 {
1402 return this.getSuperOperationFacade().isPostconditionsPresent();
1403 }
1404
1405 /**
1406 * Whether any precondition constraints are present on this operation.
1407 * @see OperationFacade#isPreconditionsPresent()
1408 */
1409 public boolean isPreconditionsPresent()
1410 {
1411 return this.getSuperOperationFacade().isPreconditionsPresent();
1412 }
1413
1414 /**
1415 * Indicates whether or not this operation is a query operation.
1416 * @see OperationFacade#isQuery()
1417 */
1418 public boolean isQuery()
1419 {
1420 return this.getSuperOperationFacade().isQuery();
1421 }
1422
1423 /**
1424 * True/false depending on whether or not the operation has a return type or not (i.e. a return
1425 * type of something other than void).
1426 * @see OperationFacade#isReturnTypePresent()
1427 */
1428 public boolean isReturnTypePresent()
1429 {
1430 return this.getSuperOperationFacade().isReturnTypePresent();
1431 }
1432
1433 /**
1434 * True is the operation is static (only a single instance can be instantiated).
1435 * @see OperationFacade#isStatic()
1436 */
1437 public boolean isStatic()
1438 {
1439 return this.getSuperOperationFacade().isStatic();
1440 }
1441
1442 /**
1443 * UML2 only: for Collection return type, is the type unique within the collection.
1444 * Unique+Ordered determines the returned CollectionType. Default=false.
1445 * @see OperationFacade#isUnique()
1446 */
1447 public boolean isUnique()
1448 {
1449 return this.getSuperOperationFacade().isUnique();
1450 }
1451
1452 /**
1453 * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1454 */
1455 @Override
1456 public void initialize()
1457 {
1458 this.getSuperOperationFacade().initialize();
1459 }
1460
1461 /**
1462 * @return Object getSuperOperationFacade().getValidationOwner()
1463 * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1464 */
1465 @Override
1466 public Object getValidationOwner()
1467 {
1468 Object owner = this.getSuperOperationFacade().getValidationOwner();
1469 return owner;
1470 }
1471
1472 /**
1473 * @return String getSuperOperationFacade().getValidationName()
1474 * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1475 */
1476 @Override
1477 public String getValidationName()
1478 {
1479 String name = this.getSuperOperationFacade().getValidationName();
1480 return name;
1481 }
1482
1483 /**
1484 * @param validationMessages Collection<ModelValidationMessage>
1485 * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1486 */
1487 @Override
1488 public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1489 {
1490 this.getSuperOperationFacade().validateInvariants(validationMessages);
1491 }
1492
1493 /**
1494 * The property that stores the name of the metafacade.
1495 */
1496 private static final String NAME_PROPERTY = "name";
1497 private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1498
1499 /**
1500 * @see Object#toString()
1501 */
1502 @Override
1503 public String toString()
1504 {
1505 final StringBuilder toString = new StringBuilder(this.getClass().getName());
1506 toString.append("[");
1507 try
1508 {
1509 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1510 }
1511 catch (final Throwable tryAgain)
1512 {
1513 try
1514 {
1515 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1516 }
1517 catch (final Throwable ignore)
1518 {
1519 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1520 }
1521 }
1522 toString.append("]");
1523 return toString.toString();
1524 }
1525 }