1 // license-header java merge-point
2 //
3 // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4 //
5 package org.andromda.cartridges.jbpm.metafacades;
6
7 import java.util.Collection;
8 import java.util.List;
9 import org.andromda.core.common.Introspector;
10 import org.andromda.core.metafacade.MetafacadeBase;
11 import org.andromda.core.metafacade.MetafacadeFactory;
12 import org.andromda.core.metafacade.ModelValidationMessage;
13 import org.andromda.metafacades.uml.ConstraintFacade;
14 import org.andromda.metafacades.uml.DependencyFacade;
15 import org.andromda.metafacades.uml.EventFacade;
16 import org.andromda.metafacades.uml.FinalStateFacade;
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.PartitionFacade;
21 import org.andromda.metafacades.uml.StateFacade;
22 import org.andromda.metafacades.uml.StateMachineFacade;
23 import org.andromda.metafacades.uml.StereotypeFacade;
24 import org.andromda.metafacades.uml.TaggedValueFacade;
25 import org.andromda.metafacades.uml.TemplateParameterFacade;
26 import org.andromda.metafacades.uml.TransitionFacade;
27 import org.andromda.metafacades.uml.TypeMappings;
28 import org.andromda.translation.ocl.validation.OCLCollections;
29 import org.andromda.translation.ocl.validation.OCLIntrospector;
30 import org.andromda.translation.ocl.validation.OCLResultEnsurer;
31 import org.apache.log4j.Logger;
32
33 /**
34 * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmEndState
35 * MetafacadeLogic for JBpmEndState
36 *
37 * @see JBpmEndState
38 */
39 public abstract class JBpmEndStateLogic
40 extends MetafacadeBase
41 implements JBpmEndState
42 {
43 /**
44 * The underlying UML object
45 * @see Object
46 */
47 protected Object metaObject;
48
49 /** Create Metafacade implementation instance using the MetafacadeFactory from the context
50 * @param metaObjectIn
51 * @param context
52 */
53 protected JBpmEndStateLogic(Object metaObjectIn, String context)
54 {
55 super(metaObjectIn, getContext(context));
56 this.superJBpmEventState =
57 (JBpmEventState)
58 MetafacadeFactory.getInstance().createFacadeImpl(
59 "org.andromda.cartridges.jbpm.metafacades.JBpmEventState",
60 metaObjectIn,
61 getContext(context));
62 this.superFinalStateFacade =
63 (FinalStateFacade)
64 MetafacadeFactory.getInstance().createFacadeImpl(
65 "org.andromda.metafacades.uml.FinalStateFacade",
66 metaObjectIn,
67 getContext(context));
68 this.metaObject = metaObjectIn;
69 }
70
71 /**
72 * The logger instance.
73 */
74 private static final Logger logger = Logger.getLogger(JBpmEndStateLogic.class);
75
76 /**
77 * Gets the context for this metafacade logic instance.
78 * @param context String. Set to JBpmEndState if null
79 * @return context String
80 */
81 private static String getContext(String context)
82 {
83 if (context == null)
84 {
85 context = "org.andromda.cartridges.jbpm.metafacades.JBpmEndState";
86 }
87 return context;
88 }
89
90 private JBpmEventState superJBpmEventState;
91 private boolean superJBpmEventStateInitialized = false;
92
93 /**
94 * Gets the JBpmEventState parent instance.
95 * @return this.superJBpmEventState JBpmEventState
96 */
97 protected JBpmEventState getSuperJBpmEventState()
98 {
99 if (!this.superJBpmEventStateInitialized)
100 {
101 ((MetafacadeBase)this.superJBpmEventState).setMetafacadeContext(this.getMetafacadeContext());
102 this.superJBpmEventStateInitialized = true;
103 }
104 return this.superJBpmEventState;
105 }
106
107 private FinalStateFacade superFinalStateFacade;
108 private boolean superFinalStateFacadeInitialized = false;
109
110 /**
111 * Gets the FinalStateFacade parent instance.
112 * @return this.superFinalStateFacade FinalStateFacade
113 */
114 protected FinalStateFacade getSuperFinalStateFacade()
115 {
116 if (!this.superFinalStateFacadeInitialized)
117 {
118 ((MetafacadeBase)this.superFinalStateFacade).setMetafacadeContext(this.getMetafacadeContext());
119 this.superFinalStateFacadeInitialized = true;
120 }
121 return this.superFinalStateFacade;
122 }
123
124 /** Reset context only for non-root metafacades
125 * @param context
126 * @see MetafacadeBase#resetMetafacadeContext(String context)
127 */
128 @Override
129 public void resetMetafacadeContext(String context)
130 {
131 if (!this.contextRoot) // reset context only for non-root metafacades
132 {
133 context = getContext(context); // to have same value as in original constructor call
134 setMetafacadeContext (context);
135 if (this.superJBpmEventStateInitialized)
136 {
137 ((MetafacadeBase)this.superJBpmEventState).resetMetafacadeContext(context);
138 }
139 if (this.superFinalStateFacadeInitialized)
140 {
141 ((MetafacadeBase)this.superFinalStateFacade).resetMetafacadeContext(context);
142 }
143 }
144 }
145
146 /**
147 * @return boolean true always
148 * @see JBpmEndState
149 */
150 public boolean isJBpmEndStateMetaType()
151 {
152 return true;
153 }
154
155 // ------------- associations ------------------
156
157 /**
158 * @return true
159 * @see JBpmEventState
160 */
161 public boolean isJBpmEventStateMetaType()
162 {
163 return true;
164 }
165
166 /**
167 * @return true
168 * @see FinalStateFacade
169 */
170 public boolean isFinalStateFacadeMetaType()
171 {
172 return true;
173 }
174
175 /**
176 * @return true
177 * @see StateFacade
178 */
179 public boolean isStateFacadeMetaType()
180 {
181 return true;
182 }
183
184 /**
185 * @return true
186 * @see org.andromda.cartridges.jbpm.metafacades.JBpmStateVertex
187 */
188 public boolean isJBpmStateVertexMetaType()
189 {
190 return true;
191 }
192
193 /**
194 * @return true
195 * @see org.andromda.metafacades.uml.StateVertexFacade
196 */
197 public boolean isStateVertexFacadeMetaType()
198 {
199 return true;
200 }
201
202 /**
203 * @return true
204 * @see ModelElementFacade
205 */
206 public boolean isModelElementFacadeMetaType()
207 {
208 return true;
209 }
210
211 // ----------- delegates to JBpmEventState ------------
212 /**
213 * TODO: Model Documentation for JBpmAction
214 * @see JBpmEventState#getAfterSignals()
215 */
216 public List<JBpmAction> getAfterSignals()
217 {
218 return this.getSuperJBpmEventState().getAfterSignals();
219 }
220
221 /**
222 * TODO: Model Documentation for JBpmAction
223 * @see JBpmEventState#getBeforeSignals()
224 */
225 public List<JBpmAction> getBeforeSignals()
226 {
227 return this.getSuperJBpmEventState().getBeforeSignals();
228 }
229
230 /**
231 * TODO: Model Documentation for JBpmAction
232 * @see JBpmEventState#getNodeEnters()
233 */
234 public List<JBpmAction> getNodeEnters()
235 {
236 return this.getSuperJBpmEventState().getNodeEnters();
237 }
238
239 /**
240 * TODO: Model Documentation for JBpmAction
241 * @see JBpmEventState#getNodeLeaves()
242 */
243 public List<JBpmAction> getNodeLeaves()
244 {
245 return this.getSuperJBpmEventState().getNodeLeaves();
246 }
247
248 /**
249 * TODO: Model Documentation for JBpmAction
250 * @see JBpmEventState#getTasks()
251 */
252 public List<JBpmAction> getTasks()
253 {
254 return this.getSuperJBpmEventState().getTasks();
255 }
256
257 /**
258 * TODO: Model Documentation for JBpmAction
259 * @see JBpmEventState#getTimers()
260 */
261 public List<JBpmAction> getTimers()
262 {
263 return this.getSuperJBpmEventState().getTimers();
264 }
265
266 /**
267 * Copies all tagged values from the given ModelElementFacade to this model element facade.
268 * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
269 */
270 public void copyTaggedValues(ModelElementFacade element)
271 {
272 this.getSuperJBpmEventState().copyTaggedValues(element);
273 }
274
275 /**
276 * Finds the tagged value with the specified 'tagName'. In case there are more values the first
277 * one found will be returned.
278 * @see ModelElementFacade#findTaggedValue(String tagName)
279 */
280 public Object findTaggedValue(String tagName)
281 {
282 return this.getSuperJBpmEventState().findTaggedValue(tagName);
283 }
284
285 /**
286 * Returns all the values for the tagged value with the specified name. The returned collection
287 * will contains only String instances, or will be empty. Never null.
288 * @see ModelElementFacade#findTaggedValues(String tagName)
289 */
290 public Collection<Object> findTaggedValues(String tagName)
291 {
292 return this.getSuperJBpmEventState().findTaggedValues(tagName);
293 }
294
295 /**
296 * Returns the fully qualified name of the model element. The fully qualified name includes
297 * complete package qualified name of the underlying model element. The templates parameter will
298 * be replaced by the correct one given the binding relation of the parameter to this element.
299 * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
300 */
301 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
302 {
303 return this.getSuperJBpmEventState().getBindedFullyQualifiedName(bindedElement);
304 }
305
306 /**
307 * Gets all constraints belonging to the model element.
308 * @see ModelElementFacade#getConstraints()
309 */
310 public Collection<ConstraintFacade> getConstraints()
311 {
312 return this.getSuperJBpmEventState().getConstraints();
313 }
314
315 /**
316 * Returns the constraints of the argument kind that have been placed onto this model. Typical
317 * kinds are "inv", "pre" and "post". Other kinds are possible.
318 * @see ModelElementFacade#getConstraints(String kind)
319 */
320 public Collection<ConstraintFacade> getConstraints(String kind)
321 {
322 return this.getSuperJBpmEventState().getConstraints(kind);
323 }
324
325 /**
326 * Gets the documentation for the model element, The indent argument is prefixed to each line.
327 * By default this method wraps lines after 64 characters.
328 * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
329 * @see ModelElementFacade#getDocumentation(String indent)
330 */
331 public String getDocumentation(String indent)
332 {
333 return this.getSuperJBpmEventState().getDocumentation(indent);
334 }
335
336 /**
337 * This method returns the documentation for this model element, with the lines wrapped after
338 * the specified number of characters, values of less than 1 will indicate no line wrapping is
339 * required. By default paragraphs are returned as HTML.
340 * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
341 * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
342 */
343 public String getDocumentation(String indent, int lineLength)
344 {
345 return this.getSuperJBpmEventState().getDocumentation(indent, lineLength);
346 }
347
348 /**
349 * This method returns the documentation for this model element, with the lines wrapped after
350 * the specified number of characters, values of less than 1 will indicate no line wrapping is
351 * required. HTML style determines if HTML Escaping is applied.
352 * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
353 */
354 public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
355 {
356 return this.getSuperJBpmEventState().getDocumentation(indent, lineLength, htmlStyle);
357 }
358
359 /**
360 * The fully qualified name of this model element.
361 * @see ModelElementFacade#getFullyQualifiedName()
362 */
363 public String getFullyQualifiedName()
364 {
365 return this.getSuperJBpmEventState().getFullyQualifiedName();
366 }
367
368 /**
369 * Returns the fully qualified name of the model element. The fully qualified name includes
370 * complete package qualified name of the underlying model element. If modelName is true, then
371 * the original name of the model element (the name contained within the model) will be the name
372 * returned, otherwise a name from a language mapping will be returned.
373 * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
374 */
375 public String getFullyQualifiedName(boolean modelName)
376 {
377 return this.getSuperJBpmEventState().getFullyQualifiedName(modelName);
378 }
379
380 /**
381 * Returns the fully qualified name as a path, the returned value always starts with out a slash
382 * '/'.
383 * @see ModelElementFacade#getFullyQualifiedNamePath()
384 */
385 public String getFullyQualifiedNamePath()
386 {
387 return this.getSuperJBpmEventState().getFullyQualifiedNamePath();
388 }
389
390 /**
391 * Gets the unique identifier of the underlying model element.
392 * @see ModelElementFacade#getId()
393 */
394 public String getId()
395 {
396 return this.getSuperJBpmEventState().getId();
397 }
398
399 /**
400 * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
401 * are not represented by other properties, i.e. native, transient, volatile, synchronized,
402 * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
403 * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
404 * JDK5 compiler level.
405 * @see ModelElementFacade#getKeywords()
406 */
407 public Collection<String> getKeywords()
408 {
409 return this.getSuperJBpmEventState().getKeywords();
410 }
411
412 /**
413 * UML2: Retrieves a localized label for this named element.
414 * @see ModelElementFacade#getLabel()
415 */
416 public String getLabel()
417 {
418 return this.getSuperJBpmEventState().getLabel();
419 }
420
421 /**
422 * The language mappings that have been set for this model element.
423 * @see ModelElementFacade#getLanguageMappings()
424 */
425 public TypeMappings getLanguageMappings()
426 {
427 return this.getSuperJBpmEventState().getLanguageMappings();
428 }
429
430 /**
431 * Return the model containing this model element (multiple models may be loaded and processed
432 * at the same time).
433 * @see ModelElementFacade#getModel()
434 */
435 public ModelFacade getModel()
436 {
437 return this.getSuperJBpmEventState().getModel();
438 }
439
440 /**
441 * The name of the model element.
442 * @see ModelElementFacade#getName()
443 */
444 public String getName()
445 {
446 return this.getSuperJBpmEventState().getName();
447 }
448
449 /**
450 * Gets the package to which this model element belongs.
451 * @see ModelElementFacade#getPackage()
452 */
453 public ModelElementFacade getPackage()
454 {
455 return this.getSuperJBpmEventState().getPackage();
456 }
457
458 /**
459 * The name of this model element's package.
460 * @see ModelElementFacade#getPackageName()
461 */
462 public String getPackageName()
463 {
464 return this.getSuperJBpmEventState().getPackageName();
465 }
466
467 /**
468 * Gets the package name (optionally providing the ability to retrieve the model name and not
469 * the mapped name).
470 * @see ModelElementFacade#getPackageName(boolean modelName)
471 */
472 public String getPackageName(boolean modelName)
473 {
474 return this.getSuperJBpmEventState().getPackageName(modelName);
475 }
476
477 /**
478 * Returns the package as a path, the returned value always starts with out a slash '/'.
479 * @see ModelElementFacade#getPackagePath()
480 */
481 public String getPackagePath()
482 {
483 return this.getSuperJBpmEventState().getPackagePath();
484 }
485
486 /**
487 * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
488 * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
489 * the names of the containing namespaces starting at the root of the hierarchy and ending with
490 * the name of the NamedElement itself.
491 * @see ModelElementFacade#getQualifiedName()
492 */
493 public String getQualifiedName()
494 {
495 return this.getSuperJBpmEventState().getQualifiedName();
496 }
497
498 /**
499 * Gets the root package for the model element.
500 * @see ModelElementFacade#getRootPackage()
501 */
502 public PackageFacade getRootPackage()
503 {
504 return this.getSuperJBpmEventState().getRootPackage();
505 }
506
507 /**
508 * Gets the dependencies for which this model element is the source.
509 * @see ModelElementFacade#getSourceDependencies()
510 */
511 public Collection<DependencyFacade> getSourceDependencies()
512 {
513 return this.getSuperJBpmEventState().getSourceDependencies();
514 }
515
516 /**
517 * If this model element is the context of an activity graph, this represents that activity
518 * graph.
519 * @see ModelElementFacade#getStateMachineContext()
520 */
521 public StateMachineFacade getStateMachineContext()
522 {
523 return this.getSuperJBpmEventState().getStateMachineContext();
524 }
525
526 /**
527 * The collection of ALL stereotype names for this model element.
528 * @see ModelElementFacade#getStereotypeNames()
529 */
530 public Collection<String> getStereotypeNames()
531 {
532 return this.getSuperJBpmEventState().getStereotypeNames();
533 }
534
535 /**
536 * Gets all stereotypes for this model element.
537 * @see ModelElementFacade#getStereotypes()
538 */
539 public Collection<StereotypeFacade> getStereotypes()
540 {
541 return this.getSuperJBpmEventState().getStereotypes();
542 }
543
544 /**
545 * Return the TaggedValues associated with this model element, under all stereotypes.
546 * @see ModelElementFacade#getTaggedValues()
547 */
548 public Collection<TaggedValueFacade> getTaggedValues()
549 {
550 return this.getSuperJBpmEventState().getTaggedValues();
551 }
552
553 /**
554 * Gets the dependencies for which this model element is the target.
555 * @see ModelElementFacade#getTargetDependencies()
556 */
557 public Collection<DependencyFacade> getTargetDependencies()
558 {
559 return this.getSuperJBpmEventState().getTargetDependencies();
560 }
561
562 /**
563 * Get the template parameter for this model element having the parameterName
564 * @see ModelElementFacade#getTemplateParameter(String parameterName)
565 */
566 public Object getTemplateParameter(String parameterName)
567 {
568 return this.getSuperJBpmEventState().getTemplateParameter(parameterName);
569 }
570
571 /**
572 * Get the template parameters for this model element
573 * @see ModelElementFacade#getTemplateParameters()
574 */
575 public Collection<TemplateParameterFacade> getTemplateParameters()
576 {
577 return this.getSuperJBpmEventState().getTemplateParameters();
578 }
579
580 /**
581 * The visibility (i.e. public, private, protected or package) of the model element, will
582 * attempt a lookup for these values in the language mappings (if any).
583 * @see ModelElementFacade#getVisibility()
584 */
585 public String getVisibility()
586 {
587 return this.getSuperJBpmEventState().getVisibility();
588 }
589
590 /**
591 * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
592 * is taken into account when searching for the stereotype), false otherwise.
593 * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
594 */
595 public boolean hasExactStereotype(String stereotypeName)
596 {
597 return this.getSuperJBpmEventState().hasExactStereotype(stereotypeName);
598 }
599
600 /**
601 * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
602 * pipe, semicolon, or << >>
603 * @see ModelElementFacade#hasKeyword(String keywordName)
604 */
605 public boolean hasKeyword(String keywordName)
606 {
607 return this.getSuperJBpmEventState().hasKeyword(keywordName);
608 }
609
610 /**
611 * Returns true if the model element has the specified stereotype. If the stereotype itself
612 * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
613 * one of the stereotype's ancestors has a matching name this method will return true, false
614 * otherwise.
615 * For example, if we have a certain stereotype called <<exception>> and a model element has a
616 * stereotype called <<applicationException>> which extends <<exception>>, when calling this
617 * method with 'stereotypeName' defined as 'exception' the method would return true since
618 * <<applicationException>> inherits from <<exception>>. If you want to check if the model
619 * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
620 * @see ModelElementFacade#hasStereotype(String stereotypeName)
621 */
622 public boolean hasStereotype(String stereotypeName)
623 {
624 return this.getSuperJBpmEventState().hasStereotype(stereotypeName);
625 }
626
627 /**
628 * True if there are target dependencies from this element that are instances of BindingFacade.
629 * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
630 * @see ModelElementFacade#isBindingDependenciesPresent()
631 */
632 public boolean isBindingDependenciesPresent()
633 {
634 return this.getSuperJBpmEventState().isBindingDependenciesPresent();
635 }
636
637 /**
638 * Indicates if any constraints are present on this model element.
639 * @see ModelElementFacade#isConstraintsPresent()
640 */
641 public boolean isConstraintsPresent()
642 {
643 return this.getSuperJBpmEventState().isConstraintsPresent();
644 }
645
646 /**
647 * Indicates if any documentation is present on this model element.
648 * @see ModelElementFacade#isDocumentationPresent()
649 */
650 public boolean isDocumentationPresent()
651 {
652 return this.getSuperJBpmEventState().isDocumentationPresent();
653 }
654
655 /**
656 * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
657 * @see ModelElementFacade#isReservedWord()
658 */
659 public boolean isReservedWord()
660 {
661 return this.getSuperJBpmEventState().isReservedWord();
662 }
663
664 /**
665 * True is there are template parameters on this model element. For UML2, applies to Class,
666 * Operation, Property, and Parameter.
667 * @see ModelElementFacade#isTemplateParametersPresent()
668 */
669 public boolean isTemplateParametersPresent()
670 {
671 return this.getSuperJBpmEventState().isTemplateParametersPresent();
672 }
673
674 /**
675 * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
676 * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
677 * Enumerations and Interfaces, optionally applies on other model elements.
678 * @see ModelElementFacade#isValidIdentifierName()
679 */
680 public boolean isValidIdentifierName()
681 {
682 return this.getSuperJBpmEventState().isValidIdentifierName();
683 }
684
685 /**
686 * Searches for the constraint with the specified 'name' on this model element, and if found
687 * translates it using the specified 'translation' from a translation library discovered by the
688 * framework.
689 * @see ModelElementFacade#translateConstraint(String name, String translation)
690 */
691 public String translateConstraint(String name, String translation)
692 {
693 return this.getSuperJBpmEventState().translateConstraint(name, translation);
694 }
695
696 /**
697 * Translates all constraints belonging to this model element with the given 'translation'.
698 * @see ModelElementFacade#translateConstraints(String translation)
699 */
700 public String[] translateConstraints(String translation)
701 {
702 return this.getSuperJBpmEventState().translateConstraints(translation);
703 }
704
705 /**
706 * Translates the constraints of the specified 'kind' belonging to this model element.
707 * @see ModelElementFacade#translateConstraints(String kind, String translation)
708 */
709 public String[] translateConstraints(String kind, String translation)
710 {
711 return this.getSuperJBpmEventState().translateConstraints(kind, translation);
712 }
713
714 /**
715 * Events to which is being deferred in this action state.
716 * @see StateFacade#getDeferrableEvents()
717 */
718 public Collection<EventFacade> getDeferrableEvents()
719 {
720 return this.getSuperJBpmEventState().getDeferrableEvents();
721 }
722
723 /**
724 * Models a situation during which some (usually implicit) invariant condition holds. The states
725 * of
726 * protocol state machines are exposed to the users of their context classifiers. A protocol
727 * state
728 * represents an exposed stable situation of its context classifier: when an instance of the
729 * classifier
730 * is not processing any operation, users of this instance can always know its state
731 * configuration.
732 * @see org.andromda.metafacades.uml.StateVertexFacade#getContainer()
733 */
734 public StateFacade getContainer()
735 {
736 return this.getSuperJBpmEventState().getContainer();
737 }
738
739 /**
740 * A directed relationship between a source vertex and a target vertex. It may be part of a
741 * compound
742 * transition, which takes the state machine from one state configuration to another,
743 * representing the
744 * complete response of the state machine to an occurrence of an event of a particular type.
745 * @see org.andromda.metafacades.uml.StateVertexFacade#getIncomings()
746 */
747 public Collection<TransitionFacade> getIncomings()
748 {
749 return this.getSuperJBpmEventState().getIncomings();
750 }
751
752 /**
753 * A directed relationship between a source vertex and a target vertex. It may be part of a
754 * compound
755 * transition, which takes the state machine from one state configuration to another,
756 * representing the
757 * complete response of the state machine to an occurrence of an event of a particular type.
758 * @see org.andromda.metafacades.uml.StateVertexFacade#getOutgoings()
759 */
760 public Collection<TransitionFacade> getOutgoings()
761 {
762 return this.getSuperJBpmEventState().getOutgoings();
763 }
764
765 /**
766 * The partition (if any) to which this vertex belongs.
767 * @see org.andromda.metafacades.uml.StateVertexFacade#getPartition()
768 */
769 public PartitionFacade getPartition()
770 {
771 return this.getSuperJBpmEventState().getPartition();
772 }
773
774 /**
775 * State machines can be used to express the behavior of part of a system. Behavior is modeled
776 * as a
777 * traversal of a graph of state nodes interconnected by one or more joined transition arcs that
778 * are
779 * triggered by the dispatching of series of (event) occurrences. During this traversal, the
780 * state
781 * machine executes a series of activities associated with various elements of the state
782 * machine.
783 * @see org.andromda.metafacades.uml.StateVertexFacade#getStateMachine()
784 */
785 public StateMachineFacade getStateMachine()
786 {
787 return this.getSuperJBpmEventState().getStateMachine();
788 }
789
790 // ----------- delegates to FinalStateFacade ------------
791 /**
792 * @see MetafacadeBase#initialize()
793 */
794 @Override
795 public void initialize()
796 {
797 this.getSuperJBpmEventState().initialize();
798 this.getSuperFinalStateFacade().initialize();
799 }
800
801 /**
802 * @return Object getSuperJBpmEventState().getValidationOwner()
803 * @see MetafacadeBase#getValidationOwner()
804 */
805 @Override
806 public Object getValidationOwner()
807 {
808 Object owner = this.getSuperJBpmEventState().getValidationOwner();
809 if (owner == null)
810 {
811 owner = this.getSuperFinalStateFacade().getValidationOwner();
812 }
813 return owner;
814 }
815
816 /**
817 * @return String getSuperJBpmEventState().getValidationName()
818 * @see MetafacadeBase#getValidationName()
819 */
820 @Override
821 public String getValidationName()
822 {
823 String name = this.getSuperJBpmEventState().getValidationName();
824 if (name == null)
825 {
826 name = this.getSuperFinalStateFacade().getValidationName();
827 }
828 return name;
829 }
830
831 /**
832 * <p><b>Constraint:</b> org::andromda::cartridges::jbpm::metafacades::JBpmEndState::end state name is required</p>
833 * <p><b>Error:</b> The name of an end state (final state) cannot be empty.</p>
834 * <p><b>OCL:</b> context JBpmEndState inv: name->notEmpty()</p>
835 * @param validationMessages Collection<ModelValidationMessage>
836 * @see MetafacadeBase#validateInvariants(Collection validationMessages)
837 */
838 @Override
839 public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
840 {
841 this.getSuperJBpmEventState().validateInvariants(validationMessages);
842 this.getSuperFinalStateFacade().validateInvariants(validationMessages);
843 try
844 {
845 final Object contextElement = this.THIS();
846 boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"name")));
847 if (!constraintValid)
848 {
849 validationMessages.add(
850 new ModelValidationMessage(
851 (MetafacadeBase)contextElement ,
852 "org::andromda::cartridges::jbpm::metafacades::JBpmEndState::end state name is required",
853 "The name of an end state (final state) cannot be empty."));
854 }
855 }
856 catch (Throwable th)
857 {
858 Throwable cause = th.getCause();
859 int depth = 0; // Some throwables have infinite recursion
860 while (cause != null && depth < 7)
861 {
862 th = cause;
863 depth++;
864 }
865 logger.error("Error validating constraint 'org::andromda::cartridges::jbpm::metafacades::JBpmEndState::end state name is required' ON "
866 + this.THIS().toString() + ": " + th.getMessage(), th);
867 }
868 }
869
870 /**
871 * The property that stores the name of the metafacade.
872 */
873 private static final String NAME_PROPERTY = "name";
874 private static final String FQNAME_PROPERTY = "fullyQualifiedName";
875
876 /**
877 * @see Object#toString()
878 */
879 @Override
880 public String toString()
881 {
882 final StringBuilder toString = new StringBuilder(this.getClass().getName());
883 toString.append("[");
884 try
885 {
886 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
887 }
888 catch (final Throwable tryAgain)
889 {
890 try
891 {
892 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
893 }
894 catch (final Throwable ignore)
895 {
896 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
897 }
898 }
899 toString.append("]");
900 return toString.toString();
901 }
902 }