|
8 | 8 | import lombok.AccessLevel;
|
9 | 9 | import lombok.NoArgsConstructor;
|
10 | 10 |
|
| 11 | +import java.util.Arrays; |
| 12 | +import java.util.Objects; |
| 13 | + |
11 | 14 | /**
|
12 | 15 | * {@link IDiagramUIModel} supports only certain subset of properties (see {@code PROPERTY_XXX} constants in {@link IDiagramUIModel}).
|
13 | 16 | * There is no standard way to set plugin-defined properties (e.g. external id when exporting diagram to a server).
|
@@ -66,12 +69,28 @@ private static void setTaggedValue(IDiagramUIModel diagram, String name, String
|
66 | 69 | private static ITaggedValueContainer getTaggedValues(IDiagramUIModel diagram, boolean create) {
|
67 | 70 | String extendedPropertiesModelElementName = "_diagram." + diagram.getId() + ".extended.properties";
|
68 | 71 | // model element
|
69 |
| - IModelElement extendedPropertiesModelElement = diagram.getParentModel().getChildByName(extendedPropertiesModelElementName); |
| 72 | + IModelElement parentModelElement = diagram.getParentModel(); |
| 73 | + IModelElement extendedPropertiesModelElement; |
| 74 | + if (parentModelElement != null) { |
| 75 | + extendedPropertiesModelElement = parentModelElement.getChildByName(extendedPropertiesModelElementName); |
| 76 | + } else { |
| 77 | + extendedPropertiesModelElement = Arrays.stream( |
| 78 | + diagram.getProject().toModelElementArray(IModelElementFactory.MODEL_TYPE_NOTE) |
| 79 | + ) |
| 80 | + .filter(modelElement -> modelElement.getParent() == null) |
| 81 | + .filter(modelElement -> Objects.equals(modelElement.getName(), extendedPropertiesModelElementName)) |
| 82 | + .findAny() |
| 83 | + .orElse(null); |
| 84 | + |
| 85 | + } |
70 | 86 | if (extendedPropertiesModelElement == null && create) {
|
71 | 87 | // create diagram element
|
72 |
| - extendedPropertiesModelElement = diagram.getParentModel().createChild(IModelElementFactory.MODEL_TYPE_NOTE); |
| 88 | + extendedPropertiesModelElement = IModelElementFactory.instance().createNOTE(); |
73 | 89 | extendedPropertiesModelElement.setName(extendedPropertiesModelElementName);
|
74 | 90 | extendedPropertiesModelElement.setDescription("Diagram extended properties");
|
| 91 | + if (parentModelElement != null) { |
| 92 | + parentModelElement.addChild(extendedPropertiesModelElement); |
| 93 | + } |
75 | 94 | }
|
76 | 95 | // get tagged values
|
77 | 96 | ITaggedValueContainer taggedValues = null;
|
|
0 commit comments