Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix UML composite and shared association #398

Merged
merged 1 commit into from
Aug 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
51 changes: 7 additions & 44 deletions gaphor/SysML/toolbox.py
@@ -1,7 +1,5 @@
"""The action definition for the SysML toolbox."""

from enum import Enum

from gaphas.item import SE

from gaphor import UML, diagram
Expand All @@ -11,48 +9,13 @@
from gaphor.SysML import diagramitems as sysml_items
from gaphor.SysML import sysml
from gaphor.UML import diagramitems as uml_items
from gaphor.UML.toolbox import namespace_config


class AssociationType(Enum):
COMPOSITE = "composite"
SHARED = "shared"


def initial_pseudostate_config(new_item):
new_item.subject.kind = "initial"


def history_pseudostate_config(new_item):
new_item.subject.kind = "shallowHistory"


def metaclass_config(new_item):
namespace_config(new_item)
new_item.subject.name = "Class"


def create_association(
assoc_item: uml_items.AssociationItem, association_type: AssociationType
) -> None:
assoc = assoc_item.subject
assoc.memberEnd.append(assoc_item.model.create(UML.Property))
assoc.memberEnd.append(assoc_item.model.create(UML.Property))

assoc_item.head_end.subject = assoc.memberEnd[0]
assoc_item.tail_end.subject = assoc.memberEnd[1]

UML.model.set_navigability(assoc, assoc_item.head_end.subject, True)
assoc_item.head_end.subject.aggregation = association_type.value


def composite_association_config(assoc_item: uml_items.AssociationItem) -> None:
create_association(assoc_item, AssociationType.COMPOSITE)


def shared_association_config(assoc_item: uml_items.AssociationItem) -> None:
create_association(assoc_item, AssociationType.SHARED)

from gaphor.UML.toolbox import (
composite_association_config,
history_pseudostate_config,
initial_pseudostate_config,
namespace_config,
shared_association_config,
)

# Actions: ((section (name, label, icon_name, shortcut)), ...)
sysml_toolbox_actions: ToolboxDefinition = (
Expand Down
40 changes: 38 additions & 2 deletions gaphor/UML/toolbox.py
@@ -1,5 +1,6 @@
"""The action definition for the UML toolbox."""

from enum import Enum

from gaphas.item import SE

Expand All @@ -10,6 +11,11 @@
from gaphor.UML import diagramitems


class AssociationType(Enum):
COMPOSITE = "composite"
SHARED = "shared"


def namespace_config(new_item):
subject = new_item.subject
diagram = new_item.diagram
Expand All @@ -30,6 +36,28 @@ def metaclass_config(new_item):
new_item.subject.name = "Class"


def create_association(
assoc_item: diagramitems.AssociationItem, association_type: AssociationType
) -> None:
assoc = assoc_item.subject
assoc.memberEnd.append(assoc_item.model.create(UML.Property))
assoc.memberEnd.append(assoc_item.model.create(UML.Property))

assoc_item.head_end.subject = assoc.memberEnd[0]
assoc_item.tail_end.subject = assoc.memberEnd[1]

UML.model.set_navigability(assoc, assoc_item.head_end.subject, True)
assoc_item.head_end.subject.aggregation = association_type.value


def composite_association_config(assoc_item: diagramitems.AssociationItem) -> None:
create_association(assoc_item, AssociationType.COMPOSITE)


def shared_association_config(assoc_item: diagramitems.AssociationItem) -> None:
create_association(assoc_item, AssociationType.SHARED)


# Actions: ((section (name, label, icon_name, shortcut)), ...)
uml_toolbox_actions: ToolboxDefinition = (
(
Expand Down Expand Up @@ -124,14 +152,22 @@ def metaclass_config(new_item):
gettext("Composite Association"),
"gaphor-composite-association-symbolic",
"<Shift>Z",
PlacementTool.new_item_factory(diagramitems.AssociationItem),
PlacementTool.new_item_factory(
diagramitems.AssociationItem,
UML.Association,
config_func=composite_association_config,
),
),
ToolDef(
"toolbox-shared-association",
gettext("Shared Association"),
"gaphor-shared-association-symbolic",
"<Shift>Q",
PlacementTool.new_item_factory(diagramitems.AssociationItem),
PlacementTool.new_item_factory(
diagramitems.AssociationItem,
UML.Association,
config_func=shared_association_config,
),
),
ToolDef(
"toolbox-association",
Expand Down