1
Automation Interface, Add-Ins and Tools / Mirror Nodes - An alternative to External References
« on: December 27, 2025, 05:54:13 pm »
Following our adventures with External References (where we need to transport one or more specific packages between two or more repositories), we’ve considered the issue and decided we need a more robust solution for our purposes. (see https://sparxsystems.com/forums/smf/index.php/topic,49201.0.html)
So we came up with the concept of “Mirror Nodes”. A Mirror Node is a clone of its “Master” Node, so that if the Master is updated, we (automation) will also update the “Mirror” to maintain the “Mirror” status.
A new edge metatype, mirroring, will connect the two nodes.
We can thus use the Mirror node in the package to be exported, and it will appear as a full participant in the other repository. We can also use Mirror Nodes within the same repository.
Architecturally, we propose adding a property, MirrorStatus, to the node, with the following enum values: None, Master, and mirror. Note that the absence of the property implies None. The node will also have the property LastMirrorActionTimepoint, which specifies when the last Mirroring action occurred. If the MirrorStatus is None (whether set or implied), then the LastMirrorActionTimepoint is set to Not Applicable. If implied, then the LastMirrorActionTimepoint property may be absent.
Additionally, the mirroring edge will also have the LastMirrorActionTimepoint property.
While conceptually we could allow a two-way link (i.e., will enable the mirror to change and the change to be pushed back to the Master), we have opted to allow only forward mirroring.
We have also decided not to allow “Mirrors of Mirrors”! That is, if the user attempts this, they will be guided to mirror the original Master.
As you can see, this is a mix of the existing Sparx functionality for Time-Aware Modelling (TAM) and Virtual Connector Ends (VCEs), with an extra one thrown in.
I will leave it to the reader to consider what would happen if the mirror were transported to another repository, while the Master is not.
Before we go ahead with implementation, can anyone see any issues with the proposal?
TIA,
Paolo
So we came up with the concept of “Mirror Nodes”. A Mirror Node is a clone of its “Master” Node, so that if the Master is updated, we (automation) will also update the “Mirror” to maintain the “Mirror” status.
A new edge metatype, mirroring, will connect the two nodes.
We can thus use the Mirror node in the package to be exported, and it will appear as a full participant in the other repository. We can also use Mirror Nodes within the same repository.
Architecturally, we propose adding a property, MirrorStatus, to the node, with the following enum values: None, Master, and mirror. Note that the absence of the property implies None. The node will also have the property LastMirrorActionTimepoint, which specifies when the last Mirroring action occurred. If the MirrorStatus is None (whether set or implied), then the LastMirrorActionTimepoint is set to Not Applicable. If implied, then the LastMirrorActionTimepoint property may be absent.
Additionally, the mirroring edge will also have the LastMirrorActionTimepoint property.
While conceptually we could allow a two-way link (i.e., will enable the mirror to change and the change to be pushed back to the Master), we have opted to allow only forward mirroring.
We have also decided not to allow “Mirrors of Mirrors”! That is, if the user attempts this, they will be guided to mirror the original Master.
As you can see, this is a mix of the existing Sparx functionality for Time-Aware Modelling (TAM) and Virtual Connector Ends (VCEs), with an extra one thrown in.
I will leave it to the reader to consider what would happen if the mirror were transported to another repository, while the Master is not.
Before we go ahead with implementation, can anyone see any issues with the proposal?
TIA,
Paolo
I agree with your point about the searching capability. Why is searching SO hard (as a functionality)? It’s not just here that one can criticise the searching as being less than optimal. Anyway, another gentle correction (to myself, not the least), Nesting doesn’t actually apply to physical nesting; it applies to referential or access nesting - as I have indicated in the past, nesting defines the namespace of the meronym - in other words, you have to access the higher level items to get to the lower level item (x.y.z). The physical nesting in the browser is just a manifestation of that concept.