[Uml-devel] branches/KDE/3.5/kdesdk/umbrello/umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Tue Feb 7 14:00:09 UTC 2006


SVN commit 506935 by okellogg:

Transfer associations.

 M  +88 -0     petaltree2uml.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/umbrello/petaltree2uml.cpp #506934:506935
@@ -142,8 +142,10 @@
     void read(const PetalNode *node, QString name) {
         PetalNode *attributes = node->findAttribute(m_attributeTag).node;
         if (attributes == NULL) {
+#ifdef VERBOSE_DEBUGGING
             kdDebug() << "umbrellify(" << name << "): no " << m_attributeTag << " found"
                       << endl;
+#endif
             return;
         }
         PetalNode::NameValueList attributeList = attributes->attributes();
@@ -307,6 +309,7 @@
     QString objType = args[0];
     QString name = clean(args[1]);
     Uml::IDType id = quid(node);
+
     if (objType == "Class_Category") {
         UMLObject *o = Import_Utils::createUMLObject(Uml::ot_Package, name, parentPkg);
         o->setID(id);
@@ -320,6 +323,7 @@
         for (uint i = 0; i < atts.count(); i++) {
             umbrellify(atts[i].second.node, localParent);
         }
+
     } else if (objType == "Class") {
         UMLObject *o = Import_Utils::createUMLObject(Uml::ot_Class, name, parentPkg);
         o->setID(id);
@@ -344,6 +348,90 @@
         // insert realizations
         RealizationsReader realReader(c);
         realReader.read(node, c->getName());
+
+    } else if (objType == "Association") {
+        PetalNode *roles = node->findAttribute("roles").node;
+        if (node == NULL) {
+            kdError() << "umbrellify: cannot find roles of Association" << endl;
+            return false;
+        }
+        UMLAssociation *assoc = new UMLAssociation(Uml::at_UniAssociation);
+/* (object Association "$UNNAMED$8"
+	quid       	"32B5D7EE02FF"
+	roles      	(list role_list
+	    (object Role "owner"
+		quid       	"32B5D7EF03D3"
+		label      	"owner"
+		supplier   	"Logical View::UML 1.4::Foundation::Core::Classifier"
+		quidu      	"32989FB2023D"
+		client_cardinality 	(value cardinality "0..1")
+		is_navigable 	TRUE
+		is_aggregate 	TRUE
+		friend     	TRUE)
+	    (object Role "feature"
+		quid       	"32B5D7EF03DD"
+		label      	"feature"
+		supplier   	"Logical View::UML 1.4::Foundation::Core::Feature"
+		quidu      	"32989F9700FE"
+		client_cardinality 	(value cardinality "*")
+		Constraints 	"ordered"
+		Containment 	"By Value"
+		is_navigable 	TRUE)))
+  */
+        PetalNode::NameValueList roleList = roles->attributes();
+        for (uint i = Uml::A; i <= Uml::B; i++) {
+            PetalNode *roleNode = roleList[i].second.node;
+            if (roleNode == NULL) {
+                kdError() << "umbrellify: roleNode of Association is NULL" << endl;
+                return false;
+            }
+            if (roleNode->name() != "Role") {
+                kdDebug() << "umbrellify(" << name << "): expecting Role, found \""
+                          << roleNode->name() << endl;
+                continue;
+            }
+            UMLRole *role = assoc->getUMLRole((Uml::Role_Type) i);
+            QStringList initialArgs = roleNode->initialArgs();
+            if (initialArgs.count() > 1) {
+                QString roleName = clean(initialArgs[1]);
+                if (! roleName.startsWith("$UNNAMED"))
+                    role->setName(roleName);
+            }
+            role->setID(quid(roleNode));
+            QString quidref = quidu(roleNode);
+            QString type = clean(roleNode->findAttribute("supplier").string);
+            if (!quidref.isEmpty()) {
+                role->setSecondaryId(quidref);
+            }
+            if (!type.isEmpty()) {
+                role->setSecondaryFallback(type);
+            }
+            QString label = clean(roleNode->findAttribute("label").string);
+            if (!label.isEmpty()) {
+                role->setName(label);
+            }
+            QString client_cardinality = clean(roleNode->findAttribute("client_cardinality").string);
+            if (!client_cardinality.isEmpty()) {
+                role->setMultiplicity(client_cardinality);
+            }
+            QString is_navigable = clean(roleNode->findAttribute("is_navigable").string);
+            if (is_navigable == "FALSE") {
+                assoc->setAssocType(Uml::at_Association);
+            }
+            QString is_aggregate = clean(roleNode->findAttribute("is_aggregate").string);
+            if (is_aggregate == "TRUE") {
+                assoc->setAssocType(Uml::at_Aggregation);
+            }
+            QString containment = clean(roleNode->findAttribute("Containment").string);
+            if (containment == "By Value") {
+                assoc->setAssocType(Uml::at_Composition);
+            }
+            QString doc = roleNode->findAttribute("documentation").string;
+            if (! doc.isEmpty())
+                role->setDoc(doc);
+        }
+        UMLApp::app()->getDocument()->addAssociation(assoc);
+
     } else {
         kdDebug() << "umbrellify: object type " << objType
                   << " is not yet implemented" << endl;




More information about the umbrello-devel mailing list