Bug 115269 - Implement the UML 2.0 standard
Summary: Implement the UML 2.0 standard
Status: CONFIRMED
Alias: None
Product: umbrello
Classification: Applications
Component: general (show other bugs)
Version: 1.4.2
Platform: Mandriva RPMs Linux
: NOR wishlist
Target Milestone: ---
Assignee: Umbrello Development Group
URL:
Keywords:
: 98181 (view as bug list)
Depends on: 403808
Blocks:
  Show dependency treegraph
 
Reported: 2005-10-28 16:55 UTC by John Schneiderman
Modified: 2022-03-07 22:10 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description John Schneiderman 2005-10-28 16:55:08 UTC
Version:           1.4.2 (using KDE KDE 3.4.2)
Installed from:    Mandriva RPMs

It would further enhance KDE's reputation, I think, as a development platform if Umbrello was listed on the official UML website, link given below. The company's and organisations are listed at the end of their website. It would also be awesome if it was UML 2.0 compliant, I can't find any statement on the Umbrello website that states that it is. Love to hear what you think of the idea.

http://www.uml.org/
Comment 1 Oliver Kellogg 2005-10-29 15:53:25 UTC
*** Bug 98181 has been marked as a duplicate of this bug. ***
Comment 2 John Schneiderman 2005-10-29 18:24:39 UTC
Any comments on getting listed though?
Comment 3 Oliver Kellogg 2005-10-30 06:07:40 UTC
AFAICT only 2.0 compliant tools are eligible.
Comment 4 Thibault Normand 2007-04-11 16:49:09 UTC
Partial implementation on r652562
Comment 5 Einar Petersen 2007-10-05 19:54:21 UTC
I concur - getting Umbrello up to date version wise is incredible important for acedemic use - It would be very clever if you could select which UML version you imported/exported - wanted/had to work in as well.
Comment 6 Jonathan Riddell 2007-10-05 20:09:16 UTC
Most of UML 2.0 should be there.  If you can actually name missing features, let us know.
Comment 7 Jarek 2007-11-09 10:14:26 UTC
The following UML 2.0 features are missing in Sequence Diagrams:

1) possibility to use class (not an object) as a target (useful for modelling calls to 'static' methods)

2) possibility to use multi-object as a target 

3) Interaction Frames (for modelling loops, conditional execution etc)
Comment 8 Ralf Habacker 2013-08-16 08:10:47 UTC
(In reply to comment #7)
> The following UML 2.0 features are missing in Sequence Diagrams:
> 
> 1) possibility to use class (not an object) as a target (useful for
> modelling calls to 'static' methods)

works in git master

> 2) possibility to use multi-object as a target 
see 'MultiObject' at http://www.tracemodeler.com/articles/a_quick_introduction_to_uml_sequence_diagrams/ for an example

This is a flag in the object widget, which need to be saved in and load from the xmi file and be honoured in the paint() method  (junior job)

> 3) Interaction Frames (for modelling loops, conditional execution etc)

implemented in Januar 2007 by Hassan Kouch
Comment 9 Oliver Kellogg 2014-02-19 21:01:12 UTC
(In reply to comment #6)
> Most of UML 2.0 should be there.  If you can actually name missing features,
> let us know.

On component diagrams:
* Ports (on component edges)
* Required interface aka socket. This is drawn as a half circle.
Comment 10 Ralf Habacker 2014-02-26 15:29:25 UTC
(In reply to comment #9)
> (In reply to comment #6)
> > Most of UML 2.0 should be there.  If you can actually name missing features,
> > let us know.
> 
> On component diagrams:
> * Ports (on component edges)
> * Required interface aka socket. This is drawn as a half circle.
More missing diagrams/elements are listed at http://umbrello.kde.org/features.php?details=1

General 
* UML 2.0 file format
Comment 11 Oliver Kellogg 2014-05-24 18:44:51 UTC
Git commit d22ed2f5758089d376574337aebdf2e4615ab30b by Oliver Kellogg.
Committed on 24/05/2014 at 18:44.
Pushed by okellogg into branch 'master'.

(In reply to comment #9)
>
> On component diagrams:
> * Ports (on component edges)

Here is a first stab at ports.

umbrello/pics/sources/port.svg, umbrello/pics/port.png,
umbrello/pics/CMakeLists.txt
- Port icon temporarily copied from node.{svg,png}, still to be reworked
  for proper port symbol.

umbrello/port.{h,cpp}, umbrello/widgets/portwidget.{h,cpp}
- Implementation for new UML object Port and its PortWidget.
  Known issues:
  1) The PortWidget is saved but is not restored on reloading the XMI file.
  2) On dragging a port on the diagram, the PortWidget should be made to
     snap to the nearest edge of the nearest ComponentWidget, i.e. the
     port should "stick" to a component on moving.

umbrello/CMakeLists.txt
- Add widgets/portwidget.cpp to libwidgets_SRCS.
- Add port.cpp to libumbrello_SRCS.

umbrello/umlobject.h
- At end of enum ObjectType, add value ot_Port.

umbrello/umllistviewitem.h
- At enum ListViewType, insert value lvt_Port before end-of-enum mark.

umbrello/umllistviewitem.cpp
- In functions slotEditFinished() and toString(), handle case lvt_Port.

umbrello/icon_utils.h
- At enum IconType add value it_Port.

umbrello/icon_utils.cpp
In function toString(IconType type), handle case it_Port.

umbrello/listpopupmenu.h
- At enum MenuType add value mt_Port.

umbrello/listpopupmenu.cpp
- In constructor
    ListPopupMenu(QWidget*, UMLListViewItem::ListViewType, UMLObject*)
  handle case UMLListViewItem::lvt_Port.
- In function insertSingleSelectionMenu() handle case WidgetBase::wt_Port.
- In functions insert() and insertSubMenuNew() handle case mt_Component.
- In functions insertSubMenuNew() and setupMenu() handle case mt_Port.

umbrello/optionstate.h
- In struct GeneralState add member bool uml2.

umbrello/umbrello.kcfg
- In group "General Options" add entry "uml2" for enabling UML2 notation.

umbrello/uml.cpp
- In functions saveOptions() and readOptionState() handle new
  optionState.generalState member uml2.

umbrello/umlscene.cpp
- In function dragEnterEvent(), set bAccept = true for `ot' value ot_Port.

umbrello/model_utils.cpp
- In function isCloneable() handle case WidgetBase::wt_Port.
- In functions uniqObjectName(), guessContainer(), convert_OT_LVT(), and
  convert_OT_MT(), handle case UMLObject::ot_Port.
- In functions typeIsCanvasWidget(), typeIsAllowedInType(), convert_LVT_IT()
  handle case UMLListViewItem::lvt_Port.

umbrello/object_factory.cpp
- In function createNewUMLObject() handle case UMLObject::ot_Port.
- In function makeObjectFromXMI handle case UMLDoc::tagEq(xmiTag, "Port").

umbrello/umllistview.cpp
- In function slotMenuSelection() handle case ListPopupMenu::mt_Port.
- In function connectNewObjectsSlots() handle case UMLObject::ot_Port.
- In functions findUMLObjectInFolder(), moveObject(), determineParentItem(),
  isUnique(), loadChildrenFromXMI(), handle case UMLListViewItem::lvt_Port.
- In function slotMenuSelection() handle case ListPopupMenu::mt_Port.

umbrello/assocrules.cpp
- At AssocRules::m_AssocRules[] add rules for Association and UniAssociation
  from wt_Port to wt_Interface.

umbrello/widgets/widgetbase.h
- At end of enum WidgetType, add value wt_Port.

umbrello/widgets/widgetbase.cpp
- In function slotMenuSelection(), at case ListPopupMenu::mt_Properties,
  admit `wt' value wt_Port to call of showPropertiesDialog().

umbrello/widgets/umlwidget.cpp
- In function widgetHasUMLObject(), return true for `type' value wt_Port.

umbrello/widgets/widget_factory.cpp
- In function createWidget(), add case for ot_Port setting newWidget to
  a new PortWidget.

umbrello/dialogs/pages/classgeneralpage.cpp
- In ClassGeneralPage constructor setup of `name', handle case ot_Port.

M  +2    -0    umbrello/CMakeLists.txt
M  +3    -0    umbrello/assocrules.cpp
M  +3    -0    umbrello/dialogs/pages/classgeneralpage.cpp
M  +2    -0    umbrello/icon_utils.cpp
M  +1    -0    umbrello/icon_utils.h
M  +20   -1    umbrello/listpopupmenu.cpp
M  +1    -0    umbrello/listpopupmenu.h
M  +19   -1    umbrello/model_utils.cpp
M  +6    -0    umbrello/object_factory.cpp
M  +1    -1    umbrello/optionstate.cpp
M  +1    -0    umbrello/optionstate.h
M  +1    -1    umbrello/pics/CMakeLists.txt
A  +-    --    umbrello/pics/port.png
A  +114  -0    umbrello/pics/sources/port.svg
A  +69   -0    umbrello/port.cpp     [License: GPL (v2+)]
A  +46   -0    umbrello/port.h     [License: GPL (v2+)]
M  +5    -0    umbrello/umbrello.kcfg
M  +2    -0    umbrello/uml.cpp
M  +28   -6    umbrello/umllistview.cpp
M  +3    -0    umbrello/umllistviewitem.cpp
M  +1    -0    umbrello/umllistviewitem.h
M  +2    -1    umbrello/umlobject.h
M  +2    -0    umbrello/umlscene.cpp
M  +18   -6    umbrello/widgets/componentwidget.cpp
A  +101  -0    umbrello/widgets/portwidget.cpp     [License: GPL (v2+)]
A  +49   -0    umbrello/widgets/portwidget.h     [License: GPL (v2+)]
M  +1    -0    umbrello/widgets/umlwidget.cpp
M  +5    -0    umbrello/widgets/widget_factory.cpp
M  +1    -0    umbrello/widgets/widgetbase.cpp
M  +2    -1    umbrello/widgets/widgetbase.h

http://commits.kde.org/umbrello/d22ed2f5758089d376574337aebdf2e4615ab30b
Comment 12 Oliver Kellogg 2014-05-24 19:46:06 UTC
Git commit 2265a6f33745c941ad7453a4677560ed7a9fd1e9 by Oliver Kellogg.
Committed on 24/05/2014 at 19:45.
Pushed by okellogg into branch 'master'.

Address known issue of commit d22ed2f,
> 1) The PortWidget is saved but is not restored on reloading the XMI file.

umbrello/widgets/widget_factory.cpp
- In function makeWidgetFromXMI() add handling of tag == "portwidget".

M  +5    -0    umbrello/widgets/widget_factory.cpp

http://commits.kde.org/umbrello/2265a6f33745c941ad7453a4677560ed7a9fd1e9
Comment 13 Oliver Kellogg 2014-05-25 06:38:25 UTC
Git commit cdba7fef0d5c18a04e0a18d8f0c38d2e615930b1 by Oliver Kellogg.
Committed on 25/05/2014 at 06:38.
Pushed by okellogg into branch 'master'.

Address known issue of commit d22ed2f,
> 2) On dragging a port on the diagram, the PortWidget should be made to
     snap to the nearest edge of the nearest ComponentWidget, i.e. the
     port should "stick" to a component on moving.

