[Uml-devel] [Bug 129914] Cannot insert transition/association TO fork/join node in activity diagram

Oliver Kellogg okellogg at users.sourceforge.net
Sat Jul 15 23:27:23 UTC 2006


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=129914         
okellogg users sourceforge net changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From okellogg users sourceforge net  2006-07-16 01:27 -------
SVN commit 562841 by okellogg:

allowAssociation(Association_Type, UMLWidget*, UMLWidget*, bool)
case at_Activity: avoid illegal static_cast of widgetB to ActivityWidget
when it is really a ForkJoinWidget.
BUG:129914


 M  +1 -0      ChangeLog  
 M  +27 -26    umbrello/assocrules.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #562840:562841
 @ -3,6 +3,7  @
 * Bugs/wishes from http://bugs.kde.org:
 * Fix crash when importing classes from a java file (129107, 130093)
 * Crash after single click on the "UML Model" tree window (126560/129252)
+* Cannot insert transition/association TO fork/join node in activity diagram (129914)
 * Importing java subinterface before superinterface results in superinterface
   not being treated as an interface (130793)
 
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/assocrules.cpp #562840:562841
 @ -186,32 +186,33  @
         break;
 
     case at_Activity:
-        // no transitions to initial activity allowed
-        if( static_cast<ActivityWidget*>(widgetB)->getActivityType() ==
-                ActivityWidget::Initial )
-            return false;
-        // only from a normal, branch or fork activity to the end
-        if( static_cast<ActivityWidget*>(widgetB)->getActivityType() ==
-                ActivityWidget::End &&
-                static_cast<ActivityWidget*>(widgetA)->getActivityType() !=
-                ActivityWidget::Normal &&
-                static_cast<ActivityWidget*>(widgetA)->getActivityType() !=
-                ActivityWidget::Branch &&
-                static_cast<ActivityWidget*>(widgetA)->getActivityType() !=
-                ActivityWidget::Fork_DEPRECATED &&
-		dynamic_cast<ForkJoinWidget*>(widgetA) == NULL ) {
-            return false;
-        }
-        // only Forks and Branches can have more than one "outgoing" transition
-        if( static_cast<ActivityWidget*>(widgetA)->getActivityType() !=
-                ActivityWidget::Fork_DEPRECATED &&
-		dynamic_cast<ForkJoinWidget*>(widgetA) == NULL &&
-               static_cast<ActivityWidget*>(widgetA)->getActivityType() !=
-                ActivityWidget::Branch ) {
-            AssociationWidgetList list = widgetA->getAssocList();
-            for (AssociationWidget* assoc = list.first(); assoc; assoc = list.next()) {
-                if (assoc->getWidget(A) == widgetA) {
-                    return false;
+        {
+            ActivityWidget *actA = dynamic_cast<ActivityWidget*>(widgetA);
+            ActivityWidget *actB = dynamic_cast<ActivityWidget*>(widgetB);
+            // no transitions to initial activity allowed
+            if (actB && actB->getActivityType() == ActivityWidget::Initial)
+                return false;
+            // Fork_DEPRECATED here means "not applicable".
+            ActivityWidget::ActivityType actTypeA = ActivityWidget::Fork_DEPRECATED;
+            if (actA)
+                actTypeA = actA->getActivityType();
+            ActivityWidget::ActivityType actTypeB = ActivityWidget::Fork_DEPRECATED;
+            if (actB)
+                actTypeB = actB->getActivityType();
+            // only from a normal, branch or fork activity to the end
+            if (actTypeB == ActivityWidget::End &&
+                actTypeA != ActivityWidget::Normal &&
+                actTypeA != ActivityWidget::Branch &&
+                dynamic_cast<ForkJoinWidget*>(widgetA) == NULL) {
+                return false;
+            }
+            // only Forks and Branches can have more than one "outgoing" transition
+            if (actA != NULL && actTypeA != ActivityWidget::Branch) {
+                AssociationWidgetList list = widgetA->getAssocList();
+                for (AssociationWidget* assoc = list.first(); assoc; assoc = list.next()) {
+                    if (assoc->getWidget(A) == widgetA) {
+                        return false;
+                    }
                 }
             }
         }




More information about the umbrello-devel mailing list