Rename Package.ownedClassifier to ownedType
And add upgrade for loading.
This commit is contained in:
@ -11,9 +11,9 @@ A UML element can have two tags: references (`ref`) and values (`val`). Referenc
|
||||
Diagram is a special case. All items on a canvas are embedded in the Diagram
|
||||
element's.
|
||||
|
||||
Since many references are bi-directional, you'll find both ends defined in the file (e.g. `Package.ownedClassifier` - `Actor.package`, and `Diagram.ownedPresentation` and `UseCaseItem.diagram`).
|
||||
Since many references are bi-directional, you'll find both ends defined in the file (e.g. `Package.ownedType` - `Actor.package`, and `Diagram.ownedPresentation` and `UseCaseItem.diagram`).
|
||||
|
||||
```xml
|
||||
```xml
|
||||
<?xml version="1.0" ?>
|
||||
<Gaphor version="1.0" gaphor_version="0.3">
|
||||
<Package id="1">
|
||||
|
@ -19,7 +19,7 @@ def activity_config(new_item):
|
||||
package = diagram.namespace
|
||||
|
||||
activities = (
|
||||
[i for i in package.ownedClassifier if isinstance(i, UML.Activity)]
|
||||
[i for i in package.ownedType if isinstance(i, UML.Activity)]
|
||||
if package
|
||||
else diagram.model.lselect(
|
||||
lambda e: isinstance(e, UML.Activity) and e.package is None
|
||||
|
@ -19,7 +19,7 @@ def interaction_config(new_item):
|
||||
package = diagram.namespace
|
||||
|
||||
interactions = (
|
||||
[i for i in package.ownedClassifier if isinstance(i, UML.Interaction)]
|
||||
[i for i in package.ownedType if isinstance(i, UML.Interaction)]
|
||||
if package
|
||||
else diagram.model.lselect(
|
||||
lambda e: isinstance(e, UML.Interaction) and e.package is None
|
||||
|
@ -29,7 +29,7 @@ def state_machine_config(new_item):
|
||||
package = diagram.namespace
|
||||
|
||||
state_machines = (
|
||||
[i for i in package.ownedClassifier if isinstance(i, UML.StateMachine)]
|
||||
[i for i in package.ownedType if isinstance(i, UML.StateMachine)]
|
||||
if package
|
||||
else diagram.model.lselect(
|
||||
lambda e: isinstance(e, UML.StateMachine) and e.package is None
|
||||
|
@ -260,7 +260,7 @@ def test_namedelement_qualifiedname(factory):
|
||||
|
||||
assert ["Class"] == c.qualifiedName
|
||||
|
||||
p.ownedClassifier = c
|
||||
p.ownedType = c
|
||||
|
||||
assert ["Package", "Class"] == c.qualifiedName
|
||||
|
||||
|
@ -373,7 +373,7 @@ class Package(Namespace, PackageableElement):
|
||||
ownedDiagram: relation_many[Diagram]
|
||||
nestedPackage: relation_many[Package]
|
||||
package: relation_one[Package]
|
||||
ownedClassifier: relation_many[Type]
|
||||
ownedType: relation_many[Type]
|
||||
packageMerge: relation_many[PackageMerge]
|
||||
appliedProfile: relation_many[ProfileApplication]
|
||||
packagedElement: relation_many[PackageableElement]
|
||||
@ -869,10 +869,8 @@ Activity.group = association(
|
||||
"group", ActivityGroup, composite=True, opposite="activity"
|
||||
)
|
||||
ActivityGroup.activity = association("activity", Activity, upper=1, opposite="group")
|
||||
Package.ownedClassifier = association(
|
||||
"ownedClassifier", Type, composite=True, opposite="package"
|
||||
)
|
||||
Type.package = association("package", Package, upper=1, opposite="ownedClassifier")
|
||||
Package.ownedType = association("ownedType", Type, composite=True, opposite="package")
|
||||
Type.package = association("package", Package, upper=1, opposite="ownedType")
|
||||
Property.subsettedProperty = association("subsettedProperty", Property)
|
||||
Property.classifier = association(
|
||||
"classifier", Classifier, upper=1, opposite="attribute"
|
||||
@ -1421,7 +1419,7 @@ Package.packagedElement = derivedunion(
|
||||
PackageableElement,
|
||||
0,
|
||||
"*",
|
||||
Package.ownedClassifier,
|
||||
Package.ownedType,
|
||||
Package.nestedPackage,
|
||||
)
|
||||
Namespace.ownedMember = derivedunion(
|
||||
|
@ -174,7 +174,7 @@ def load_elements_generator(elements, factory, modeling_language, gaphor_version
|
||||
)
|
||||
yield from _load_attributes_and_references(elements, update_status_queue)
|
||||
|
||||
ensure_style_sheet_is_present(factory)
|
||||
upgrade_ensure_style_sheet_is_present(factory)
|
||||
|
||||
for id, elem in list(elements.items()):
|
||||
yield from update_status_queue()
|
||||
@ -207,7 +207,9 @@ def _load_elements_and_canvasitems(
|
||||
yield from update_status_queue()
|
||||
if isinstance(elem, parser.element):
|
||||
if version_lower_than(gaphor_version, (2, 1, 0)):
|
||||
elem = upgrade_element_to_2_1_0(elem)
|
||||
elem = upgrade_element_owned_comment_to_comment(elem)
|
||||
if version_lower_than(gaphor_version, (2, 3, 0)):
|
||||
elem = upgrade_package_owned_classifier_to_owned_type(elem)
|
||||
|
||||
cls = modeling_language.lookup_element(elem.type)
|
||||
assert cls, f"Type {elem.type} can not be loaded: no such element"
|
||||
@ -368,7 +370,8 @@ def clone_canvasitem(item, subject_id):
|
||||
return new_item
|
||||
|
||||
|
||||
def ensure_style_sheet_is_present(factory):
|
||||
# since 2.2.0
|
||||
def upgrade_ensure_style_sheet_is_present(factory):
|
||||
style_sheet = next(factory.select(StyleSheet), None)
|
||||
if not style_sheet:
|
||||
factory.create(StyleSheet)
|
||||
@ -408,9 +411,21 @@ def upgrade_canvas_item_to_1_3_0(item):
|
||||
return item
|
||||
|
||||
|
||||
def upgrade_element_to_2_1_0(elem):
|
||||
# since 2.1.0
|
||||
def upgrade_element_owned_comment_to_comment(elem):
|
||||
for name, refids in dict(elem.references).items():
|
||||
if name == "ownedComment":
|
||||
elem.references["comment"] = refids
|
||||
del elem.references["ownedComment"]
|
||||
break
|
||||
return elem
|
||||
|
||||
|
||||
# since 2.3.0
|
||||
def upgrade_package_owned_classifier_to_owned_type(elem):
|
||||
for name, refids in dict(elem.references).items():
|
||||
if name == "ownedClassifier":
|
||||
elem.references["ownedType"] = refids
|
||||
del elem.references["ownedClassifier"]
|
||||
break
|
||||
return elem
|
||||
|
@ -25,3 +25,13 @@ def test_owned_comment_to_comment_upgrade(loader):
|
||||
assert elem in comment.annotatedElement
|
||||
assert comment in elem.comment
|
||||
assert isinstance(style_sheet, StyleSheet)
|
||||
|
||||
|
||||
def test_owned_classifier_to_owned_type(loader):
|
||||
p = element(id="1", type="Package")
|
||||
p.references["ownedClassifier"] = ["2"]
|
||||
c = element(id="2", type="Class")
|
||||
|
||||
package, clazz, _ = loader(p, c)
|
||||
assert clazz in package.ownedType
|
||||
assert clazz.package is package
|
||||
|
@ -12487,7 +12487,7 @@
|
||||
<ref refid="DCE:B445FB00-4695-11D7-B567-379CA7034986"/>
|
||||
</class_>
|
||||
<name>
|
||||
<val>ownedClassifier</val>
|
||||
<val>ownedType</val>
|
||||
</name>
|
||||
<type>
|
||||
<ref refid="DCE:6B38D020-83D9-11D7-ADE2-4B1972AF3391"/>
|
||||
|
Reference in New Issue
Block a user