umbrello/widgets/portwidget.{h,cpp}
- New function attachToOwningComponent() aligns the PortWidget's position
  such that it is attached at one of the sides of its component's widget.
- Reimplement function UMLWidget::moveWidgetBy() in order to constrain
  movement such that the port is always attached to its component.
  (Not flawless yet - to be improved.)
- Change constant `FixedSize' to QSizeF(15, 15).
  Reason: Use same value for width and height to achieve uniform aspect
  regardless of the edge at which the port is attached to the component.

umbrello/umlscene.{h,cpp}
- At function widgetOnDiagram(Uml::ID::Type), change return type from bool
  to UMLWidget*. Return pointer to the widget corresponding to `id' if it
  is on the diagram, NULL if not.
- In function setupNewWidget(), if `w' is of type wt_Port then delegate its
  setting of X/Y position to function PortWidget::attachToOwningComponent().
- In function dragEnterEvent() case DiagramType::Component, if `ot' is of
  type ot_Port then require that the owning component be present on the
  diagram in order to accept the drag event.

M  +16   -10   umbrello/umlscene.cpp
M  +1    -1    umbrello/umlscene.h
M  +69   -1    umbrello/widgets/portwidget.cpp
M  +2    -0    umbrello/widgets/portwidget.h

http://commits.kde.org/umbrello/cdba7fef0d5c18a04e0a18d8f0c38d2e615930b1
Comment 14 Oliver Kellogg 2014-05-25 20:35:21 UTC
Git commit 900fd73f007dc6710b9b353f1db998ed8ce57abc by Oliver Kellogg.
Committed on 25/05/2014 at 20:35.
Pushed by okellogg into branch 'master'.

Refinement to commit cdba7fe attachment of port to component on diagram

umbrello/widgets/portwidget.cpp
- In function moveWidgetBy(),
  - If port is at left or right edge of owner then
    - If newX is smaller than owner->x() - width() then clip newX to
      owner->x() - width()
    - If newX is greater than owner->x() + owner->width() then clip newX to
      owner->x() + owner->width()
  - If port is at top or bottom edge of owner then
      - If newY is smaller than owner->y() - height() then clip newY to
        owner->y() - height()
      - If newY is greater than owner->y() + owner->height() then clip newY
        to owner->y() + owner->height()
- In function attachToOwningComponent(),
  - If scenePos.x() is in the range
      [ owner->x() - width() : owner->x() + owner->width() ]
    then use scenePos.x() unmodified in call to setX().
  - If scenePos.y() is in the range
      [ owner->y() - height() : owner->y() + owner->height() ]
    then use scenePos.y() unmodified in call to setY().

Known issue:
On moving a ComponentWidget, its attached PortWidgets should move along.

M  +28   -16   umbrello/widgets/portwidget.cpp

http://commits.kde.org/umbrello/900fd73f007dc6710b9b353f1db998ed8ce57abc
Comment 15 Oliver Kellogg 2014-05-26 20:36:31 UTC
Git commit d0bafb53ebd1a99d6a127321b8f93708f7ee0d91 by Oliver Kellogg.
Committed on 26/05/2014 at 20:36.
Pushed by okellogg into branch 'master'.

Address known issue of commit 900fd73,
> On moving a ComponentWidget, its attached PortWidgets should move along.

umbrello/widgets/componentwidget.{h,cpp}
- Add signal sigCompMoved(qreal diffX, qreal diffY)
- Reimplement UMLWidget::moveWidgetBy() for emitting sigCompMoved()

umbrello/widgets/portwidget.{h,cpp}
- Add slot slotCompMoved(qreal diffX, qreal diffY)
- In constructor, connect signal sigCompMoved() of the owning component's
  widget with own slot slotCompMoved()

M  +12   -0    umbrello/widgets/componentwidget.cpp
M  +11   -0    umbrello/widgets/componentwidget.h
M  +37   -18   umbrello/widgets/portwidget.cpp
M  +2    -1    umbrello/widgets/portwidget.h

http://commits.kde.org/umbrello/d0bafb53ebd1a99d6a127321b8f93708f7ee0d91
Comment 16 Oliver Kellogg 2014-06-14 20:46:49 UTC
Git commit f8d4dbf7fc67e1ce0de180708eb98641b6cdd627 by Oliver Kellogg.
Committed on 14/06/2014 at 20:46.
Pushed by okellogg into branch 'master'.

Permit creation of ports using toolbar for component diagram:

umbrello/widgets/toolbarstateonewidget.cpp
- In function mouseReleaseWidget() admit
    currentWidget()->baseType() == WidgetBase::wt_Component
  to the call of setWidget(currentWidget())
