Bug 81301

Summary: Support UML Profile for CORBA specification
Product: [Applications] umbrello Reporter: Oliver Kellogg <okellogg>
Component: generalAssignee: Umbrello Development Group <umbrello-devel>
Status: ASSIGNED ---    
Severity: wishlist    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Oliver Kellogg 2004-05-11 08:48:14 UTC
Version:            (using KDE Devel)
Installed from:    Compiled sources

I am currently adding support for the OMG "UML Profile for CORBA Specification", see
http://www.omg.org/technology/documents/formal/profile_corba.htm
and hope to have the groundwork in place by the 1.3 release.
(This mostly involves the IDL code generator.)
Comment 1 Oliver Kellogg 2005-02-05 14:45:06 UTC
CVS commit by okellogg: 

scan(): Split out lexer method from parseFile().
Implement interface attributes and inheritance.
Align productions with the UML Profile for CORBA.
CCBUG:81301


  M +82 -72    idlimport.cpp   1.6 [POSSIBLY UNSAFE: popen]



Comment 2 Oliver Kellogg 2005-02-06 11:41:05 UTC
CVS commit by okellogg: 

createAutoAttributeAssociations(): UML Profile for CORBA standard says
an attribute whose type is stereotyped <<CORBAInterface>> shall be mapped
to a UniAssociation.
CCBUG:81301


  M +8 -4      umlview.cpp   1.206


--- kdesdk/umbrello/umbrello/umlview.cpp  #1.205:1.206
@@ -2468,5 +2468,4 @@ void UMLView::createAutoAttributeAssocia
         if (tmpUmlObj == NULL)
                 return;
-        Uml::Association_Type assocType = Uml::at_Composition;
         // if the underlying model object is really a UMLClass then
         if (tmpUmlObj->getBaseType() == Uml::ot_Datatype) {
@@ -2493,4 +2492,5 @@ void UMLView::createAutoAttributeAssocia
                         continue;
                 }
+                Uml::Association_Type assocType = Uml::at_Composition;
                 UMLWidget *w = findWidget( attrType->getID() );
                 // if the attribute type has a widget representation on this view
