Bug 139872

Summary: Incorrect Association Properties Text
Product: [Applications] umbrello Reporter: Adrian.L.Parker
Component: generalAssignee: Oliver Kellogg <okellogg>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Fedora RPMs   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Adrian.L.Parker 2007-01-10 20:06:18 UTC
Version:            (using KDE KDE 3.5.3)
Installed from:    Fedora RPMs
Compiler:          gcc version 4.1.1 20060525 
OS:                Linux

If you add a private member to a class the text of the Association Property displays a "+" after you save, close, and reopen the document.

If both classes are in the current class diagram, for example, when you add one as a private member of the other, the text of the association property properly shows a "-" before the member name.  Upon saving, closing, reopening though the "-" is now displayed as a "+".
Comment 1 Adrian.L.Parker 2007-01-10 20:15:11 UTC
More accurately, the "Visibility" changes to public.  Because of this, the text shown on the Association Property line is preceded by a "+" and not "-".
Comment 2 Oliver Kellogg 2007-02-17 23:55:35 UTC
SVN commit 634671 by okellogg:

{get,set}Visibility(), syncToModel(): Handle binding of m_pObject to UMLAttribute.
BUG:139872


 M  +3 -1      ChangeLog  
 M  +40 -22    umbrello/associationwidget.cpp  
 M  +2 -2      umbrello/associationwidget.h  


--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #634670:634671
@@ -1,10 +1,12 @@
 Version 1.5.7
 
 * Bugs fixed from http://bugs.kde.org:
+* Support for utility classes in Ada import and code generator (89167)
 * %date% and %time% not being parsed (96612)
-* Relationships for entities do not live outside of an entity relationship diagram (125146)
+* Relationships for entities do not live outside of the diagram (125146)
 * Javascript wrong Code Generation (135527)
 * Javascript Code Generation creates bad format methods (135540)
+* Incorrect Association Properties text (139872)
 * Associations not updated during move of class on diagram (140709)
 * Crash when deleting the link between a package and a class (141602)
 * Ada95 Code Generation Errors for Aggregation (141644)
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/associationwidget.cpp #634670:634671
@@ -233,13 +233,13 @@
     return !(*this == Other);
 }
 
-UMLAssociation * AssociationWidget::getAssociation () {
+UMLAssociation * AssociationWidget::getAssociation () const {
     if (m_pObject == NULL || m_pObject->getBaseType() != ot_Association)
         return NULL;
     return static_cast<UMLAssociation*>(m_pObject);
 }
 
-UMLAttribute * AssociationWidget::getAttribute () {
+UMLAttribute * AssociationWidget::getAttribute () const {
     if (m_pObject == NULL)
         return NULL;
     Uml::Object_Type ot = m_pObject->getBaseType();
@@ -464,18 +464,27 @@
 }
 
 Uml::Visibility AssociationWidget::getVisibility(Role_Type role) const {
-    if (m_pObject == NULL || m_pObject->getBaseType() != ot_Association)
-        return m_role[role].m_Visibility;
-    UMLAssociation *umla = static_cast<UMLAssociation*>(m_pObject);
-    return umla->getVisibility(role);
+    const UMLAssociation *assoc = getAssociation();
+    if (assoc)
+        return assoc->getVisibility(role);
+    const UMLAttribute *attr = getAttribute();
+    if (attr)
+        return attr->getVisibility();
+    return m_role[role].m_Visibility;
 }
 
 void AssociationWidget::setVisibility(Uml::Visibility value, Role_Type role)
 {
     if (value == getVisibility(role))
         return;
-    if (m_pObject && m_pObject->getBaseType() == ot_Association)  // update our model object
-        getAssociation()->setVisibility(value, role);
+    if (m_pObject) {
+        // update our model object
+        const Uml::Object_Type ot = m_pObject->getBaseType();
+        if (ot == ot_Association)
+            getAssociation()->setVisibility(value, role);
+        else if (ot == ot_Attribute)
+            getAttribute()->setVisibility(value);
+    }
     m_role[role].m_Visibility = value;
     // update role pre-text attribute as appropriate
     if (m_role[role].m_pRole) {
@@ -1209,6 +1218,11 @@
     UMLAssociation *uml = getAssociation();
 
     if (uml == NULL) {
+        UMLAttribute *attr = getAttribute();
+        if (attr == NULL)
+            return;
+        setVisibility(attr->getVisibility(), B);
+        setRoleName(attr->getName(), B);
         return;
     }
     // block signals until finished
@@ -1230,13 +1244,13 @@
 // this will synchronize UMLAssociation w/ this new Widget
 void AssociationWidget::mergeAssociationDataIntoUMLRepresentation()
 {
-
-    UMLAssociation *uml = getAssociation();
-    if (uml == NULL)
+    UMLAssociation *umlassoc = getAssociation();
+    UMLAttribute *umlattr = getAttribute();
+    if (umlassoc == NULL && umlattr == NULL)
         return;
 
     // block emit modified signal, or we get a horrible loop
-    uml->blockSignals(true);
+    m_pObject->blockSignals(true);
 
     // would be desirable to do the following
     // so that we can be sure its back to initial state
@@ -1246,26 +1260,30 @@
     // floating text widgets
     FloatingTextWidget *text = getNameWidget();
     if (text)
-        uml->setName(text->getText());
+        m_pObject->setName(text->getText());
 
     text = getRoleWidget(A);
-    if (text)
-        uml->setRoleName(text->getText(), A);
+    if (text && umlassoc)
+        umlassoc->setRoleName(text->getText(), A);
 
     text = getRoleWidget(B);
-    if (text)
-        uml->setRoleName(text->getText(), B);
+    if (text) {
+        if (umlassoc)
+            umlassoc->setRoleName(text->getText(), B);
+        else if (umlattr)
+            umlattr->setName(text->getText());
+    }
 
     text = getMultiWidget(A);
-    if (text)
-        uml->setMulti(text->getText(), A);
+    if (text && umlassoc)
+        umlassoc->setMulti(text->getText(), A);
 
     text = getMultiWidget(B);
-    if (text)
-        uml->setMulti(text->getText(), B);
+    if (text && umlassoc)
+        umlassoc->setMulti(text->getText(), B);
 
     // unblock
-    uml->blockSignals(false);
+    m_pObject->blockSignals(false);
 }
 
 /** Adjusts the ending point of the association that connects to Widget */
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/associationwidget.h #634670:634671
@@ -483,7 +483,7 @@
      * @return  Pointer to the UMLAssociation that is represented by
      *          this AsociationWidget.
      */
-    UMLAssociation * getAssociation ();
+    UMLAssociation * getAssociation() const;
 
     /**
      * Returns the UMLAttribute representation of this object.
@@ -491,7 +491,7 @@
      * @return  Pointer to the UMLAttribute that is represented by
      *          this AsociationWidget.
      */
-    UMLAttribute * getAttribute ();
+    UMLAttribute * getAttribute() const;
 
     /**
      * Sets the text of the FloatingTextWidget identified by the ft's Text_Role.