- In function setWidget() handling of widgetType() == WidgetBase::wt_Pin,
  add handling of m_firstObject->baseType() == WidgetBase::wt_Component:
  - Open a dialog querying the user for a new port name
  - If user confirmed port creation then
    - Let Object_Factory create a UML Port object of given name.
      The object is owned by the UML Component underlying m_firstObject.
    - Let Widget_Factory create a PortWidget representing the UML Port and
      assign this widget to `umlwidget'.

umbrello/worktoolbar.cpp
- In function slotCheckToolBar(Uml::DiagramType::Enum) switch (m_Type) case
  Uml::DiagramType::Component, insertHotBtn(tbb_Pin).
  tbb_Pin is reused for ports.

umbrello/widgets/portwidget.cpp
- In function attachToOwningComponent() prevent the port from being dropped
  underneath its owning component (thus becoming inaccessible).
  This is achieved as follows:
  If scenePos.x() is in the range
    [ owner->x() : owner->x() + owner->width() ]
  and scenePos.y() is in the range
    [ owner->y() : owner->y() + owner->height() ]
  then
    if scenePos.y() is in the top half of owner then
      setY(owner->y() - height())
    else
      setY(owner->y() + owner->height())

M  +18   -7    umbrello/widgets/portwidget.cpp
M  +21   -4    umbrello/widgets/toolbarstateonewidget.cpp
M  +1    -0    umbrello/worktoolbar.cpp

http://commits.kde.org/umbrello/f8d4dbf7fc67e1ce0de180708eb98641b6cdd627
Comment 17 Oliver Kellogg 2014-07-27 08:34:19 UTC
Git commit 44157ba7bf291e8860db54c921a605f2fecdb4f1 by Oliver Kellogg.
Committed on 27/07/2014 at 08:34.
Pushed by okellogg into branch 'master'.

Support socket (half circle) notation for interface required by component
or port on a component diagram:

umbrello/widgets/classifierwidget.h
- New constant SOCKET_INCREMENT defines the amount by which the socket
  arc is larger than the interface ball.

umbrello/widgets/classifierwidget.cpp
- In function shape() add SOCKET_INCREMENT to cirleSize if m_Assocs.size()
  is larger than 1.  The logic is that there can be only one interface
  provider, i.e. all further associations are related to interface clients.
  This could perhaps be refined, e.g. to support absence of provider.
- In function drawAsCircle() implement drawing of socket for required
  interface using QPainter::drawArc(). Choose orientation of arc depending
  on the position of the port/component in relation to the interface:
  - If port/component is left of  interface then draw arc at left
  - If port/component is right of interface then draw arc at right
  - If port/component is above    interface then draw arc at top
  - If port/component is below    interface then draw arc at bottom
  - If port/component is close to a diagonal of interface then draw arc
    oriented to the respective diagonal.

M  +65   -3    umbrello/widgets/classifierwidget.cpp
M  +1    -0    umbrello/widgets/classifierwidget.h

http://commits.kde.org/umbrello/44157ba7bf291e8860db54c921a605f2fecdb4f1
Comment 18 Ralf Habacker 2019-07-26 06:43:24 UTC
At https://umbrello.kde.org/features.php you will find all existing UML 2.0 functions that may have been implemented independently of this ticket or can already be used with UML 1.4 means.
Comment 19 Ralf Habacker 2019-08-01 09:41:07 UTC
A missing feature is the "required interface" representation with a semicircle (see https://developer.ibm.com/articles/the-component-diagram/#another-approach-to-modeling-a-component-s-interfaces). Umbrello only displays this semicircle when another component is connected to the interface via a normal mapping that displays a "provided interface".
Comment 20 Ralf Habacker 2019-08-01 11:14:37 UTC
Git commit abd6d52e196417188c58f68c5fe7a4c2f2f72082 by Ralf Habacker.
Committed on 01/08/2019 at 10:52.
Pushed by habacker into branch 'master'.

Remove port from component diagram toolbar if UML2 is not enabled

M  +6    -1    umbrello/dialogs/pages/generaloptionpage.cpp
M  +2    -1    umbrello/dialogs/pages/generaloptionpage.h
M  +2    -1    umbrello/worktoolbar.cpp

https://commits.kde.org/umbrello/abd6d52e196417188c58f68c5fe7a4c2f2f72082
Comment 21 Ralf Habacker 2019-08-01 11:23:52 UTC
Git commit 264e9e08e7b817875ccd946bc6975afd54a79565 by Ralf Habacker.
Committed on 01/08/2019 at 11:22.
Pushed by habacker into branch 'master'.

Fix icon for UML2 components

If UML2 is not activated, the icon "component1" is used for components.

M  +2    -1    umbrello/icon_utils.cpp
M  +2    -0    umbrello/icons.qrc
M  +2    -0    umbrello/pics/CMakeLists.txt
M  +-    --    umbrello/pics/component.png
C  +-    --    umbrello/pics/component1.png [from: umbrello/pics/component.png - 087% similarity]
M  +-    --    umbrello/pics/cursor-component.png
C  +-    --    umbrello/pics/cursor-component1.png [from: umbrello/pics/cursor-component.png - 086% similarity]
M  +155  -58   umbrello/pics/sources/component.svg
C  +0    -0    umbrello/pics/sources/component1.svg [from: umbrello/pics/sources/component.svg - 100% similarity]

https://commits.kde.org/umbrello/264e9e08e7b817875ccd946bc6975afd54a79565
Comment 22 Ralf Habacker 2019-08-02 15:37:52 UTC
Git commit ab3fe4cd1e8f4f367efe92bb8aae1df6d5ce8cfa by Ralf Habacker.
Committed on 02/08/2019 at 14:38.
Pushed by habacker into branch 'Applications/19.08'.

Fix icon for UML2 components

If UML2 is not activated, the icon "component1" is used for components.

M  +2    -1    umbrello/icon_utils.cpp
M  +2    -0    umbrello/icons.qrc
M  +2    -0    umbrello/pics/CMakeLists.txt
M  +-    --    umbrello/pics/component.png
C  +-    --    umbrello/pics/component1.png [from: umbrello/pics/component.png - 087% similarity]
M  +-    --    umbrello/pics/cursor-component.png
C  +-    --    umbrello/pics/cursor-component1.png [from: umbrello/pics/cursor-component.png - 086% similarity]
M  +155  -58   umbrello/pics/sources/component.svg
C  +0    -0    umbrello/pics/sources/component1.svg [from: umbrello/pics/sources/component.svg - 100% similarity]

https://commits.kde.org/umbrello/ab3fe4cd1e8f4f367efe92bb8aae1df6d5ce8cfa
Comment 23 Ralf Habacker 2019-08-02 23:09:07 UTC
Git commit 563bed34a52f79f92b0f9b4c6f91e4d4535b2f33 by Ralf Habacker.
Committed on 02/08/2019 at 23:05.
Pushed by habacker into branch 'master'.

Add icon for "required interface"

M  +1    -0    umbrello/icon_utils.cpp
M  +1    -0    umbrello/icon_utils.h
M  +2    -0    umbrello/pics/CMakeLists.txt
A  +-    --    umbrello/pics/cursor-interface-requirement.png
A  +-    --    umbrello/pics/interface-requirement.png
A  +134  -0    umbrello/pics/sources/interface-requirement.svg

https://commits.kde.org/umbrello/563bed34a52f79f92b0f9b4c6f91e4d4535b2f33
Comment 24 Ralf Habacker 2019-08-03 16:34:24 UTC
Git commit 37ad1009fba12375514d5a24b9964bee7c73b3af by Ralf Habacker.
Committed on 03/08/2019 at 16:34.
Pushed by habacker into branch 'Applications/19.08'.

Component symbol made more unique by enlarging the inner rectangle

M  +-    --    umbrello/pics/component.png
M  +-    --    umbrello/pics/cursor-component.png
M  +15   -15   umbrello/pics/sources/component.svg

https://commits.kde.org/umbrello/37ad1009fba12375514d5a24b9964bee7c73b3af
Comment 25 Ralf Habacker 2019-08-05 04:58:50 UTC
Git commit 48ae6b8ec83505a22cdc8811feeafa3040db13a7 by Ralf Habacker.
Committed on 05/08/2019 at 04:58.
Pushed by habacker into branch 'master'.

Add UML2 support for "required interface" associations

With UML2 a "required interface" association is created by adding a
normal association from the interface to the component, wherein adding
an association from the component to the interface creates a "provided
interface".

With UML1, according to current research, there is no visible label for
a required interface mapping. This behavior has been corrected.

M  +142  -136  umbrello/assocrules.cpp
M  +2    -0    umbrello/assocrules.h
M  +2    -0    umbrello/icons.qrc
M  +25   -14   umbrello/umlwidgets/classifierwidget.cpp

https://commits.kde.org/umbrello/48ae6b8ec83505a22cdc8811feeafa3040db13a7
Comment 26 Ralf Habacker 2019-08-06 12:44:59 UTC
Git commit 3d1984979cd3b621bd4e7c6db38433d18a550672 by Ralf Habacker.
Committed on 06/08/2019 at 12:39.
Pushed by habacker into branch 'Applications/19.08'.

Add UML2 support for "required interface" associations

With UML2 a "required interface" association is created by adding a
normal association from the interface to the component, wherein adding
an association from the component to the interface creates a "provided
interface".

With UML1, according to current research, there is no visible label for
a required interface mapping. This behavior has been corrected.
Related: bug 403808
(cherry picked from commit 48ae6b8ec83505a22cdc8811feeafa3040db13a7)

M  +142  -136  umbrello/assocrules.cpp
M  +2    -0    umbrello/assocrules.h
M  +25   -14   umbrello/umlwidgets/classifierwidget.cpp

https://commits.kde.org/umbrello/3d1984979cd3b621bd4e7c6db38433d18a550672
Comment 27 Ralf Habacker 2019-08-06 12:44:59 UTC
Git commit 00ca55576b815ddd54466d1da48eeecf04d6b0d2 by Ralf Habacker.
Committed on 06/08/2019 at 12:40.
Pushed by habacker into branch 'Applications/19.08'.

Activate newly added association rules for UML2 "required interface"

Fixup of commit 48ae6b8ec83505a22cdc8811feeafa3040db13a7.

(cherry picked from commit 0514f21fbc66e54a3afb8e91d89e38b127ac1ff2)
Related: bug 403808
FIXED-IN:2.29.0 (KDE Applications 19.08.0)

M  +3    -4    umbrello/assocrules.cpp

https://commits.kde.org/umbrello/00ca55576b815ddd54466d1da48eeecf04d6b0d2
Comment 28 Ralf Habacker 2019-10-28 20:33:27 UTC
Git commit 41dccb81fe3147095d722f1a0e35cdf4aac3d659 by Ralf Habacker.
Committed on 28/10/2019 at 20:35.
Pushed by habacker into branch 'master'.

Fix icon for provided interface in work toolbar

M  +1    -1    umbrello/worktoolbar.cpp

https://commits.kde.org/umbrello/41dccb81fe3147095d722f1a0e35cdf4aac3d659
Comment 29 Ralf Habacker 2019-10-28 20:33:27 UTC
Git commit f4ce547d518c912f01f30fe12cb9c72c6c71d43e by Ralf Habacker.
Committed on 28/10/2019 at 20:35.
Pushed by habacker into branch 'master'.

Add required interface to work toolbar

M  +5    -0    umbrello/worktoolbar.cpp
M  +2    -0    umbrello/worktoolbar.h

https://commits.kde.org/umbrello/f4ce547d518c912f01f30fe12cb9c72c6c71d43e
Comment 30 Ralf Habacker 2020-02-06 00:12:04 UTC
Git commit 2807dcca8996b22222972e4ff699d1d4046329f3 by Ralf Habacker.
Committed on 06/02/2020 at 00:11.
Pushed by habacker into branch 'release/19.12'.

Fix using wrong name for slotInterfaceRequired() in class WorkToolBar

Fixup of commit f4ce547d51

M  +1    -1    umbrello/worktoolbar.cpp

https://invent.kde.org/kde/umbrello/commit/2807dcca8996b22222972e4ff699d1d4046329f3
Comment 31 Oliver Kellogg 2021-12-26 23:00:54 UTC
Git commit b57c76163be60160b4559cd6c7857e1c911196f3 by Oliver Kellogg.
Committed on 26/12/2021 at 23:00.
Pushed by okellogg into branch 'master'.

Enhancement: Write UML2 XMI format when UML2 mode is selected.
Directory umbrello/uml1model is renamed to umbrello/umlmodel to reflect
how the enhancement is implemented (same source file for UML1 and UML2
mode).

Changes:

umbrello/CMakeLists.txt
umbrello/codeimport/CMakeLists.txt
unittests/CMakeLists.txt
- Adjust include_directories et al. to renamed directory `umlmodel'.