@@ -2500,12 +2500,16 @@ void UMLView::createAutoAttributeAssocia
                     // if the current diagram type permits compositions
                     AssocRules::allowAssociation(assocType, widget, w, false)) {
-                        // create a composition AssocWidget
+                        // Create a composition AssocWidget, or, if the attribute type is
+                        // stereotyped <<CORBAInterface>>, create a UniAssociation widget.
+                        if (attrType->getStereotype(false) == "CORBAInterface")
+                                assocType = at_UniAssociation;
                         AssociationWidget *a = new AssociationWidget (this, widget, assocType, w);
                         a->setUMLObject(attr);
                         a->calculateEndingPoints();
                         a->setVisibility(attr->getScope(), B);
-                        //a->setChangeability(true, B);
-                        if (assocType == at_Aggregation)
+                        /*
+                        if (assocType == at_Aggregation || assocType == at_UniAssociation)
                                 a->setMulti("0..1", B);
+                         */
                         a->setRoleName(attr->getName(), B);
                         a->setActivated(true);


Comment 3 Oliver Kellogg 2021-01-11 22:54:12 UTC
Git commit 82048c574e7662505ed05116f93fc54db93c1027 by Oliver Kellogg.
Committed on 11/01/2021 at 22:27.
Pushed by okellogg into branch 'master'.

umbrello/codegenerators/idl/idlwriter.cpp
- In functions isOOClass and writeClass, on comparing against known
  stereotypes accept stereotype prefixes other than "CORBA".
  Reason: IDL v4 separates the language from CORBA. Several known tools
  use stereotypes prefixed with "idl" instead of "CORBA".
- In function defaultDatatypes add missing types "long long",
  "unsigned long long", "long double".

M  +14   -12   umbrello/codegenerators/idl/idlwriter.cpp

https://invent.kde.org/sdk/umbrello/commit/82048c574e7662505ed05116f93fc54db93c1027
Comment 4 Oliver Kellogg 2021-01-11 22:54:20 UTC
Git commit 3388653cf22189081a12d9b7a234bb39672438a0 by Oliver Kellogg.
Committed on 11/01/2021 at 22:54.
Pushed by okellogg into branch 'master'.

Progress on IDL import:

umbrello/codeimport/idlimport.{h,cpp}
- New function skipStructure skips to the end of a struct/union/
  valuetype/interface declaration.
- New function isValidScopedName returns true if the argument conforms
  to IDL syntax for scoped names.
- For processing unions add members m_isUnionDefault of type bool and
  m_unionCases of type QStringList.

umbrello/codeimport/idlimport.cpp
- In function fillSource remove compressing of sequence or bounded
  string into single lexeme.
- In function parseStmt,
  - extend documentation;
  - make local `keyword' non const;
  - on setting stereotypes use prefix "idl" in lieu of "CORBA" for
    compatibility with IDL4;
  - start fleshing out union handling;
  - on handling "typedef" start fleshing out sequence and bounded
    string.

M  +166  -26   umbrello/codeimport/idlimport.cpp
M  +7    -2    umbrello/codeimport/idlimport.h

https://invent.kde.org/sdk/umbrello/commit/3388653cf22189081a12d9b7a234bb39672438a0
Comment 5 Oliver Kellogg 2021-01-14 22:55:59 UTC
Git commit 54e6c2d97658302262cebbf843a423f27f23bd72 by Oliver Kellogg.
Committed on 14/01/2021 at 22:55.
Pushed by okellogg into branch 'master'.

Flesh out bounded string / bounded sequence handling in IDL import:

umbrello/codeimport/idlimport.h
- Add member m_doc of type UMLDoc* for conventiently accessing
  UMLApp::app()->document().

umbrello/codeimport/idlimport.cpp
- In constructor initialize m_doc.
- In function parseStmt keyword "typedef" handling of template types :
  - In case of «idlSequence» create newType as Class instead of as
    Datatype.  Reason: Umbrello does not currently support the menus and
    dialogs for adding/manipulating attributes of UMLDatatype.
  - Implement «idlSequence» / «idlString» stereotype attribute "bound"
    of type Uml::PrimitiveTypes::UnlimitedNatural.
    When applying «idlSequence», if the concrete tag value provided in
    UMLObject::tags() is empty then this means it is an unbounded
    sequence.
  - In case of «idlSequence» create an attribute "members" on newType.
    The type of the attribute is the origin type of the typedef (i.e.
    oldType).
  - Set the calculated stereotype on the newType object.
  - Append the extracted bound onto the tags() of the new type object.

M  +28   -8    umbrello/codeimport/idlimport.cpp
M  +3    -0    umbrello/codeimport/idlimport.h

https://invent.kde.org/sdk/umbrello/commit/54e6c2d97658302262cebbf843a423f27f23bd72
Comment 6 Oliver Kellogg 2021-01-16 10:02:29 UTC
Git commit 826889ae7d444761705e4a1efb6165696630a627 by Oliver Kellogg.
Committed on 16/01/2021 at 09:58.
Pushed by okellogg into branch 'master'.

Flesh out union case handling in IDL import:

umbrello/codeimport/idlimport.cpp
- In function parseStmt while-loop handling attribute declaration,
  if m_unionCases is non empty then
  - attempt finding the "idlCase" stereotype in UMLDoc;
  - if it is not found then create it and append the tag definition
    "label" of type String onto its attribute definitions;
  - set the stereotype on `attr';
  - append the joined m_unionCases labels onto attr->tags();
  - clear the content of m_unionCases.

M  +12   -3    umbrello/codeimport/idlimport.cpp

https://invent.kde.org/sdk/umbrello/commit/826889ae7d444761705e4a1efb6165696630a627
Comment 7 Oliver Kellogg 2021-01-17 19:26:31 UTC
Git commit 1b35365e642e4094d916c1db8956f6961c12da46 by Oliver Kellogg.
Committed on 17/01/2021 at 19:26.
Pushed by okellogg into branch 'master'.

In IDLWriter flesh out code generation for IDL union:

umbrello/codegenerators/idl/idlwriter.cpp
- In function writeClass, if `stype' contains "Union" then
  - retrieve the classifier's attributes into local `atl';
  - pop first attribute off front of `atl' into local `discrim' and
    generate the "switch" type using discrim;
  - iterate over the remaining elements of `atl' and handle tags on
    each element (the tags are used for storing the union case labels
    or the "default" label) before printing each attribute.
- Additional change in function writeClass: On handling Typedef fix
  crash when superclass is not set.

M  +39   -5    umbrello/codegenerators/idl/idlwriter.cpp

https://invent.kde.org/sdk/umbrello/commit/1b35365e642e4094d916c1db8956f6961c12da46