umbrello/clipboard/umldragdata.cpp
umbrello/cmds/cmdremovediagram.cpp
umbrello/cmds/widget/cmdcreatewidget.cpp
umbrello/cmds/widget/cmdremovewidget.cpp
umbrello/codegenerators/classifiercodedocument.{h,cpp}
umbrello/codegenerators/codeaccessormethod.{h,cpp}
umbrello/codegenerators/codeblock.{h,cpp}
umbrello/codegenerators/codeblockwithcomments.{h,cpp}
umbrello/codegenerators/codeclassfield.{h,cpp}
umbrello/codegenerators/codeclassfielddeclarationblock.{h,cpp}
umbrello/codegenerators/codecomment.{h,cpp}
umbrello/codegenerators/codedocument.{h,cpp}
umbrello/codegenerators/codegenerator.{h,cpp}
umbrello/codegenerators/codegenobjectwithtextblocks.{h,cpp}
umbrello/codegenerators/codeoperation.{h,cpp}
umbrello/codegenerators/cpp/cppcodecomment.{h,cpp}
umbrello/codegenerators/cpp/cppcodedocumentation.{h,cpp}
umbrello/codegenerators/cpp/cppcodegenerator.{h,cpp}
umbrello/codegenerators/cpp/cppheaderclassdeclarationblock.{h,cpp}
umbrello/codegenerators/cpp/cppheadercodedocument.{h,cpp}
umbrello/codegenerators/d/dclassdeclarationblock.{h,cpp}
umbrello/codegenerators/d/dcodecomment.{h,cpp}
umbrello/codegenerators/d/dcodedocumentation.{h,cpp}
umbrello/codegenerators/hierarchicalcodeblock.{h,cpp}
umbrello/codegenerators/java/javaantcodedocument.{h,cpp}
umbrello/codegenerators/java/javaclassdeclarationblock.{h,cpp}
umbrello/codegenerators/java/javacodedocumentation.{h,cpp}
umbrello/codegenerators/ownedhierarchicalcodeblock.h
umbrello/codegenerators/ruby/rubyclassdeclarationblock.{h,cpp}
umbrello/codegenerators/ruby/rubycodedocumentation.{h,cpp}
umbrello/codegenerators/textblock.h
umbrello/codegenerators/xml/xmlelementcodeblock.{h,cpp}
umbrello/docgenerators/docbookgeneratorjob.cpp
umbrello/optionstate.{h,cpp}
umbrello/umldoc.{h,cpp}
umbrello/umllistview.{h,cpp}
umbrello/umllistviewitem.{h,cpp}
umbrello/umlmodel/umlobject.{h,cpp}
umbrello/umlmodel/actor.{h,cpp}
umbrello/umlmodel/artifact.{h,cpp}
umbrello/umlmodel/association.{h,cpp}
umbrello/umlmodel/attribute.{h,cpp}
umbrello/umlmodel/category.{h,cpp}
umbrello/umlmodel/checkconstraint.{h,cpp}
umbrello/umlmodel/classifier.{h,cpp}
umbrello/umlmodel/component.{h,cpp}
umbrello/umlmodel/datatype.{h,cpp}
umbrello/umlmodel/entity.{h,cpp}
umbrello/umlmodel/entityattribute.{h,cpp}
umbrello/umlmodel/enum.{h,cpp}
umbrello/umlmodel/enumliteral.{h,cpp}
umbrello/umlmodel/folder.{h,cpp}
umbrello/umlmodel/foreignkeyconstraint.{h,cpp}
umbrello/umlmodel/instance.{h,cpp}
umbrello/umlmodel/instanceattribute.{h,cpp}
umbrello/umlmodel/node.{h,cpp}
umbrello/umlmodel/operation.{h,cpp}
umbrello/umlmodel/package.{h,cpp}
umbrello/umlmodel/port.{h,cpp}
umbrello/umlmodel/stereotype.{h,cpp}
umbrello/umlmodel/template.{h,cpp}
umbrello/umlmodel/umlcanvasobject.h
umbrello/umlmodel/umlrole.{h,cpp}
umbrello/umlmodel/uniqueconstraint.{h,cpp}
umbrello/umlwidgets/activitywidget.{h,cpp}
umbrello/umlwidgets/actorwidget.{h,cpp}
umbrello/umlwidgets/artifactwidget.{h,cpp}
umbrello/umlwidgets/associationline.{h,cpp}
umbrello/umlwidgets/associationwidget.{h,cpp}
umbrello/umlwidgets/associationwidgetrole.{h,cpp}
umbrello/umlwidgets/boxwidget.{h,cpp}
umbrello/umlwidgets/categorywidget.{h,cpp}
umbrello/umlwidgets/classifierwidget.{h,cpp}
umbrello/umlwidgets/combinedfragmentwidget.{h,cpp}
umbrello/umlwidgets/componentwidget.{h,cpp}
umbrello/umlwidgets/datatypewidget.{h,cpp}
umbrello/umlwidgets/diagramproxywidget.{h,cpp}
umbrello/umlwidgets/entitywidget.{h,cpp}
umbrello/umlwidgets/enumwidget.{h,cpp}
umbrello/umlwidgets/floatingdashlinewidget.{h,cpp}
umbrello/umlwidgets/floatingtextwidget.{h,cpp}
umbrello/umlwidgets/forkjoinwidget.{h,cpp}
umbrello/umlwidgets/linkwidget.{h,cpp}
umbrello/umlwidgets/messagewidget.{h,cpp}
umbrello/umlwidgets/nodewidget.{h,cpp}
umbrello/umlwidgets/notewidget.{h,cpp}
umbrello/umlwidgets/objectnodewidget.{h,cpp}
umbrello/umlwidgets/objectwidget.{h,cpp}
umbrello/umlwidgets/packagewidget.{h,cpp}
umbrello/umlwidgets/pinportbase.{h,cpp}
umbrello/umlwidgets/preconditionwidget.{h,cpp}
umbrello/umlwidgets/regionwidget.{h,cpp}
umbrello/umlwidgets/signalwidget.{h,cpp}
umbrello/umlwidgets/statewidget.{h,cpp}
umbrello/umlwidgets/umlwidget.{h,cpp}
umbrello/umlwidgets/usecasewidget.{h,cpp}
umbrello/umlwidgets/widgetbase.{h,cpp}
umbrello/umlmodel/uniqueconstraint.{h,cpp}
umbrello/umlmodel/usecase.{h,cpp}
umbrello/umlscene.{h,cpp}
unittests/testbase.h
unittests/testoptionstate.cpp
- Rename saveToXMI1/loadFromXMI1 function definitions and invocations to
  saveToXMI/loadFromXMI.

umbrello/model_utils.cpp
- In function getXmiId recognize "xmi:id" before attempting "xmi.id".

umbrello/object_factory.cpp
- In function makeObjectFromXMI return new UMLAssociation for xmiTag
  "interfaceRealization".

umbrello/umldoc.cpp
- Additionally rename function loadUMLObjectsFromXMI1 to
  loadUMLObjectsFromXMI.
- In function saveToXMI write UML2 XMI format when in UML2 mode:
  - Write start element "xmi:XMI" instead of "XMI".
  - Write attribute "xmi:version" instead of "xmi.version".
  - Additionally write attributes "xmlns:xmi" and "xmlns:xsi".
  - Do not write start element "XMI.header" but do write some of the
    elements contained therein.
  - Write start element xmi:Documentation instead of XMI.documentation.
  - Write start element "uml:Model" instead of "UML:Model".
  - Write attribute "xmi:id" instead of "xmi.id".
  - Do not write attributes "isSpecification", "isAbstract", "isRoot",
    "isLeaf".
  - Write start element "xmi:Extension" instead of "XMI.extensions".
- In function encoding(QIODevice&), if element.tagName() is
  "xmi:Documentation" then return ENC_UNICODE.
- In function loadFromXMI handle outerTag "xmi:Extension" alongside
  "XMI.extensions".

umbrello/umlmodel/umlobject.{h,cpp}
- At function save1:
  - Switch order of arguments (`writer' comes first, then `type').
  - No longer expect argument `type' to carry an XMI namespace
    (the XMI namespace is added locally when in UML1 mode).
  - Add optional argument `tag' defaulting to QString().

umbrello/umlmodel/association.cpp
umbrello/umlmodel/component.cpp
umbrello/umlmodel/enumliteral.cpp
umbrello/umlmodel/entity.cpp
umbrello/umlmodel/entityattribute.cpp
umbrello/umlmodel/foreignkeyconstraint.cpp
umbrello/umlmodel/instance.cpp
umbrello/umlmodel/node.cpp
umbrello/umlmodel/operation.cpp
umbrello/umlmodel/package.cpp
umbrello/umlmodel/port.cpp
umbrello/umlmodel/stereotype.cpp
umbrello/umlmodel/template.cpp
umbrello/umlmodel/umlrole.cpp
umbrello/umlmodel/uniqueconstraint.cpp
umbrello/umlmodel/uniqueconstraint.cpp
umbrello/umlmodel/usecase.cpp
unittests/testumlobject.cpp
- In function saveToXMI1 call to UMLObject::save1(),
  - adjust arguments to changed order;
  - omit hard coded namespace prefix "UML:" on `type' argument;
  - provide value for new argument `tag' as required by UML2.

umbrello/umlmodel/association.cpp
- In function saveToXMI:
  - In case m_AssocType Uml::AssociationType::Realization, if
    Settings::optionState().generalState.uml2 is true then write tag
    "interfaceRealization" in lieu of "UML:Abstraction".
  - When producing the XMI for "Association" in UML2 mode do not write
    the start element "UML:Association.connection" but do write its
    content.  The content may still change for UML2 compliance.

umbrello/umlmodel/attribute.cpp
- In function saveToXMI, if Settings::optionState().generalState.uml2 is
  true then call UMLObject::save1() with type "Property" and tag
  "ownedAttribute".

umbrello/umlmodel/classifier.cpp
- In function saveToXMI1:
  - Omit XML namespace prefix "UML:" from `tag'.
  - On saving templates in UML2 mode, do not produce the
    "UML:ModelElement.templateParameter" envelope element but do produce
    its content.
  - On saving generalizations in UML2 mode, do not produce the
    "UML:GeneralizableElement.generalization" envelope element but do
    produce its content (adjusted to UML2 format).
  - On saving attributes (attList) and operations (opList) in UML2 mode,
    do not produce the"UML:Classifier.feature" envelope element but do
    produce its content.
  - On saving contained objects in UML2 mode, do not produce the
    "UML:Namespace.ownedElement" envelope element but do produce its
    content.
- In function makeChildObject handle xmiTag ClassifierTemplateParameter
  alongside "TemplateParameter".

umbrello/umlmodel/component.cpp
- In function saveToXMI1, if Settings::optionState().generalState.uml2
  is true then do not produce the "UML:Namespace.ownedElement" envelope
  element but do produce its content.
- In function load1 loop over nodes of `element', if the tag in `type'
  is "ownedAttribute" then set `type' to the value of tempElement's
  "xmi:type" XML attribute.

umbrello/umlmodel/entity.cpp
- In function load1 loop over nodes of `element', if the tag in `type'
  is "ownedAttribute" then set `type' to the value of tempElement's
  "xmi:type" XML attribute.

umbrello/umlmodel/enum.cpp
- In function saveToXMI1, if Settings::optionState().generalState.uml2
  is true then do not produce the "UML:Enumeration.literal" envelope
  element but do produce its content.

umbrello/umlmodel/folder.{h,cpp}
- Additionally rename function saveContents1 to saveContents.
- In function saveContents, if Settings::optionState().generalState.uml2
  is true then
  - do not produce the "UML:Namespace.ownedElement" envelope element but
    do produce its content;
  - on handling m_diagrams, produce start element "xmi:Extension" in
    lieu of "XMI.extension".
- In function save1:
  - Omit XML namespace prefix "UML:" from elementName, it will be added
    by UMLObject::save1.
  - Adjust call to UMLObject::save1() to changed order of arguments and
    provide special value "<use_type_as_tag>" as tag argument.
- In function saveToXMI1, on creating the extension stub in the main
  file, in UML2 mode produce start element "xmi:Extension" in lieu of
  "XMI.extension".
- In function load1:
  - Handle type "xmi:Extension" alongside "XMI.extension".
  - Remove check for invalid namespaces.  Reason: The "namespace" XML
    argument is non standard and is not produced in UML2 mode.

umbrello/umlmodel/instanceattribute.cpp
- In function saveToXMI, if Settings::optionState().generalState.uml2 is
  true then write attribute "xmi:id" in lieu of "xmi.id".

umbrello/umlmodel/operation.cpp
- In function saveToXMI1:
  - Do not produce the "UML:BehavioralFeature.parameter" envelope
    element but do produce its content.
  - Use the XML attribute name "direction" for indicating the
    parameter's "in out" or "out" calling convention.
  - Produce the tag "ownedParameter" and produce the "xmi:type"
    attribute set to "uml:Parameter".
  - Use the XML attribute name "xmi:id" for writing m_returnId.
- In function load1 handle tag "ownedParameter" alongside "Parameter".

umbrello/umlmodel/package.cpp
- In function saveToXMI, if Settings::optionState().generalState.uml2
  is true then do not produce the "UML:Namespace.ownedElement" envelope
  element but do produce its content.

umbrello/umlmodel/stereotype.cpp
- In function saveToXMI, if Settings::optionState().generalState.uml2
  is true then
  - do not produce the "UML:Stereotype.feature" envelope element but do
    produce its content;
  - produce the attribute definitions using XML tag "ownedAttribute".

umbrello/umlmodel/umlrole.cpp
- In function load1 use function Model_Utils::getXmiId to abstract away
  the difference in XMI ID attribute (UML1 "xmi.id" vs. UML2 "xmi:id").

umbrello/umlmodel/uniqueconstraint.cpp
- In function load1 loop over node, if tag is "ownedAttribute" then set
  tag to the value of the "xmi:type" attribute of tempElement.

umbrello/version.h
- Rename XMI_FILE_VERSION to XMI1_FILE_VERSION.
- Add XMI2_FILE_VERSION with value "2.0.0".
  XMI2_FILE_VERSION indicates the exporterVersion when UML2 support is
  enabled, i.e. when Settings::optionState().generalState.uml2 is true.
  The idea is that the UML1 XMI format will use versions below "2.0.0".

M  +36   -36   umbrello/CMakeLists.txt
M  +17   -17   umbrello/clipboard/umldragdata.cpp
M  +3    -3    umbrello/cmds/cmdremovediagram.cpp
M  +4    -4    umbrello/cmds/widget/cmdcreatewidget.cpp
M  +5    -5    umbrello/cmds/widget/cmdremovewidget.cpp
M  +4    -4    umbrello/codegenerators/classifiercodedocument.cpp
M  +2    -2    umbrello/codegenerators/classifiercodedocument.h
M  +3    -3    umbrello/codegenerators/codeaccessormethod.cpp
M  +3    -3    umbrello/codegenerators/codeaccessormethod.h
M  +3    -3    umbrello/codegenerators/codeblock.cpp
M  +3    -3    umbrello/codegenerators/codeblock.h
M  +6    -6    umbrello/codegenerators/codeblockwithcomments.cpp
M  +3    -3    umbrello/codegenerators/codeblockwithcomments.h
M  +7    -7    umbrello/codegenerators/codeclassfield.cpp
M  +3    -3    umbrello/codegenerators/codeclassfield.h
M  +2    -2    umbrello/codegenerators/codeclassfielddeclarationblock.cpp
M  +3    -3    umbrello/codegenerators/codeclassfielddeclarationblock.h
M  +3    -3    umbrello/codegenerators/codecomment.cpp
M  +3    -3    umbrello/codegenerators/codecomment.h
M  +4    -4    umbrello/codegenerators/codedocument.cpp
M  +2    -2    umbrello/codegenerators/codedocument.h
M  +4    -4    umbrello/codegenerators/codegenerator.cpp
M  +2    -2    umbrello/codegenerators/codegenerator.h
M  +7    -7    umbrello/codegenerators/codegenobjectwithtextblocks.cpp
M  +3    -3    umbrello/codegenerators/codeoperation.cpp
M  +3    -3    umbrello/codegenerators/codeoperation.h
M  +3    -3    umbrello/codegenerators/codeparameter.cpp
M  +2    -2    umbrello/codegenerators/cpp/cppcodecomment.cpp
M  +2    -2    umbrello/codegenerators/cpp/cppcodecomment.h
M  +2    -2    umbrello/codegenerators/cpp/cppcodedocumentation.cpp
M  +2    -2    umbrello/codegenerators/cpp/cppcodedocumentation.h
M  +3    -3    umbrello/codegenerators/cpp/cppcodegenerator.cpp
M  +1    -1    umbrello/codegenerators/cpp/cppcodegenerator.h
M  +3    -3    umbrello/codegenerators/cpp/cppheaderclassdeclarationblock.cpp
M  +3    -3    umbrello/codegenerators/cpp/cppheaderclassdeclarationblock.h
M  +7    -7    umbrello/codegenerators/cpp/cppheadercodedocument.cpp
M  +2    -2    umbrello/codegenerators/cpp/cppheadercodedocument.h
M  +3    -3    umbrello/codegenerators/d/dclassdeclarationblock.cpp
M  +3    -3    umbrello/codegenerators/d/dclassdeclarationblock.h
M  +10   -10   umbrello/codegenerators/d/dclassifiercodedocument.cpp
M  +2    -2    umbrello/codegenerators/d/dcodecomment.cpp
M  +2    -2    umbrello/codegenerators/d/dcodecomment.h
M  +2    -2    umbrello/codegenerators/d/dcodedocumentation.cpp
M  +2    -2    umbrello/codegenerators/d/dcodedocumentation.h
M  +3    -3    umbrello/codegenerators/hierarchicalcodeblock.cpp
M  +3    -3    umbrello/codegenerators/hierarchicalcodeblock.h
M  +8    -8    umbrello/codegenerators/java/javaantcodedocument.cpp
M  +2    -2    umbrello/codegenerators/java/javaantcodedocument.h
M  +3    -3    umbrello/codegenerators/java/javaclassdeclarationblock.cpp
M  +3    -3    umbrello/codegenerators/java/javaclassdeclarationblock.h
M  +10   -10   umbrello/codegenerators/java/javaclassifiercodedocument.cpp
M  +2    -2    umbrello/codegenerators/java/javacodedocumentation.cpp
M  +2    -2    umbrello/codegenerators/java/javacodedocumentation.h
M  +3    -3    umbrello/codegenerators/ownedhierarchicalcodeblock.h
M  +3    -3    umbrello/codegenerators/ruby/rubyclassdeclarationblock.cpp
M  +3    -3    umbrello/codegenerators/ruby/rubyclassdeclarationblock.h
M  +10   -10   umbrello/codegenerators/ruby/rubyclassifiercodedocument.cpp
M  +2    -2    umbrello/codegenerators/ruby/rubycodedocumentation.cpp
M  +2    -2    umbrello/codegenerators/ruby/rubycodedocumentation.h
M  +3    -3    umbrello/codegenerators/textblock.h
M  +3    -3    umbrello/codegenerators/xml/xmlelementcodeblock.cpp
M  +3    -3    umbrello/codegenerators/xml/xmlelementcodeblock.h
M  +1    -1    umbrello/codeimport/CMakeLists.txt
M  +1    -1    umbrello/docgenerators/docbookgeneratorjob.cpp
M  +2    -2    umbrello/import_argo.cpp
M  +2    -2    umbrello/model_utils.cpp
M  +3    -2    umbrello/object_factory.cpp
M  +13   -13   umbrello/optionstate.cpp
M  +13   -13   umbrello/optionstate.h
M  +95   -72   umbrello/umldoc.cpp
M  +3    -3    umbrello/umldoc.h
M  +3    -3    umbrello/umllistview.cpp
M  +2    -2    umbrello/umllistview.h
M  +5    -5    umbrello/umllistviewitem.cpp
M  +2    -2    umbrello/umllistviewitem.h
R  +3    -3    umbrello/umlmodel/actor.cpp [from: umbrello/uml1model/actor.cpp - 083% similarity]
R  +2    -2    umbrello/umlmodel/actor.h [from: umbrello/uml1model/actor.h - 088% similarity]
R  +2    -2    umbrello/umlmodel/artifact.cpp [from: umbrello/uml1model/artifact.cpp - 095% similarity]
R  +1    -1    umbrello/umlmodel/artifact.h [from: umbrello/uml1model/artifact.h - 096% similarity]
R  +25   -14   umbrello/umlmodel/association.cpp [from: umbrello/uml1model/association.cpp - 094% similarity]
R  +2    -2    umbrello/umlmodel/association.h [from: umbrello/uml1model/association.h - 096% similarity]
R  +8    -3    umbrello/umlmodel/attribute.cpp [from: umbrello/uml1model/attribute.cpp - 097% similarity]
R  +1    -1    umbrello/umlmodel/attribute.h [from: umbrello/uml1model/attribute.h - 097% similarity]
R  +3    -3    umbrello/umlmodel/category.cpp [from: umbrello/uml1model/category.cpp - 090% similarity]
R  +2    -2    umbrello/umlmodel/category.h [from: umbrello/uml1model/category.h - 091% similarity]
R  +2    -2    umbrello/umlmodel/checkconstraint.cpp [from: umbrello/uml1model/checkconstraint.cpp - 096% similarity]
R  +1    -1    umbrello/umlmodel/checkconstraint.h [from: umbrello/uml1model/checkconstraint.h - 097% similarity]
R  +53   -26   umbrello/umlmodel/classifier.cpp [from: umbrello/uml1model/classifier.cpp - 095% similarity]
R  +1    -1    umbrello/umlmodel/classifier.h [from: umbrello/uml1model/classifier.h - 099% similarity]
R  +0    -0    umbrello/umlmodel/classifierlistitem.cpp [from: umbrello/uml1model/classifierlistitem.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/classifierlistitem.h [from: umbrello/uml1model/classifierlistitem.h - 100% similarity]
R  +14   -6    umbrello/umlmodel/component.cpp [from: umbrello/uml1model/component.cpp - 082% similarity]
R  +1    -1    umbrello/umlmodel/component.h [from: umbrello/uml1model/component.h - 095% similarity]
R  +3    -3    umbrello/umlmodel/datatype.cpp [from: umbrello/uml1model/datatype.cpp - 093% similarity]
R  +2    -2    umbrello/umlmodel/datatype.h [from: umbrello/uml1model/datatype.h - 089% similarity]
R  +12   -9    umbrello/umlmodel/entity.cpp [from: umbrello/uml1model/entity.cpp - 097% similarity]
R  +1    -1    umbrello/umlmodel/entity.h [from: umbrello/uml1model/entity.h - 098% similarity]
R  +2    -2    umbrello/umlmodel/entityattribute.cpp [from: umbrello/uml1model/entityattribute.cpp - 097% similarity]
R  +1    -1    umbrello/umlmodel/entityattribute.h [from: umbrello/uml1model/entityattribute.h - 097% similarity]
R  +0    -0    umbrello/umlmodel/entityconstraint.cpp [from: umbrello/uml1model/entityconstraint.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/entityconstraint.h [from: umbrello/uml1model/entityconstraint.h - 100% similarity]
R  +11   -6    umbrello/umlmodel/enum.cpp [from: umbrello/uml1model/enum.cpp - 094% similarity]
R  +1    -1    umbrello/umlmodel/enum.h [from: umbrello/uml1model/enum.h - 096% similarity]
R  +2    -2    umbrello/umlmodel/enumliteral.cpp [from: umbrello/uml1model/enumliteral.cpp - 095% similarity]
R  +1    -1    umbrello/umlmodel/enumliteral.h [from: umbrello/uml1model/enumliteral.h - 096% similarity]
R  +39   -34   umbrello/umlmodel/folder.cpp [from: umbrello/uml1model/folder.cpp - 090% similarity]
R  +3    -3    umbrello/umlmodel/folder.h [from: umbrello/uml1model/folder.h - 093% similarity]
R  +2    -2    umbrello/umlmodel/foreignkeyconstraint.cpp [from: umbrello/uml1model/foreignkeyconstraint.cpp - 098% similarity]
R  +1    -1    umbrello/umlmodel/foreignkeyconstraint.h [from: umbrello/uml1model/foreignkeyconstraint.h - 098% similarity]
R  +4    -4    umbrello/umlmodel/instance.cpp [from: umbrello/uml1model/instance.cpp - 096% similarity]
R  +1    -1    umbrello/umlmodel/instance.h [from: umbrello/uml1model/instance.h - 097% similarity]
R  +7    -2    umbrello/umlmodel/instanceattribute.cpp [from: umbrello/uml1model/instanceattribute.cpp - 092% similarity]
R  +1    -1    umbrello/umlmodel/instanceattribute.h [from: umbrello/uml1model/instanceattribute.h - 097% similarity]
R  +3    -3    umbrello/umlmodel/node.cpp [from: umbrello/uml1model/node.cpp - 083% similarity]
R  +2    -2    umbrello/umlmodel/node.h [from: umbrello/uml1model/node.h - 087% similarity]
R  +27   -14   umbrello/umlmodel/operation.cpp [from: umbrello/uml1model/operation.cpp - 092% similarity]
R  +1    -1    umbrello/umlmodel/operation.h [from: umbrello/uml1model/operation.h - 098% similarity]
R  +12   -8    umbrello/umlmodel/package.cpp [from: umbrello/uml1model/package.cpp - 096% similarity]
R  +1    -1    umbrello/umlmodel/package.h [from: umbrello/uml1model/package.h - 097% similarity]
R  +3    -3    umbrello/umlmodel/port.cpp [from: umbrello/uml1model/port.cpp - 081% similarity]
R  +2    -2    umbrello/umlmodel/port.h [from: umbrello/uml1model/port.h - 087% similarity]
R  +12   -5    umbrello/umlmodel/stereotype.cpp [from: umbrello/uml1model/stereotype.cpp - 089% similarity]
R  +2    -2    umbrello/umlmodel/stereotype.h [from: umbrello/uml1model/stereotype.h - 095% similarity]
R  +6    -2    umbrello/umlmodel/template.cpp [from: umbrello/uml1model/template.cpp - 089% similarity]
R  +1    -1    umbrello/umlmodel/template.h [from: umbrello/uml1model/template.h - 096% similarity]
R  +0    -0    umbrello/umlmodel/umlassociationlist.h [from: umbrello/uml1model/umlassociationlist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlattributelist.cpp [from: umbrello/uml1model/umlattributelist.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlattributelist.h [from: umbrello/uml1model/umlattributelist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlcanvasobject.cpp [from: umbrello/uml1model/umlcanvasobject.cpp - 100% similarity]
R  +1    -1    umbrello/umlmodel/umlcanvasobject.h [from: umbrello/uml1model/umlcanvasobject.h - 098% similarity]
R  +0    -0    umbrello/umlmodel/umlclassifierlist.h [from: umbrello/uml1model/umlclassifierlist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlclassifierlistitemlist.cpp [from: umbrello/uml1model/umlclassifierlistitemlist.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlclassifierlistitemlist.h [from: umbrello/uml1model/umlclassifierlistitemlist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlentityattributelist.cpp [from: umbrello/uml1model/umlentityattributelist.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlentityattributelist.h [from: umbrello/uml1model/umlentityattributelist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlentityconstraintlist.cpp [from: umbrello/uml1model/umlentityconstraintlist.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlentityconstraintlist.h [from: umbrello/uml1model/umlentityconstraintlist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlentitylist.h [from: umbrello/uml1model/umlentitylist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlenumliterallist.h [from: umbrello/uml1model/umlenumliterallist.h - 100% similarity]
R  +59   -29   umbrello/umlmodel/umlobject.cpp [from: umbrello/uml1model/umlobject.cpp - 093% similarity]
R  +4    -4    umbrello/umlmodel/umlobject.h [from: umbrello/uml1model/umlobject.h - 098% similarity]
R  +0    -0    umbrello/umlmodel/umlobjectlist.cpp [from: umbrello/uml1model/umlobjectlist.cpp - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlobjectlist.h [from: umbrello/uml1model/umlobjectlist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlobjectprivate.h [from: umbrello/uml1model/umlobjectprivate.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umloperationlist.h [from: umbrello/uml1model/umloperationlist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umlpackagelist.h [from: umbrello/uml1model/umlpackagelist.h - 100% similarity]
R  +7    -5    umbrello/umlmodel/umlrole.cpp [from: umbrello/uml1model/umlrole.cpp - 097% similarity]
R  +2    -2    umbrello/umlmodel/umlrole.h [from: umbrello/uml1model/umlrole.h - 092% similarity]
R  +0    -0    umbrello/umlmodel/umlstereotypelist.h [from: umbrello/uml1model/umlstereotypelist.h - 100% similarity]
R  +0    -0    umbrello/umlmodel/umltemplatelist.h [from: umbrello/uml1model/umltemplatelist.h - 100% similarity]
R  +6    -3    umbrello/umlmodel/uniqueconstraint.cpp [from: umbrello/uml1model/uniqueconstraint.cpp - 096% similarity]
R  +1    -1    umbrello/umlmodel/uniqueconstraint.h [from: umbrello/uml1model/uniqueconstraint.h - 097% similarity]
R  +3    -3    umbrello/umlmodel/usecase.cpp [from: umbrello/uml1model/usecase.cpp - 083% similarity]
R  +2    -2    umbrello/umlmodel/usecase.h [from: umbrello/uml1model/usecase.h - 087% similarity]
M  +16   -16   umbrello/umlscene.cpp
M  +2    -2    umbrello/umlscene.h
M  +5    -5    umbrello/umlwidgets/activitywidget.cpp
M  +3    -3    umbrello/umlwidgets/activitywidget.h
M  +3    -3    umbrello/umlwidgets/actorwidget.cpp
M  +2    -2    umbrello/umlwidgets/actorwidget.h
M  +3    -3    umbrello/umlwidgets/artifactwidget.cpp
M  +2    -2    umbrello/umlwidgets/artifactwidget.h
M  +2    -2    umbrello/umlwidgets/associationline.cpp
M  +2    -2    umbrello/umlwidgets/associationline.h
M  +17   -17   umbrello/umlwidgets/associationwidget.cpp
M  +4    -4    umbrello/umlwidgets/associationwidget.h
M  +6    -6    umbrello/umlwidgets/associationwidgetrole.cpp
M  +3    -3    umbrello/umlwidgets/associationwidgetrole.h
M  +3    -3    umbrello/umlwidgets/boxwidget.cpp
M  +2    -2    umbrello/umlwidgets/boxwidget.h
M  +3    -3    umbrello/umlwidgets/categorywidget.cpp
M  +3    -3    umbrello/umlwidgets/categorywidget.h
M  +6    -6    umbrello/umlwidgets/classifierwidget.cpp
M  +2    -2    umbrello/umlwidgets/classifierwidget.h
M  +7    -7    umbrello/umlwidgets/combinedfragmentwidget.cpp
M  +3    -3    umbrello/umlwidgets/combinedfragmentwidget.h
M  +2    -2    umbrello/umlwidgets/componentwidget.cpp
M  +2    -2    umbrello/umlwidgets/componentwidget.h
M  +5    -5    umbrello/umlwidgets/datatypewidget.cpp
M  +3    -3    umbrello/umlwidgets/datatypewidget.h
M  +2    -2    umbrello/umlwidgets/diagramproxywidget.cpp
M  +3    -3    umbrello/umlwidgets/diagramproxywidget.h
M  +4    -4    umbrello/umlwidgets/entitywidget.cpp
M  +3    -3    umbrello/umlwidgets/entitywidget.h
M  +4    -4    umbrello/umlwidgets/enumwidget.cpp
M  +3    -3    umbrello/umlwidgets/enumwidget.h
M  +5    -5    umbrello/umlwidgets/floatingdashlinewidget.cpp
M  +3    -3    umbrello/umlwidgets/floatingdashlinewidget.h
M  +6    -6    umbrello/umlwidgets/floatingtextwidget.cpp
M  +3    -3    umbrello/umlwidgets/floatingtextwidget.h
M  +7    -7    umbrello/umlwidgets/forkjoinwidget.cpp
M  +3    -3    umbrello/umlwidgets/forkjoinwidget.h
M  +3    -3    umbrello/umlwidgets/linkwidget.cpp
M  +3    -3    umbrello/umlwidgets/linkwidget.h
M  +8    -8    umbrello/umlwidgets/messagewidget.cpp
M  +4    -4    umbrello/umlwidgets/messagewidget.h
M  +3    -3    umbrello/umlwidgets/nodewidget.cpp
M  +2    -2    umbrello/umlwidgets/nodewidget.h
M  +5    -5    umbrello/umlwidgets/notewidget.cpp
M  +3    -3    umbrello/umlwidgets/notewidget.h
M  +5    -5    umbrello/umlwidgets/objectnodewidget.cpp
M  +3    -3    umbrello/umlwidgets/objectnodewidget.h
M  +5    -5    umbrello/umlwidgets/objectwidget.cpp
M  +3    -3    umbrello/umlwidgets/objectwidget.h
M  +3    -3    umbrello/umlwidgets/packagewidget.cpp
M  +2    -2    umbrello/umlwidgets/packagewidget.h
M  +6    -6    umbrello/umlwidgets/pinportbase.cpp
M  +2    -2    umbrello/umlwidgets/pinportbase.h
M  +5    -5    umbrello/umlwidgets/preconditionwidget.cpp
M  +3    -3    umbrello/umlwidgets/preconditionwidget.h
M  +5    -5    umbrello/umlwidgets/regionwidget.cpp
M  +3    -3    umbrello/umlwidgets/regionwidget.h
M  +7    -7    umbrello/umlwidgets/signalwidget.cpp
M  +3    -3    umbrello/umlwidgets/signalwidget.h
M  +5    -5    umbrello/umlwidgets/statewidget.cpp
M  +3    -3    umbrello/umlwidgets/statewidget.h
M  +6    -6    umbrello/umlwidgets/umlwidget.cpp
M  +2    -2    umbrello/umlwidgets/umlwidget.h
M  +3    -3    umbrello/umlwidgets/usecasewidget.cpp
M  +3    -3    umbrello/umlwidgets/usecasewidget.h
M  +2    -2    umbrello/umlwidgets/widgetbase.cpp
M  +32   -32   umbrello/umlwidgets/widgetbase.h
M  +2    -1    umbrello/version.h
M  +1    -1    unittests/CMakeLists.txt
M  +4    -4    unittests/testbase.h
M  +2    -2    unittests/testoptionstate.cpp
M  +2    -2    unittests/testumlobject.cpp

https://invent.kde.org/sdk/umbrello/commit/b57c76163be60160b4559cd6c7857e1c911196f3
Comment 32 Oliver Kellogg 2022-03-07 05:42:11 UTC
Git commit 1c31f5368f672e019a7b6ff88275b643123ba9d8 by Oliver Kellogg.
Committed on 07/03/2022 at 05:40.
Pushed by okellogg into branch 'master'.

umbrello/umlmodel/association.cpp followup to commit b57c761 :
- In function saveToXMI case m_AssocType Generalization do not save the
  association if Settings::optionState().generalState.uml2 is true.
  Reason: The generalization is saved by UMLClassifier::saveToXMI.

M  +7    -4    umbrello/umlmodel/association.cpp

https://invent.kde.org/sdk/umbrello/commit/1c31f5368f672e019a7b6ff88275b643123ba9d8
Comment 33 Oliver Kellogg 2022-03-07 22:10:57 UTC
Git commit f0ee00ce004097d295781deb07d5e70bb13dc961 by Oliver Kellogg.
Committed on 07/03/2022 at 22:10.
Pushed by okellogg into branch 'master'.

Followup to commit 26aeb516 - further UML2 alignment for loading Umbrello XMI into PapyrusUML

umbrello/umlmodel/folder.cpp
- At function save1 :
  - Update documentation.
  - In UML2 mode, when saving a predefined view create a
    <packagedElement xmi:type="uml:Model"> element.
- At function saveToXMI improve documentation.
- At function load1 :
  - Update documentation.
  - On comparing `type' with "packagedElement" and "ownedElement" a
    simple equality test suffices.

umbrello/umldoc.cpp
- In function loadUMLObjectsFromXMI for-loop of node test `type'
  against "packagedElement" alongside testing
  tagEq(type, QLatin1String("Model")). Reason: The predefined folders
  are now generated as <packagedElement>s.

M  +14   -7    umbrello/umldoc.cpp
M  +20   -11   umbrello/umlmodel/folder.cpp

https://invent.kde.org/sdk/umbrello/commit/f0ee00ce004097d295781deb07d5e70bb13dc961